百科问答小站 logo
百科问答小站 font logo



一行 Python 能实现什么丧心病狂的功能? 第1页

  

user avatar   mu-ke-wang-14 网友的相关建议: 
      

如何用一段简单的代码讲述一个悲伤的故事?你看过/写过哪些有意思的代码?后,慕课网又收到关于Python的战帖。这怎么能怂?快快接招吧!



发功之前友情提示:部分案例适用于Python3,在Windows下面可以用Python命令代替,具体请根据自己的修行选择。

一、江湖纯情版

1、 爱心

先来个高赞爱心的中英文结合版:

       print'
'.join([''.join([(u'ILoveChina爱'[(x-y)%11]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)])     


如果换成纯汉字的版本,则可能会出现较明显的变形,所以为保证妹子不理解成“变心”,建议使用中英文结合的方式。你get到了吗?


图自网络,侵删


2、 美丽的螺旋

或许你觉得心型图案太俗套,那么试试下面这个美丽的螺旋?在python编译器中输入下面的代码,接下来让我们来见证奇迹吧!

       exec """
from turtle import *
for i in range(500): 
    forward(i)
    left(91)
"""     


二、娱乐纵情版

1、猜数字

无聊的时候,猜猜数字也是很有乐趣的嘛。1~99范围内的整数,如果猜对了会给你一个“Y”,如果猜高了会给出一个“H”;猜低了,你会得到一个“L”(Y、H、L可以根据你希望它给出的提示进行更换),你有六次机会猜出正确的结果哦!

       python3 -c "import random;n=random.randint(1,99);[(lambda a:print('Y' if a==n else 'H' if a>n else 'L'))(int(input())) for i in range(6)]”     



2、老虎机

猜数字不过瘾?不如再来试试迷你老虎机,用随机的unicode字符打样出来,完美模拟了老虎机的效果!

       python3 -c "import random;p=lambda:random.choice('7♪♫♣♠♦♥◄☼☽');[print('|'.join([p(),p(),p()]),end='
') for i in range(8**5)]”     


3、 一行代码帮你选彩票号码

当然,还有更刺激的彩票摇号,不过与其将命运交给彩票站的投注机器,不如自己写一行代码,喏,彩票选号代码了解一下:

       python -c "from random import sample; print 'Lotto numbers: %s' % sample(range(1, 50), 6)"     


友情提示:彩票有风险,出手须谨慎,至于这行代码给出的结果是否能够中奖,那就只能看你的运气啦!



三、学府深造版

1、一行代码实现GUI用户界面

       python -c "from Tkinter import *;root = Tk();w = Label(root, text='你好!慕课网!');w.pack();root.mainloop()”     

一行代码实现GUI用户界面有木有!

2、一行代码启动一个http服务器

一行代码可以启动一个HTTP服务器,这一点真的非常好用,所以尽管有其他答主提到过,还是忍不住要再分享一下!

       python3 -m http.server 8888     

在本地,输入网址 localhost:8888即可访问,默认会列出你的本地目录:

3、Python的哲学

每次读到Python之禅的时候,总是情不自禁地陷入优美的意境不能自拔,恨不能随时随地都能拿来拜读?下面这行代码能够满足你的愿望:

       python -c "import this"     

回车!然后,你便会发现你的屏幕上已然出现了心心念念的Python的ZEN(禅意)。神不神奇?惊不惊喜?


4、 简易计算器

       print(eval(input()))     

这个单行代码只用了默认引入的函数,其意义也是单纯而透明:读入一个python表达式并求值,将其结果输出到屏幕,当个简单计算器绰绰有余。

5、 今天距离明年元旦还有多少天?

不会跟妹子搭讪?教你一招搭讪大法:故作神秘地问她知不知道还有多少天就是明年的元旦了,趁妹子一脸懵掉你打开编译器,潇洒地敲出以下这行代码,然后看着结果告诉她:你看,距离明年元旦还有XX天!

       python -c """import datetime;today = datetime.date.today();someday = datetime.date(2019, 1, 1);diff = someday - today;print str(diff.days)+' days' “""     
聪明的你,一定看出了这段代码运行的日期了吧?


妹子接下来可能会有一波感叹:哎呀,还有XX天了? 日子过得真快啊!

然后你转手将代码一改,把元旦的时间改为你和妹子认识的时间,然后跟妹子说:你看,我们都认识这么久了,还没一起吃过饭呢,不如今晚下班请你吃个饭?

接下来,一定要记得按时下班啊!



其实就单行而言,Python并不会比其它的多范式语言更强,实际上由于lambda表现能力弱,导致Python本身要更弱一些。

但是存在lambda就存在无限可能。Python中的import语句是可以通过调用__builtin__模块中的__import__来代替的,更有意思的是,__builtin__模块内的所有内容均是自动import的。

四、附加武功秘籍

1、换脸术

这个10进制转换16进制的单行代码就是lambda无限可能的有力论证:

       print("#"+''.join(["{:0>2}".format(hex(int(a))[2:])for a in __import__('sys').argv[1:]]))     


2、星罗阵

这样的画图,只是简单的用到了调用时传递参数而已。

       [print('
'.join(" "*abs(c)+"* "*(a-abs(c))for c in range(-a+1,a))) for a in[int(__import__('sys').argv[1])]]     


3、操控术

如果调用更复杂的功能呢?例如用Flask来个Hello world?

       [y[0].run() for y in [(x, x.route('/')(lambda :'Hello, world!')) for x in [__import__('flask').Flask(__name__)]]]     

使用列表生成的实现看起来可能不太优雅,但并不会影响效果。


4、凌波微步

或者你还想看看带窗口的心形曲线?不要看那个黑黑的ASCII颜艺的话可以这样(需要numpy和matplotlib)

       [plt.show() for _, __, ___, plt in [(plt.plot(x, y1, color='r'), plt.plot(x, y2, color='r'), np, plt) for x, y1, y2, np, plt in [(x, 0.618*np.abs(x) - 0.8* np.sqrt(64-x**2), 0.618*np.abs(x) + 0.8* np.sqrt(64-x**2), np, plt) for x, np, plt in [(np.linspace(-8, 8, 1024), np, plt) for np, plt in [(__import__('numpy'), __import__('pylab'))]]]]]     


5、吸星大法

如果你是深度学习炼丹师,那不妨来个一行预测?

       [print(decode(model.predict(x))) for model, x, decode in [(ResNet50(weights='imagenet'), preprocess_input(np.expand_dims(image.img_to_array(image.load_img('elephant.jpg', target_size=(224, 224))), axis=0)), decode) for ResNet50, image, preprocess_input, np, decode in [(kav.applications.resnet50.ResNet50, kp.preprocessing.image, kav.applications.resnet50.preprocess_input, np, kav.applications.resnet50.decode_predictions) for kav, kp, np in [(__import__('keras.applications.resnet50'), __import__('keras.preprocessing.image'), __import__('numpy'))]]]]     


按照这样的方法,几乎所有的代码最终都能压到同一行里;配合Python各种强大的包,写出个一行人脸识别、一行机器学习、一行网页爬虫等都不会有什么问题。


综上,“一行代码”可供修炼的“功夫”多种多样,虽然有趣,但并没有太多的实际意义,在实际工作中没有必要强行把所有的代码都压缩到一行中实现。当然,如果是为了向妹子炫技的话,那么请尽管展示你的才华!



推荐阅读:

Python 有那么神吗?

你看过/写过哪些有意思的代码?


user avatar   pydatalysis 网友的相关建议: 
      

Python语法简洁,能够用一行代码实现很多有趣的功能,这次来整理30个常见的Python一行代码集合。

1、复制文件内容

       # 将文件a里内容复制到文件b中 import shutil; shutil.copyfile('source.txt', 'dest.txt')   'dest.txt'     

2、转置矩阵

       old_list = [[1, 2, 3], [3, 4, 6], [5, 6, 7]] list(list(x) for x in zip(*old_list))  [[1, 3, 5], [2, 4, 6], [3, 6, 7]]     

3、二进制转十进制

       decimal = int('1010', 2) print(decimal) #10  10     

4、字符串大写转小写

       # 方法一 lower() "Hi my name is Allwin".lower() # 'hi my name is allwin' # 方法二 casefold() "Hi my name is Allwin".casefold() # 'hi my name is allwin'  'hi my name is allwin'     

5、字符串小写转大写

       "hi my name is Allwin".upper() # 'HI MY NAME IS ALLWIN'  'HI MY NAME IS ALLWIN'     

6、将字符串转换为字节

       "convert string to bytes using encode method".encode() # b'convert string to bytes using encode method'  b'convert string to bytes using encode method'     

7、快速排序

       qsort = lambda l : l if len(l)<=1 else qsort([x for x in l[1:] if x < l[0]]) + [l[0]] + qsort([x for x in l[1:] if x >= l[0]]) qsort([1,3,2])  [1, 2, 3]     

8、n个连续数之和

       n = 3 sum(range(0, n+1))  6     

9、交换两个变量

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

10、斐波那契数列

       fib = lambda x: x if x<=1 else fib(x-1) + fib(x-2) fib(10)  55     

11、将嵌套列表合并为一个列表

       main_list = [[1,2],[3,4],[5,6,7]] [item for sublist in main_list for item in sublist]  [1, 2, 3, 4, 5, 6, 7]     

12、运行 HTTP 服务器

       python3 -m http.server 8000      

13、反转列表

       numbers = 'I Love China' numbers[::-1]  'anihC evoL I'     

14、返回阶乘

       import math; fact_5 = math.factorial(5) fact_5  120     

15、判断列表推导式

       even_list = [number for number in [1, 2, 3, 4] if number % 2 == 0] even_list  [2, 4]     

16、取最长字符串

       words = ['This', 'is', 'a', 'list', 'of', 'words'] max(words, key=len)   'words'     

17、列表推导式

       li = [num for num in range(0,100)] # this will create a list of numbers from 0 to 99      

18、集合推导式

       num_set = { num for num in range(0,100)} # this will create a set of numbers from 0 to 99      

19、字典推导式

       dict_numbers = {x:x*x for x in range(1,5) } # {1: 1, 2: 4, 3: 9, 4: 16}      

20、if-else

       print("even") if 4%2==0 else print("odd")  even     

21、无限循环

       while 1:0      

22、检查数据类型

       isinstance(2, int) isinstance("allwin", str) isinstance([3,4,1997], list)      

23、while循环

       a=5 while a > 0: a = a - 1; print(a)      

24、使用print语句写入到文件里

       print("Hello, World!", file=open('source.txt', 'w'))      

25、统计字频

       print("umbrella".count('l'))  2     

26、合并两个列表

       list1.extend(list2) # contents of list 2 will be added to the list1      

27、合并两个字典

       dict1.update(dict2) # contents of dictionary 2 will be added to the dictionary 1      

28、合并两个集合

       set1.update(set2) # contents of set2 will be copied to the set1      

29、时间戳

       import time; print(time.time())  1632146103.8406303     

30、统计最多的元素

       test_list = [9, 4, 5, 4, 4, 5, 9, 5, 4] most_frequent_element = max(set(test_list), key=test_list.count) most_frequent_element  4     


最后,Python代码哲学崇尚简洁,伙伴们也可以尝试把代码简化,看能不能实现想要的功能。

本文参考medium文章:allwin-raju



  

相关话题

  似乎很多新手程序员不待见goto语句,认为它是"不好的"。所以我想听听大家对goto语句的看法。? 
  40的程序员,技术达不到分布式能力,编码与思维也明显不如年轻人,这个时候在创业型企业怎么凸显实力? 
  选用什么云服务器做编程学习比较好? 
  15 岁学编程晚吗? 
  作为一个程序员,你的桌子上都有些什么? 
  谁能用通俗的语言解释一下什么是 RPC 框架? 
  MFC真的过时了吗? 
  电气专业和计算机结合有什么方向或者需要学习什么? 
  用 C++ 实现大整数的加减,思路是什么? 
  如何看待一五年级小学生称其自创编程语言,实际完成度如何? 

前一个讨论
《让子弹飞》结尾处张麻子对黄四郎说「你和钱对我都不重要,没有你,对我很重要」是什么意思?如何理解?
下一个讨论
难道结婚就是为了生孩子难道娶老婆就是为了传宗接代?





© 2024-11-24 - tinynew.org. All Rights Reserved.
© 2024-11-24 - tinynew.org. 保留所有权利