一行有效python代碼

完成一樣的功能,儘可能少寫代碼

伊始

今天跟你們分享幾個有趣的kata,剛開始作這幾個kata的時候,我也寫了很長的代碼才完成,隨着後來對python的深刻接觸,發現python一些簡單卻十分強大的特性,幫助我更好的完成這些練習,在這裏總結分享給你們。python

第一個例子 FizzBuzzWhizz

  • 問題描述

你是一名體育老師,在某次課距離下課還有五分鐘時,你決定作一個遊戲。此時有100名學生在上課。遊戲的規則是:app

  1. 你首先說出三個不一樣的特殊數,要求必須是個位數,好比三、五、7。
  2. 讓全部學生拍成一隊,而後按順序報數。
  3. 學生報數時,若是所報數字是第一個特殊數(3)的倍數,那麼不能說該數字,而要說Fizz;若是所報數字是第二個特殊數(5)的倍數,那麼要說Buzz;若是所報數字是第三個特殊數(7)的倍數,那麼要說Whizz。
  4. 學生報數時,若是所報數字同時是兩個特殊數的倍數狀況下,也要特殊處理,好比第一個特殊數和第二個特殊數的倍數,那麼不能說該數字,而是要說FizzBuzz, 以此類推。若是同時是三個特殊數的倍數,那麼要說FizzBuzzWhizz。
  5. 學生報數時,若是所報數字包含了第一個特殊數,那麼也不能說該數字,而是要說相應的單詞,好比本例中第一個特殊數是3,那麼要報13的同窗應該說Fizz。若是數字中包含了第一個特殊數,那麼忽略規則3和規則4,好比要報35的同窗只報Fizz,不報BuzzWhizz。
  6. 不然,直接說出要報的數字。
  • 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字符串和數字0相乘爲空字符串和or的特性code

第二個例子 Sum of Intervals

  • 問題描述

Write a function called sum_intervals() that accepts an array of intervals, and returns the sum of all the interval lengths. Overlapping intervals should only be counted once.遊戲

  • Examples
Input Output
[ [1, 2], [6, 10], [11, 15] ] 9
[ [1, 4], [7, 10], [3, 5] ] 7
[ [1, 5], [10, 20], [1, 6], [16, 19], [5, 11] ] 19
  • Solution
def sum_of_intervals(intervals):
    return len(set(n for (x, y) in intervals for n in range(x, y)))

這裏巧妙的利用集合set惟一性的原理字符串

第三個例子 Where my anagrams at?

  • anagram 變位詞

What is an anagram? Well, two words are anagrams of each other if they both contain the same letters. For example:it

'abba' & 'baab' == true
'abba' & 'bbaa' == true

'abba' & 'abbba' == false
'abba' & 'abca' == false
  • 問題描述

從給定單詞列表中找出指定單詞的變位詞,例如:io

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)

或者使用列表生成式更加清晰table

def anagrams(word, words):
    return [item for item in words if sorted(item)==sorted(word)]

後記

學無止境,前路漫漫。。。function

相關文章
相關標籤/搜索