一行代碼搞定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語言有美妙的指針。

把代碼寫的太短經常會被領導覺得干活太少了。

人們往往傾向於認為把代碼寫的復雜看不懂的人非常牛逼,呵呵。



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM