<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一行有效 Python 代碼

          共 2079字,需瀏覽 5分鐘

           ·

          2020-08-04 11:11

          來(lái)自:SegmentFault 思否社區(qū)
          作者:MichaelGe



          完成同樣的功能,盡量少寫(xiě)代碼

          伊始


          今天跟大家分享幾個(gè)有趣的kata,剛開(kāi)始做這幾個(gè)kata的時(shí)候,我也寫(xiě)了很長(zhǎng)的代碼才完成,隨著后來(lái)對(duì)python的深入接觸,發(fā)現(xiàn)python一些簡(jiǎn)單卻十分強(qiáng)大的特性,幫助我更好的完成這些練習(xí),在這里總結(jié)分享給大家。




          第一個(gè)例子 FizzBuzzWhizz


          • 問(wèn)題描述
          你是一名體育老師,在某次課距離下課還有五分鐘時(shí),你決定做一個(gè)游戲。此時(shí)有100名學(xué)生在上課。游戲的規(guī)則是:

          1. 你首先說(shuō)出三個(gè)不同的特殊數(shù),要求必須是個(gè)位數(shù),比如3、5、7。
          2. 讓所有學(xué)生拍成一隊(duì),然后按順序報(bào)數(shù)。
          3. 學(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。
          4. 學(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。
          5. 學(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。
          6. 否則,直接說(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)題描述
          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



          • Solution



          def sum_of_intervals(intervals):    return len(set(n for (x, y) in intervals for n in range(x, y)))

          這里巧妙的利用集合set唯一性的原理





          第三個(gè)例子 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:
          ? ? ? ? ? ? ? ?
          '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ú)止境,前路漫漫。。。





          點(diǎn)擊左下角閱讀原文,到?SegmentFault 思否社區(qū)?和文章作者展開(kāi)更多互動(dòng)和交流。

          瀏覽 43
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  高清无码毛片在线看 | 微信约操情人高潮在线 | 黄片在线免费 | 大逼色网站 | 国产又黄又湿 |