ITPub博客

首页 > > > 一行python代码能实现什么好玩的东西呀?带你来看看这些神奇的

一行python代码能实现什么好玩的东西呀?带你来看看这些神奇的

作者:youou 时间:2019-09-20 16:27:24 0 删除 编辑

小小编程媛 


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

一、python容易上手吗?简单吗?没有编程基础的适合学习吗?

现在有很多小伙伴都在问这些问题,在这,我想说的是:“python ”很好学,非常简单。但是:“学如逆水行舟,不进则退”,学习还是要坚持的。

1,简单, Python 非常易于读写,相比于其他的编程语言,开发者可以把更多的注意力放在问题本身上,不用花费太多精力在程序语言或者语法上。

2,易学, Python 可以用少量的代码构建出更多的功能,非常容易上手。比如java可以100行实现的代码,而python,20行就够了,是不是很厉害。

3,免费,Python 是免费开源的。它可以共享、复制和交换。这也帮助 Python 形成了强壮的社区,有很多可以直接使用的模块和包,是不是很方便。

4,兼容性,Python 兼容众多平台,所以开发者不会遇到使用其他语言时常会遇到的困扰。

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

5,有趣,一行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)])

1

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

字符图形还是很有趣的,有一个著名的图像叫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:

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

1

高效

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

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

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

输出:

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

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

1

一行代码可以输出前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) ]]

1

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

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

10

3628800

1

2

3

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

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

>>>

1

2

3

4

5

6

7

8

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

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

1

2

3

内涵

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

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

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)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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

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

import random as rnd

print rnd.choice([2,3, 5,7, 11,13,17])

1

2

转换成Lambda 可以是:

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

1

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

延展

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

import antigravity

1

它打开了浏览器,展示网站上的漫画和相关内容:

我们可以把python的文件打包,做成库的形式,然后import进来,是一种偷换概念和前提的一行代码。例如,为了与windows 传输文件,再Mac上临时搭个ftp:

$ python -m pyftpdlib

1

这当然要依赖pyftpdlib 这个库了,机器上没有,pip install pyftpdlib 就可以了。

如果一行代码中允许分号存在,那就只是牺牲可读性而已了,那就基本上无所不能。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/4729/viewspace-3151193/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-07-17

  • 博文量
    294
  • 访问量
    13389