一行代码搞定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中操作的截图。

总结

用python来描述逻辑和算法非常爽。当然,描述数据结构c语言更合适,因为c语言有美妙的指针。

把代码写的太短常常会被领导认为干活太少了。

人们往往倾向于觉得把代码写的复杂看不懂的人很牛逼,呵呵。

时间: 2024-10-10 18:27:42

一行代码搞定ThoughtWorks面试题的相关文章

Java一行代码搞定两个数互换

提到两个数互换,首先想到的应该是如何不引入第三个数实现,当然也有很多方法. 想到个有趣的事就是怎么用一行代码搞定互换,其实也不难. 先来两种小学生写法: a = a + b - (b = a); a = a * b / (b = a); 以上两句结果一样,就是把a,b值互换. 还有一种无赖写法: a = b + (b = a) * 0; 稍高端的写法是: a = a ^ b ^ (b = a); 这个原理就是一个数异或另一个数两次值不变.

一行代码搞定Adapter

15年Google I/O大会发不了三个重要支持库 >Material design (Android Support Design) >百分比布局:Percent support lib >数据绑定: Data Binding Library 如果你还不没用过Data Bind Library 没关系 那你知道ButterKnife吧 DataBindLibrary 和ButterKnife都是编译时期生成相应的注解文件 因此 在性能上不会有什么大的影响 因此放心的尝试吧.(个人感觉D

一行代码搞定所有屏幕适配

一行代码搞定所有屏幕适配AbViewUtil andbase框架 介绍:http://blog.csdn.net/menglele1314/article/details/46422409 andbase框架 下载:http://download.csdn.net/detail/menglele1314/8786989 导入andbase开源框架 1.首先在你的应用的application中设置: AbAppConfig.UI_WIDTH = 1080; AbAppConfig.UI_HEIGH

iOS 3DES加密解密(一行代码搞定)

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解:3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法. 3DES又称Triple DES,是DES加密算法的一种模式,它使用3条56位的密钥对数据进行三次加密.数据加密标

各种IE(IE6-IE10)兼容问题一行代码搞定

x-ua-compatible 用来指定IE浏览器解析编译页面的model x-ua-compatible 头标签大小写不敏感,必须用在 head 中,必须在除 title 外的其他 meta 之前使用. 1.使用一行代码来指定浏览器使用特定的文档模式. <meta http-equiv="x-ua-compatible" content="IE=9" > <meta http-equiv="x-ua-compatible" c

一行代码搞定UITextView的placeholder

分类已经写好,直接拿来用即可 demo: UITextView *textView = [[UITextView alloc] init]; textView.font = [UIFont systemFontOfSize:18.0]; //注意先设置字体,再设置placeholder textView.placeholder = @"请输入您的问题..."; 主要技术点: 用运行时动态绑定一个label来显示placeholder 详细代码:(已封装好的分类) 1 /** 注意先设置

Android防止过快点击造成多次事件 一行代码搞定,特别简单,可以复用

onClick事件是Android开发中最常见的事件,正常情况下这段代码是没什么问题的, 但是Android设备的机型性能等千差万别,如果碰到比较卡的手机, 则有可能出现submitOrder()函数跳转页面出现延迟的现象.碰到这种现象,则用户就很有可能再次点击一次, 从而造成函数被调用两次,出现重复订单的BUG. 解决方法 方案一:(不建议) 一般地,碰到这现象,首先就会想到的就是在点击之后把submitButton设置为不可点击: 此方法也确实有效,不过如果submitOrder()方法没有

一行命令搞定没有Visual Studio2003(2005)时的手动编译

一行命令搞定没有Visual Studio2003(2005)时的手动编译命令 起因: 有时可能会发生这样的情况,网站做好了,要在服务器上布署.布署中发现,有些地方代码需要小改,然而,在服务器或其他地方没有安装VS系列工具,但服务器上已安装有.net框架,此时仍然需要对已有项目的某些文件进行少量修改,并再次进行编译.此时,在服务器上安装VS系列开发工具并不可能,也不经济.那么下面的方法就可以派上用场了. (1)将下面一行保存到你项目所在的目录下一个名为:buid.bat文件中: %SYSTEMR

史上最牛逼的javascript俄罗斯方块,63行代码搞定啊

<!doctype html><html><head></head><body> <div id="box" style="width:252px;font:25px/25px 宋体;background:#000;color:#9f9;border:#999 20px ridge;text-shadow:2px 3px 1px #0f0;"></div> <script>