1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        一行有效 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)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            久久视精品 | 91精品一区 | 成年人美女网站在线观看 | 欧美嗯啊 | 开心色激情网 | 天天射天天噜 | 免费夜色污私人影院在线观看 | av琪琪色| 双乳被一左一右吃着的丫鬟文 | 亚洲自拍偷拍无码视频 |