文章出處
1. 你首先說出三個不同的特殊數,要求必須是個位數,比如3、5、7。
文章列表
在拉勾上看到一道題目,或許有很多精妙的做法,歡迎討論,集思廣益。題目如下:
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。
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
1
2
Fizz
4
Buzz
Fizz
Whizz
8
Fizz
Buzz
11
Fizz
Fizz
Whizz
FizzBuzz
16
17
Fizz
19
Buzz
…
Whizz
FizzBuzz
16
17
Fizz
19
Buzz
…
一直到100
我的解法:
#常規做法 def dump_number(num1, num2, num3): for i in range(1, 101): if str(i).find('3') > -1: print('Fizz') elif i % (num1 * num2 * num3) == 0: print('FizzBuzzWhizz') elif i % (num1 * num2) == 0: print('FizzBuzz') elif i % (num1 * num3) == 0: print('FizzWhizz') elif i % (num2 * num3) == 0: print('BuzzWhizz') elif i % num1 == 0: print('Fizz') elif i % num2 == 0: print('Buzz') elif i % num3 == 0: print('Whizz') else: print(i) dump_number(3, 5, 7)
#一句話搞定收工 r = [str(i).find('3') > -1 and 'Fizz' or 'Fizz'[i % 3 * 4 : ] + 'Buzz'[i % 5 * 4 : ] + 'Whizz'[i % 7 * 5 : ] or i for i in range(1, 101)] print(r)
文章列表
全站熱搜