文章出處

在拉勾上看到一道題目,或許有很多精妙的做法,歡迎討論,集思廣益。題目如下:

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
 
我的解法:
#常規做法
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)

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()