逛網站時無意間看到一道測試題,看到這标題我吓到了(最難面試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
Whizz
8
11
FizzBuzz
16
17
19
…
一直到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、如上面都不是,說:目前數字
如果輸入的數值不是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
input: 1,2,100
輸入正确的數值執行效果
input: 3,5,7
Whize
FizzWhizz
22
26
29
41
44
46
47
52
58
59
61
62
64
67
68
BuzzWhizz
71
74
76
79
82
86
88
89
92
94
97
寫完之後,發現代碼非常淩亂,一開始用了好多的循環完成了功能,後來思考之後把那些循環去掉,換成elif來寫的。代碼簡潔了一半。正如這道題要求所說:
即使簡單的代碼,做到盡善盡美一樣難能可貴,是以,送出之前,請想一想,它是不是可以更卓越。