FizzBuzzWhizz

前段时间拉勾的这个面试问题比较火,当时也用Python试了试。

【拉勾专场】抛弃简历!让代码说话!

强强联手,互联网垂直招聘专家拉勾网携手全球顶尖IT公司ThoughtWorks共同推出此次代码挑战!等你来打擂!

此刻到5月4日上午9点,你都可以撰写你的代码,并回传给我们。

5月4日-5月7日,我们会日以继夜的推敲你的代码;

5月8日-5月9日,通过代码测试的你,会接到我们温柔的电话;

5月10日-5月11日,来到ThoughtWorks,感受一天的独特面试(包括逻辑笔试、结对编程、技术对话)!

大道至简,知易行难!

我们的题目简约而不简单,千万不要轻敌,即使简单的代码,做到尽善尽美一样难能可贵,所以,提交之前,请想一想,它是不是可以更卓越,有人可以10行搞定,亲,你呢 :) 

代码要求:

1,语言不限,Java, C#, Ruby, C++, Js, Python, Scala, objective-C统统可以,小语种也没问题,只要你擅长;

2,强烈建议写单元测试;

3,请展示出你超赞的面向对象/函数式编程功底;

4,建议尽量减少圈复杂度;

5,请提交可运行的代码,及相关构建脚本/说明文档(代码运行平台和环境);

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
 
 
下面是代码,写的很简单,没有用面向对象 ,也没有写单元测试。
 1 #coding:utf8
 2 def    FizzBuzzWhizz(a,b,c):
 3     toSays=("Fizz","Buzz","Whizz")
 4     for x in range(1,101):
 5         say=""
 6         if str(x).find(str(a))>=0:
 7             say=toSays[0]
 8         else:
 9             if x%a==0:
10                 say=say+toSays[0]
11             if x%b==0:
12                 say=say+toSays[1]
13             if x%c==0:
14                 say=say+toSays[2]
15         if len(say)>0:
16             print say
17         else:
18             print x
19 
20 if __name__ == '__main__':
21     FizzBuzzWhizz(3,5,7)
 
原文地址:https://www.cnblogs.com/tinker/p/3782709.html