您的位置:首页 > 编程语言 > Python开发

几个小例子告诉你, 一行Python代码能干哪些事

2017-11-01 00:00 771 查看
首先你要了解一下Python之禅,一行代码输出“TheZenofPython”:

我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。



python-c"importthis"

"""

TheZenofPython,byTimPeters

Beautifulisbetterthanugly.

Explicitisbetterthanimplicit.

Simpleisbetterthancomplex.

Complexisbetterthancomplicated.

Flatisbetterthannested.

Sparseisbetterthandense.

Readabilitycounts.

Specialcasesaren'tspecialenoughtobreaktherules.

Althoughpracticalitybeatspurity.

Errorsshouldneverpasssilently.

Unlessexplicitlysilenced.

Inthefaceofambiguity,refusethetemptationtoguess.

Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.

Althoughthatwaymaynotbeobviousatfirstunlessyou'reDutch.

Nowisbetterthannever.

Althoughneverisoftenbetterthan*right*now.

Iftheimplementationishardtoexplain,it'sabadidea.

Iftheimplementationiseasytoexplain,itmaybeagoodidea.

Namespacesareonehonkinggreatidea--let'sdomoreofthose!

"""

从“TheZenofPython”也能看出,Python倡导Beautiful、Explicit、Simple等原则,当然我们接下来要介绍的一行Python能实现哪些好玩的功能,可能和Explicit原则相违背。



如果你有其他这方面的小例子,也欢迎评论,我会加到文章中,文章也许会长期更新。

(1)一行代码启动一个Web服务



python-mSimpleHTTPServer8080#python2

python3-mhttp.server8080#python3



(2)一行代码实现变量值互换



a,b=1,2;a,b=b,a

(3)一行代码解决FizzBuzz问题:

FizzBuzz问题:打印数字1到100,3的倍数打印“Fizz”,5的倍数打印“Buzz”,既是3又是5的倍数的打印“FizzBuzz”



forxinrange(1,101):print("fizz"[x%3*4:]+"buzz"[x%5*4:]orx)

(4)一行代码输出特定字符”Love”拼成的心形



print('\n'.join([''.join([('Love'[(x-y)%len('Love')]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0else'')forxinrange(-30,30)])foryinrange(30,-30,-1)]))



(5)一行代码输出Mandelbrot图像

Mandelbrot图像:图像中的每个位置都对应于公式N=x+y*i中的一个复数



print('\n'.join([''.join(['*'ifabs((lambdaa:lambdaz,c,n:a(a,z,c,n))(lambdas,z,c,n:zifn==0elses(s,z*z+c,c,n-1))(0,0.02*x+0.05j*y,40))<2else''forxinrange(-80,20)])foryinrange(-20,20)]))



(6)一行代码打印九九乘法表



print('\n'.join([''.join(['%s*%s=%-2s'%(y,x,x*y)foryinrange(1,x+1)])forxinrange(1,10)]))



(7)一行代码计算出1-100之间的素数(两个版本)



print(''.join([str(item)foriteminfilter(lambdax:not[x%iforiinrange(2,x)ifx%i==0],range(2,101))]))

print(''.join([str(item)foriteminfilter(lambdax:all(map(lambdap:x%p!=0,range(2,x))),range(2,101))]))



(8)一行代码输出斐波那契数列



print([x[0]forxin[(a[i][0],a.append([a[i][1],a[i][0]+a[i][1]]))forain([[1,1]],)foriinrange(30)]])



(9)一行代码实现快排算法



qsort=lambdaarr:len(arr)>1andqsort(list(filter(lambdax:x<=arr[0],arr[1:])))+arr[0:1]+qsort(list(filter(lambdax:x>arr[0],arr[1:])))orarr

(10)一行代码解决八皇后问题



[__import__('sys').stdout.write('\n'.join('.'*i+'Q'+'.'*(8-i-1)foriinvec)+"\n========\n")forvecin__import__('itertools').permutations(range(8))if8==len(set(vec[i]+iforiinrange(8)))==len(set(vec[i]-iforiinrange(8)))]



(11)一行代码实现数组的flatten功能:将多维数组转化为一维



flatten=lambdax:[yforlinxforyinflatten(l)]ifisinstance(x,list)else[x]

(12)一行代码实现list,有点类似与上个功能的反功能



array=lambdax:[x[i:i+3]foriinrange(0,len(x),3)]

(13)一行代码实现求解2的1000次方的各位数之和



print(sum(map(int,str(2**1000))))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: