一行python代码值多少钱_一行python代码

Life is short, just use Python.

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

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

有趣

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

>>> 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 里执行它,会输出一个字符拼出的心形。

20160930213648405

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

20160930214911152

让我们用一行代码画一个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)])

20160930215515946

高效

对于随手小工具而言,更是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)])

输出:

20160930221655942

一行代码计算出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

内涵

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

20161002122249750

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

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)

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

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

import random as rnd

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

转换成Lambda 可以是:

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

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

延展

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

import antigravity

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

20161002130253753

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

$python -m pyftpdlib

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

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

在连网的前提下,获取公网IP地址

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

一行代码就可以轻易写个小游戏了,来模拟一下golf击球。

python -c "import math as m;a,v=eval(input());[print('%03d'%x+' '*m.floor(0.5+x*m.tan(a)-x*x/(v*m.cos(a)))+'o') for x in range(102)]"

输入角度和力量大小如(0.8,80),就能得到一条字符描画的抛物线了。

增加上while 等语句,画一个没完没了的python -c "while 1:import random;print(random.choice('╱╲'), end='')"。

20161002174945740

最后,一行代码以python 的哲学结束吧。

$ python -c "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!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库MySQL相关操作||创建数据库、显示所有数据库、切换数据库、显示数据库下的数据库表、删除数据库

数据库MySQL相关操作||创建数据库、显示所有数据库、切换数据库、显示数据库下的数据库表、删除数据库 1&#xff0c;创建数据库 create databases mydb&#xff1b; 记得加&#xff1b;&#xff08;分号&#xff09; 2&#xff0c;显示所有数据库 show databases; 3&…

在yuv域如何降低画面亮度_家庭影院投影机错误地调节了亮度和对比度会得到怎么样的画面?...

家有影院&#xff0c;可以跟据你的房间和使用习惯设计家庭影院方案&#xff0c;并且还能让你以最优惠的价格买到它们。总之&#xff0c;一切关于家庭影院的问题&#xff0c;我们都可以帮你搞定。解决问题的方式从一对一咨询开始&#xff0c;如有需要&#xff0c;添加家有影院设…

MySQL创建数据库表student

MySQL创建数据库表student 1&#xff0c;创建数据库 create database mydb&#xff1b; 2&#xff0c;查看所有数据库 show databases; 3&#xff0c;使用数据库 use mydb; 4&#xff0c;创建数据库表student create table student(sno int(6),name varchar(12),sex char(2)…

java遍历数组练习(for循环、foreach)

java遍历数组练习&#xff08;for循环、foreach&#xff09; /* * 遍历数组 for循环 foreach * */ public class Test01 {public static void main(String[] args) {int[] arr {11,3,45,6,78,89,23,4};//for循环遍历数组for (int index 0;index<arr.length;index){Sys…

mybatis generator 打印出来表了 但是没有生成未见_Python丨深度学习中使用生成器加速数据读取与训练...

1、什么是生成器我们可以把生成器理解为一个高端的列表。生成器就是一个集算法和列表还有依次读取于一体的功能。因为如果列表存储的内容过多就会造成内存的浪费。但是如果“列表”内的元素可以通过某种规则展示出来、且我们只需要前几项的元素&#xff0c;我们就可以通过使用生…

从键盘上录入10科考试分数,输出最高分最高分输入的序号

从键盘上录入10科考试分数&#xff0c;输出最高分最高分输入的序号 import java.util.Scanner;/* * 从键盘上录入10科考试分数&#xff0c;输出最高分最高分输入的序号 * */ public class Test02 {public static void main(String[] args) {Scanner sc new Scanner(System.in…

pycharm项目目录结构_「Actix-web项目」-项目整体目录结构

前言完成一个前后端分离项目&#xff0c;后端技术选型Rust的框架Actix-web&#xff0c;那么用这个框架完成后端代码它的项目目录很重要&#xff0c;今天就来着重介绍一下。目录结构下面是自己用Rust Actix-web框架写web后端的目录结构&#xff0c;如图所示&#xff1a;目录结构…

java查询数组中元素的索引

