当前位置: 首页 > 后端技术 > Python

一行行之有效的python代码

时间:2023-03-26 15:29:36 Python

完成同样的功能,尽量少写代码。今天,我想和大家分享一些有趣的套路。刚开始做这些katas的时候,我也是写了很长的代码来完成的。后来在深入接触python之后,发现了python的一些简单但非常强大的特性,帮助我更好的完成了这些习题,在此总结分享给大家。第一个例子FizzBu??zzWhizz问题描述了你是一名体育老师。当离一节课结束还有五分钟时,你决定做一个游戏。此时班上有100名学生。游戏规则是:你先说出三个不同的特殊数字,必须是个位数,比如3、5、7,让所有同学组成一队,按顺序数。学生报数时,如果报的数是第一个特殊数(3)的倍数,则不报数,说Fizz;如果报告的数字是第二个特殊数字(5)的倍数,则他们应该说Buzz;如果报告的数字是第三个特殊数字(7)的倍数,则说Whizz。学生报号时,如果报号同时是两个特号的倍数,则要特殊处理,比如第一个特号和第二个特号的倍数,则不能说出这个数,但是说FizzBu??zz,等等。如果同时是三个特殊数的倍数,那就说FizzBu??zzWhizz。学生报号时,如果报号中有第一个特殊号,则不说这个号,只说相应的词。比如这个例子,第一个特殊数字是3,所以想报13的同学应该说Fizz。如果数字中包含第一个特殊数字,则忽略规则3和4。例如,想要报告35的学生只报告Fizz,而不是BuzzWhizz。否则,只需说明要报告的数字即可。Solutionsefanswer(n):如果str(n)中有'3'则返回'Fizz'else'Fizz'*(n%3==0)+'Buzz'*(n%5==0)+'Whizz'*(n%7==0)orstr(n)这里python字符串和数字0相乘形成空字符串和or的特性。第二个例子SumofIntervals问题描述编写一个名为sum_intervals()的函数,它接受一个区间数组,并返回所有区间长度的总和。重叠的间隔应该只计算一次。示例输入输出[[1,2],[6,10],[11,15]]9[[1,4],[7,10],[3,5]]7[[1,5],[10,20],[1,6],[16,19],[5,11]]19Solutiondefsum_of_intervals(intervals):returnlen(set(nfor(x,y)inintervalsforninrange(x,y))))这里巧妙地利用了集合唯一性原则第三个例子Wheremyanagramsat?anagramAnagram什么是anagram?好吧,如果两个词都包含相同的字母,那么它们就是彼此的变位词。例如:'abba'&'baab'==true'abba'&'bbaa'==true'abba'&'abbba'==false'abba'&'abca'==false问题描述从给定的单词列表中指定单词,例如:anagrams('abba',['aabb','abcd','bbaa','dada'])=>['aabb','bbaa']anagrams('racer',['crazer','carer','racar','caers','racer'])=>['carer','racer']anagrams('laser',['lazing','lazy','lacer'])=>[]Solutiondefanagrams(word,words):returnfilter(lambdax:sorted(word)==sorted(x),words)或使用列表生成更多cleardefanagrams(word,words):return[itemforiteminwordsifsorted(item)==sorted(word)]后记学无止境,路漫漫其修远兮。.