一行有效 Python 代碼
來(lái)自:SegmentFault 思否社區(qū)
作者:MichaelGe
伊始
第一個(gè)例子 FizzBuzzWhizz
問(wèn)題描述
你是一名體育老師,在某次課距離下課還有五分鐘時(shí),你決定做一個(gè)游戲。此時(shí)有100名學(xué)生在上課。游戲的規(guī)則是:
你首先說(shuō)出三個(gè)不同的特殊數(shù),要求必須是個(gè)位數(shù),比如3、5、7。 讓所有學(xué)生拍成一隊(duì),然后按順序報(bào)數(shù)。 學(xué)生報(bào)數(shù)時(shí),如果所報(bào)數(shù)字是第一個(gè)特殊數(shù)(3)的倍數(shù),那么不能說(shuō)該數(shù)字,而要說(shuō)Fizz;如果所報(bào)數(shù)字是第二個(gè)特殊數(shù)(5)的倍數(shù),那么要說(shuō)Buzz;如果所報(bào)數(shù)字是第三個(gè)特殊數(shù)(7)的倍數(shù),那么要說(shuō)Whizz。 學(xué)生報(bào)數(shù)時(shí),如果所報(bào)數(shù)字同時(shí)是兩個(gè)特殊數(shù)的倍數(shù)情況下,也要特殊處理,比如第一個(gè)特殊數(shù)和第二個(gè)特殊數(shù)的倍數(shù),那么不能說(shuō)該數(shù)字,而是要說(shuō)FizzBuzz, 以此類推。如果同時(shí)是三個(gè)特殊數(shù)的倍數(shù),那么要說(shuō)FizzBuzzWhizz。 學(xué)生報(bào)數(shù)時(shí),如果所報(bào)數(shù)字包含了第一個(gè)特殊數(shù),那么也不能說(shuō)該數(shù)字,而是要說(shuō)相應(yīng)的單詞,比如本例中第一個(gè)特殊數(shù)是3,那么要報(bào)13的同學(xué)應(yīng)該說(shuō)Fizz。如果數(shù)字中包含了第一個(gè)特殊數(shù),那么忽略規(guī)則3和規(guī)則4,比如要報(bào)35的同學(xué)只報(bào)Fizz,不報(bào)BuzzWhizz。 否則,直接說(shuō)出要報(bào)的數(shù)字。
Solution
def answer(n):return 'Fizz' if '3' in str(n) else 'Fizz'*(n%3==0) + 'Buzz'*(n%5==0) + 'Whizz'*(n%7==0) or str(n)
這里利用python字符串和數(shù)字0相乘為空字符串和or的特性
第二個(gè)例子 Sum of Intervals
問(wèn)題描述
Examples

Solution
def sum_of_intervals(intervals):return len(set(n for (x, y) in intervals for n in range(x, y)))
第三個(gè)例子 Where my anagrams at?
anagram 變位詞
'abba' & 'baab' == true'abba' & 'bbaa' == true'abba' & 'abbba' == false'abba' & 'abca' == false
問(wèn)題描述
anagrams('abba', ['aabb', 'abcd', 'bbaa', 'dada']) => ['aabb', 'bbaa']anagrams('racer', ['crazer', 'carer', 'racar', 'caers', 'racer']) => ['carer', 'racer']anagrams('laser', ['lazing', 'lazy', 'lacer']) => []
Solution
def anagrams(word, words):return filter(lambda x: sorted(word) == sorted(x), words)
或者使用列表生成式更加清晰
def anagrams(word, words):return [item for item in words if sorted(item)==sorted(word)]
后記
學(xué)無(wú)止境,前路漫漫。。。

評(píng)論
圖片
表情
