一行 Python 代码能做什么

Python 是一种非常强大、高效、便捷的编程语言,可以完成从处理表格文字到执行人工智能程序等很多程序,本文介绍一些只需要一行 Python 代码就能运行的黑魔法,带你一窥Python 编程的魅力。

有趣

心形文字

print'\n'.join([''.join([('AndyLove'[(x-y)%8]if((x*0.05)**2+(y*0.1)**2-1)**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 里面执行以上代码,就会输出一个字符组成的心形图案。

andylove

分形图案

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,n-1))(0,0.02*x+0.05j*y,40))2 else' 'for x in range(-80,20)])for y in range(-20,20)])

上面的代码可以画出一个*组成的分形图案。

mandelbrot

高效

打印九九乘法表

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之间的素数

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

输出前100项斐波那契数列的值

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) ]]

计算阶乘

>>> reduce ( lambda x,y:x*y, range(1,input()+1))
10
3628800

摄氏度与华氏度之间的转换

>>> 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 Fahrenheit
2,Fahrenheit to Celsius
Please input 1 or 2
1
Please input a Celsius temperature:28
82.4

字符串排序

"".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

内涵

猜数字游戏

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 True
guess_my_number(42)

游戏运行起来大致是这样的:

game

画一个随机的迷宫

while 1:import random;print(random.choice('╱╲'), end='')"

maze

最后,以一行代码展示 Python 的哲学结束吧。

>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!