一行 Python 代码
admin
2023-07-31 00:47:16
0

Life is short, just use Python.

自从08年接触Python,就有爱不释手的感觉,逐渐地,有些不忍地疏远了Perl 和Shell编程,因为python 的优雅么? 不全是,主要是可以高效开发吧。

那一行代码可以干什么呢?

有趣

我孩子的英文名叫andy,也许当初教他写程序的时候,如果先秀一下这行代码,可能就更能激起他对代码的兴趣了。

1 >>> print\’\\n\’.join([\’\’.join([(\’AndyLove\’[(xy)%8]if((x*0.05)**2+(y*0.1)**21)**3(x*0.05)**2*(y*0.1)**3<=0 else\’ \’)for x in range(30,30)])for y in range(15,15,1)])

再python 里执行它,会输出一个字符拼出的心形。

LoveAndy

字符图形还是很有趣的,有一个著名的图像叫mandelbrot。Mandelbrot图像中的每个位置都对应于公式N=x+y*i 中的一个复数,高中学过复数的都还应该有印象。每个位置用参数N来表示,它是x*x+y*y的平方根。如果这个值大于或等于2,则这个数字对应的位置值是0。如果参数N的值小于2,就把N的值改为N*N-
N(N=(x*x-y*y-x)+(2*x*y-y)*i)),并再次测试这个新N值。wiki百科给出的图像是这样的:
Mandelbrot

让我们用一行代码画一个Mandelbrot:

1 >>> print\’\\n\’.join([\’\’.join([\’*\’if abs((lambda a:lambda z,c,n:a(a,z,c,n))(lambda s,z,c,n:z if n==0else s(s,z*z+c,c,n1))(0,0.02*x+0.05j*y,40))2 else\’ \’for x in range(80,20)])for y in range(20,20)])

这里写图片描述

高效

对于随手小工具而言,更是Python的拿手好戏。

一行代码打印九九乘法表:

1 print \’\\n\’.join([\’ \’.join([\’%s*%s=%-2s\’ % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)])

输出:
乘法表

一行代码计算出1-1000之间的素数

1 print(*(i for i in range(2, 1000) if all(tuple(i%j for j in range(2, int(i**.5))))))  

一行代码可以输出前100项斐波那契数列的值:

1 print [x[0] for x in [  (a[i][0], a.append((a[i][1], a[i][0]+a[i][1]))) for a in ([[1,1]], ) for i in xrange(100) ]]

一行代码实现阶乘,而且还带交互:

123 >>> reduce ( lambda x,y:x*y,  range(1,input()+1))103628800

一行代码实现摄氏度与华氏度之间的转换器:

12345678 >>> print((lambda i:i not in [1,2] and \”Invalid input!\” or i==1 and (lambda f:f<459.67 and \”Invalid input!\” or f)(float(input(\”Please input a Celsius temperature:\”))*1.8+32) or i==2 and (lambda c:c<273.15 and \”Invalid input!\” or c)((float(input(\”Please input a Fahrenheit temperature:\”))32)/1.8))(int(input(\”1,Celsius to Fahrenheit\\n2,Fahrenheit to Celsius\\nPlease input 1 or 2\\n\”))))1,Celsius to Fahrenheit2,Fahrenheit to CelsiusPlease input 1 or 21Please input a Celsius temperature:2882.4>>>

至于字符串排序和快速排序更是手到擒来。

123 \”\”.join((lambda x:(x.sort(),x)[1])(list(string))) qsort = lambda arr: len(arr) > 1 and  qsort(filter(lambda x: x<=arr[0], arr[1:] )) + arr[0:1] + qsort(filter(lambda x: x>arr[0], arr[1:] )) or arr

内涵

看一看下面一行python代码,可能就要晕了:

猜数游戏

这是原来为了激发孩子编程兴趣,让孩子练习的代码,它的真实面貌是大致这样的:

123456789101112131415 def guess_my_number(n):    while True:        user_input = raw_input(\”Enter a positive integer to guess: \”)        if len(user_input)==0 or not user_input.isdigit():            print \”Not a positive integer!\”        else:            user_input = int(user_input)            if user_input > n:                print \”Too big ! Try again!\”            elif user_input < n:                print \”Too small ! Try again!\”            else:                print \”You win!\”                return Trueguess_my_number(42)

实际上,只要理解了函数式编程,使用神奇的Lambda,配合列表推导以及复杂一点的判断语句,任何的python 代码都可以转换成一行代码的。

例如,取一个列表里的随机数

12 import random as rndprint rnd.choice([2,3, 5,7, 11,13,17])

转换成Lambda 可以是:

1 print (lambda rnd: rnd.choice([1, 2, 3, 10]))(__import__(\’random\’))

这些代码出了觉得好玩,主要是可以帮助我们了解某些Python的雕虫小记,尤其是神奇的Lambda 用法

延展

当然,还有其他好玩的地方,输入下面这一行

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...