一行代码

启动一个Web服务

python -m SimpleHTTPServer 8080  # python2
python3 -m http.server 8080  # python3

开启 FTP 服务器

python -m pyftpdlib

允许 anonymous 匿名登录,密码随意。

查看 Python 在线文档

Windows

python -m pydoc -p 8000

在本机 8000 端口建立一个 HTTP 服务器,可以查看本机的 Python 文档

Linux

pydoc -p 8000

画一个心形

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 <= 0 else ' ') for x in range(-30,30)]) for y in range(30, -30, -1)]))

原理是心形曲线方程

(x²+y²-1)³+x²y³ = 0                   心形线
x²z³+9y²z³/80=(x²+9y²/4+z²-1)³      心形三维曲面
x²+y² = (2x²+2y²-x)²                  心形线
参数方程
x=a(2cost-cos2t)
y=a(2sint-sin2t)
极坐标方程
水平方向 r=a(1-cosθ) 或 r=a(1+cosθ) (a>0) 或 r=sin(θ/2)
垂直方向 r=a(1-sinθ)  或 r=a(1+sinθ) (a>0)
直角坐标方程
x²+y²+ax=a√(x²+y²)
x²+y²-ax=a√(x²+y²)

画曼德布洛特集合( Mandelbrot set)

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

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==0 else 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)]))

解决FizzBuzz问题

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

print(' '.join(["fizz"[x % 3 * 4:]+"buzz"[x % 5 * 4:] or str(x) for x in range(1, 101)]))
for i in range(1,101): print (lambda x: x[2] and "fizzbuzz" or x[1] and "buzz" or x[0] and "fizz" or i)(map(lambda x: x(i), [lambda x: x%3==0, lambda x: x%5==0, lambda x: x%5==0 and x%3==0])),

打印九九乘法表

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-100之间的素数(两个版本)

print(' '.join([str(item) for item in filter(lambda x: not [x % i for i in range(2, x) if x % i == 0], range(2, 101))]))

print(' '.join([str(item) for item in filter(lambda x: all(map(lambda p: x % p!= 0, range(2, x))), range(2, 101))]))

输出斐波那契数列

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 range(30)]])

实现快排算法

qsort = lambda arr: len(arr) > 1 and qsort(list(filter(lambda x: x <= arr[0],arr[1:]))) + arr[0:1] + qsort(list(filter(lambda x: x > arr[0], arr[1:]))) or arr

解决八皇后问题

[__import__('sys').stdout.write('\n'.join('.' * i + 'Q' + '.' * (8-i-1) for iin vec) + "\n========\n") for vec in__import__('itertools').permutations(range(8)) if 8 == len(set(vec[i]+i for iin range(8))) == len(set(vec[i]-i for i in range(8)))]

实现数组的flatten功能:将多维数组转化为一维

flatten = lambda x: [y for l in x for y in flatten(l)] if isinstance(x, list) else [x]
from compiler.ast import flatten
flatten(array)
import itertools
a_list = [[1, 2], [3, 4], [5, 6]]
print(list(itertools.chain.from_iterable(a_list)))
# Output: [1, 2, 3, 4, 5, 6]
# or
print(list(itertools.chain(*a_list)))
# Output: [1, 2, 3, 4, 5, 6]

矩阵转置

zip(*[[1,2,3],[4,5,6],[7,8,9]])
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

反重力飞翔

import antigravity

一句话获得公网 IP

python -c "import socket; sock=socket.create_connection(('ns1.dnspod.net',6666)); print sock.recv(16); sock.close()"

前提是你要有公网 IP

实现list, 有点类似与上个功能的反功能

array = lambda x: [x[i:i+3] for i in range(0, len(x), 3)]

实现求解2的1000次方的各位数之和

print(sum(map(int, str(2**1000))))

列表求频数

print (lambda x:{z:x.count(z) for z in set(x)} )("csdchbdsbcskdcjbdf")
{'c': 4, 'b': 3, 'd': 4, 'f': 1, 'h': 1, 'k': 1, 'j': 1, 's': 3}

Quine,打印出自己的代码

_='_=%r;print _%%_';print _%_
print(lambda x:x+str((x,)))('print(lambda x:x+str((x,)))',)

Last updated

Was this helpful?