一行代码搞定ThoughtWorks面试题

今天在微博看到一道有趣的题目。作为python的脑残粉,自然手痒。

题目在这里

FizzBuzzWhizz



你是一名体育老师。在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有100名学生在上课。游戏的规则是:

1. 你首先说出三个不同的特殊数,要求必须是个位数。比方3、5、7。

2. 让全部学生拍成一队,然后按顺序报数。

3. 学生报数时,假设所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz。假设所报数字是第二个特殊数(5)的倍数,那么要说Buzz;假设所报数字是第三个特殊数(7)的倍数。那么要说Whizz。

4. 学生报数时,假设所报数字同一时候是两个特殊数的倍数情况下,也要特殊处理。比方第一个特殊数和第二个特殊数的倍数。那么不能说该数字,而是要说FizzBuzz, 以此类推。假设同一时候是三个特殊数的倍数。那么要说FizzBuzzWhizz。

5. 学生报数时,假设所报数字包括了第一个特殊数。那么也不能说该数字。而是要说对应的单词,比方本例中第一个特殊数是3。那么要报13的同学应该说Fizz。

假设数字中包括了第一个特殊数,那么忽略规则3和规则4,比方要报35的同学仅仅报Fizz,不报BuzzWhizz。

如今,我们须要你完毕一个程序来模拟这个游戏,它首先接受3个特殊数。然后输出100名学生应该报数的数或单词。

比方,

 

输入

3,5,7

输出(片段)





1

2

Fizz

4

Buzz

Fizz

Whizz

8

Fizz

Buzz

11

Fizz

Fizz

Whizz

FizzBuzz

16

17

Fizz

19

Buzz 



一直到100

解答:

fiz = lambda a,b,c:['Fizz'*(str(a) in str(x)) or 'Fizz'*(x%a==0)+'Buzz'*(x%b==0)+'Whizz'*(x%c==0) or x for x in range(1,101) if 0<a<b<c<10]
print fiz(3,5,7)

以下是ipython中操作的截图。

一行代码搞定ThoughtWorks面试题

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGFuZHNvbWVrYW5n/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

总结

用python来描写叙述逻辑和算法很爽。当然,描写叙述数据结构c语言更合适。由于c语言有美妙的指针。

把代码写的太短经常会被领导觉得干活太少了。

人们往往倾向于认为把代码写的复杂看不懂的人非常牛逼,呵呵。

上一篇:kubernetes入门(04)kubernetes的核心概念(1)


下一篇:openstack名称发音收集