java查询数组中元素的索引 /*** java查询数组中元素的索引*/ public class Test03 {public static void main(String[] args) {int[] arr {5,7,4,9,5,7,2,8,1,5,0};//查询元素 2 的索引int value 2;//准备一个变量用于存储目标元素的索引int index -1;//查找元素在数组中第…

完善三个数字对象排序程序。MOOC,Java第四章 面向对象和类 第一次作业

题目内容&#xff1a; 完善以下程序&#xff0c;利用swap函数&#xff0c;完成数字按从小到大的顺序输出。例如输入5 4 3 输出3,4,5。 输入格式: 输入3个数字。 输出格式&#xff1a; 数字从小到大排列 输入样例&#xff1a; 5 4 3 输出样例&#xff1a; 3,4,5 代码…

触发器及其应用实验报告总结_双面喷绘材料的分类及其应用,超全总结!(建议收藏)...

▲ 东川 | 点击图片获取更多信息▲ 东川 | 点击图片获取更多信息双面喷绘材料&#xff0c;有适合水性机器喷的双面摭光画布&#xff0c;有适合弱溶剂和UV喷绘的PVC双喷、PET双喷、双喷网格布、双面牛筋布&#xff0c;它们有个共同的特点就是&#xff0c;即可以单面打画面&#…

java实现程序输出以下5*5数字方格

请实现程序输出以下5*5数字方格。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 需要在main函数的输入参数中设置5&#xff0c;输出5*5的数字方格。如果是输入7&#xff0c;则是7*7的数字方格。 代码如下&#xff1…

java请实现程序输出以下星塔||输出菱形

java请实现程序输出以下星塔||输出菱形 请实现程序输出以下星塔。 * *** ***** *** * 需要在main函数的输入参数中设置5&#xff0c;输出5层星塔。如果是输入7&#xff0c;则是7层星塔。假设输入参数都是奇数&#xff0c;且都大于等于5&#xff0c;小于等于11。 第一种写法&a…

为什么自己编写的页面总是在那里抖动_别克威朗为什么销量不佳?

汽车发展到现在有些车企经历了几十年&#xff0c;而有些车企则是经历了上百年&#xff0c;所以在历史长河的积淀当中&#xff0c;总会有大起大落&#xff0c;混得好的就成为了百年车企&#xff0c;混得不好的就早早退市。而对于车型而言&#xff0c;同样也是如此&#xff0c;有…

java数组的扩容,将两个数组合并成一个数组

java数组的扩容&#xff0c;将两个数组合并成一个数组 //将下列两个数组合成一个数组 public class Test04 {public static void main(String[] args) {int[] a {1,3,4,56,7,8,9,3};int[] b {12,34,56,43,78,74,36};int[] c new int[a.lengthb.length];//将数组a中的元素方…

java开发项目实例_学java开发,项目经验最重要

不想做将军的士兵不是好士兵&#xff01;相信没有人一开始学java&#xff0c;就是为了将来一直做一名初级java开发工程师。只需掌握一些简单代码技巧&#xff0c;别人告诉想要实现的效果&#xff0c;然后自己能用代码堆砌来实现。更何况&#xff0c;现在企业对java开发工程师的…

java在原数组中追加一个元素

java在原数组中追加一个元素 /* * 在原数组中追加一个元素 * */ public class Test05 {public static void main(String[] args) {//在下面这个数组中追加一个元素9int[] a {1,2,3,4,5,6,7,8};int b 9;int[] c new int[a.length1];//复制旧数组到新数组中去for (int i 0;i…

java组件是什么意思_年前面试京东3面凉经~ 面试过程与真题全分享+备战春招(java)...

1月4号得到通知&#xff0c;京东无望了&#xff0c;哭晕在厕所&#xff0c;现在给大家把这些面试题分享出来&#xff0c;希望给想要进京东的一些程序员点点帮助&#xff01;接下来开始分享我去面试的时候面试官问我的那些面试题京东java一面记录简单介绍下自己介绍主要用到的技…

java如何在指定索引位置插入新元素

在arr数组中索引为3的位置&#xff0c;插入一个元素 10 /* * 在arr数组中索引为3的位置&#xff0c;插入一个元素 10 * */ public class Test06 {public static void main(String[] args) {int[] arr {2,6,8,4,9,5,1,3};//要插入索引的位置int x 3;//创建新数组int[] newArr…

java从数组中删除元素(数组的缩容)

java从数组中删除元素&#xff08;数组的缩容&#xff09; 1&#xff0c;解决方案一 /* * 数组的缩容&#xff08;删除元素&#xff09; * 第一种解决方案 * 移动元素&#xff0c;被删除元素后面的元素往前移一位 * 优点&#xff1a;不需要创建新数组&#xff0c;省内存&…

利用代码分别实现jdk动态代理和cglib动态代理_面试之动态代理

大家好&#xff01;我是CSRobot&#xff0c;从今天开始&#xff0c;我将会发布一些技术文章&#xff0c;内容就是结合春招以来的面试所遇到的问题进行分享&#xff0c;首先会对知识点进行一个探讨和整理&#xff0c;在最后会给出一些面试题并作出解答&#xff0c;希望可以帮助到…