本文共 3139 字,大约阅读时间需要 10 分钟。
逛网站时无意间看到一道测试题,看到这标题我吓到了(最难面试IT公司),本以为应该很难完成的,分析之后,花了半小时用python写出来了,各位朋友们也可以测试测试哦。不限语言。
这是题目发布网址:
题如下:
你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有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
程序获取3个个位数特殊值,然后循环从1说到100,如满足问题中与特殊值的关系,则按指定的输出。
对于上述问题描述中的关系,优先级分析如下:
1、如果数中包含了第一个数,忽略其它规则。说:Fizz
2、如同时是三个数的倍数,说:FizzBuzzWhizz
3、所报数字同时是两个特殊数倍数,即第1、2个数的倍数说:FizzBuzz,第1、3个数的倍数说:FizzWhizz ,第2、3个数的倍数说:BuzzWhizz
4、所报数是第一个数的倍数,说:Fizz
5、所报数是第二个数的倍数,说:Buzz
6、所报数是第三个数的倍数,说:Whizz
7、如上面都不是,说:当前数字
#!/usr/bin/python#authon:yangrong#date:2014-04-29#mail:10286460@qq.comtry: num=raw_input('Please input three digit,and numbers less than 10,Example input:3,5,7 \ninput:').split(',') if 1<=int(num[0])<10 and 1<=int(num[1])<10 and1<=int(num[2])<10:pass else: raise IdexError for i in range(1,101): if num[0] in str(i):print'Fizz' elif i%int(num[0])==0 and i%int(num[1])==0 and i%int(num[2])==0 :print 'FizzBuzzWhizz' elif i%int(num[0])==0 andi%int(num[1])==0:print 'FizzBuzz' elif i%int(num[1])==0 andi%int(num[2])==0:print 'BuzzWhizz' elif i%int(num[0])==0 andi%int(num[2])==0:print 'FizzWhizz' elif i%int(num[0])==0:print'Fizz' elif i%int(num[1])==0:print'Buzz' elif i%int(num[2])==0:print'Whize' else:print iexcept: print 'Please input three digit,and numbers less than 10. Example: 3,5,7'
如果输入的数值不是3个个位数,则提示并退出,如下面两次测试。
root@yangrong:/python# python Test.py
Please input three digit,and numbers lessthan 10, Example input:3,5,7
input: a,b,c
Please input three digit,and numbers lessthan 10. Example: 3,5,7
root@yangrong:/python# python Test.py
Please input three digit,and numbers lessthan 10, Example input:3,5,7
input: 1,2,100
Please input three digit,and numbers lessthan 10. Example: 3,5,7
输入正确的数值执行效果
root@yangrong:/python# python Test.py
Please input three digit,and numbers lessthan 10, Example input:3,5,7
input: 3,5,7
1
2
Fizz
4
Buzz
Fizz
Whize
8
Fizz
Buzz
11
Fizz
Fizz
Whize
FizzBuzz
16
17
Fizz
19
Buzz
FizzWhizz
22
Fizz
Fizz
Buzz
26
Fizz
Whize
29
Fizz
Fizz
Fizz
Fizz
Fizz
Fizz
Fizz
Fizz
Fizz
Fizz
Buzz
41
FizzWhizz
Fizz
44
FizzBuzz
46
47
Fizz
Whize
Buzz
Fizz
52
Fizz
Fizz
Buzz
Whize
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
BuzzWhizz
71
Fizz
Fizz
74
FizzBuzz
76
Whize
Fizz
79
Buzz
Fizz
82
Fizz
FizzWhizz
Buzz
86
Fizz
88
89
FizzBuzz
Whize
92
Fizz
94
Buzz
Fizz
97
Whize
Fizz
Buzz
写完之后,发现代码非常凌乱,一开始用了好多的循环完成了功能,后来思考之后把那些循环去掉,换成elif来写的。代码简洁了一半。正如这道题要求所说:
即使简单的代码,做到尽善尽美一样难能可贵,所以,提交之前,请想一想,它是不是可以更卓越。
转载地址:http://mjixx.baihongyu.com/