不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的程序员编出的Phthon代码显示出了不同的风格,代码都很简单,有趣。这篇文章的原始出处在这里,我把它整理了一下,并修改了几处错误。
1、编程新手
def factorial(x):
if x == 0:
return 1
else:
return x * factorial(x - 1)
print factorial(6)
2、一年编程经验(学Pascal的)
def factorial(x):
result = 1
i = 2
while i <= x:
result = result * i
i = i + 1
return result
print factorial(6)
3、一年编程经验(学C的)
def fact(x): #{
result = i = 1;
while (i <= x): #{
result *= i;
i += 1;
#}
return result;
#}
print(fact(6))
4、一年编程经验(读过 SICP)
@tailcall
def fact(x, acc=1):
if (x > 1): return (fact((x - 1), (acc * x)))
else: return acc
print(fact(6))
5、一年编程经验(Python)
def Factorial(x):
res = 1
for i in xrange(2, x + 1):
res *= i
return res
print Factorial(6)
6、懒惰的Python程序员
def fact(x):
return x > 1 and x * fact(x - 1) or 1
print fact(6)
7、更懒的Python程序员
f = lambda x: x and x * f(x - 1) or 1
print f(6)
8、Python 专家
fact = lambda x: reduce(int.__mul__, xrange(2, x + 1), 1)
print fact(6)
9、Python 黑客
import sys
@tailcall
def fact(x, acc=1):
if x: return fact(x.__sub__(1), acc.__mul__(x))
return acc
sys.stdout.write(str(fact(6)) + '\n')
10、专家级程序员
from c_math import fact
print fact(6)
11、大英帝国程序员
from c_maths import fact
print fact(6)
12、Web 设计人员
NULL = None
def CalculateAndPrintFactorialEx(dwNumber,
hOutputDevice,
lpLparam,
lpWparam,
lpsscSecurity,
*dwReserved):
if lpsscSecurity != NULL:
return NULL #Not implemented
dwResult = dwCounter = 1
while dwCounter <= dwNumber:
dwResult *= dwCounter
dwCounter += 1
hOutputDevice.write(str(dwResult))
hOutputDevice.write('\n')
return 1
import sys
CalculateAndPrintFactorialEx(6, sys.stdout, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
13、企业级程序员
def new(cls, *args, **kwargs):
return cls(*args, **kwargs)
class Number(object):
pass
class IntegralNumber(int, Number):
def toInt(self):
return new (int, self)
class InternalBase(object):
def __init__(self, base):
self.base = base.toInt()
def getBase(self):
return new (IntegralNumber, self.base)
class MathematicsSystem(object):
def __init__(self, ibase):
Abstract
@classmethod
def getInstance(cls, ibase):
try:
cls.__instance
except AttributeError:
cls.__instance = new (cls, ibase)
return cls.__instance
class StandardMathematicsSystem(MathematicsSystem):
def __init__(self, ibase):
if ibase.getBase() != new (IntegralNumber, 2):
raise NotImplementedError
self.base = ibase.getBase()
def calculateFactorial(self, target):
result = new (IntegralNumber, 1)
i = new (IntegralNumber, 2)
while i <= target:
result = result * i
i = i + new (IntegralNumber, 1)
return result
print StandardMathematicsSystem.getInstance(new (InternalBase,
new (IntegralNumber, 2))).calculateFactorial(new (IntegralNumber, 6))
分享到:
相关推荐
自从 2008 年以来,Python 3 横空出世并慢慢进化。Python 3 的流行一直被认为需要很长一段时间。 事实上,到我写这本书的 2013 年,绝大部分的 Python 程序员仍然在生产环境中使用的是版本 2 系列, 最主要是因为 ...
自从2008 年以来,Python3 横空出世并慢慢进化。Python3 的流行一直被认为需 要很长一段时间。事实上,到我写这本书的2013 年,绝大部分的Python 程序员仍然 在生产环境中使用的是版本2 系列,最主要是因为Python3 ...
最近在玩Python,在粗略的看了一下Learning Python和Core Python之后,偶然发现网上有个帖子Python程序员的进化写的很有意思。于是打算仿照一篇,那篇帖子用了十余种方法完成一个阶乘函数,我在这里会用九种不同的...
MySQLdb包在python3.7版本下的安装包, 进入对应目录下后,pip install mysqlclient-2.0.2-cp37-cp37m-win_amd64.whl安装
人工智能大作业Python基于卷积神经网络的五子棋项目源码+报告,含棋盘识别、博弈算法、进化学习及监督学习 一、说明 人工智能基础课程大作业,共分为四个小问题。 棋盘识别:从对局棋盘图片识别棋局落子情况,识别...
windows下安装,需要在cuda里面添加对应文件
通过自适应NSGA-II和自适应MOEA / D解决多目标多阶段武器目标分配问题的比较研究
mmp,老子下半天才下下来,翻了墙还是慢,气死老子了 官网地址: https://pypi.org/project/open3d/0.16.0/#files 安装命令: pip install open3d-0.16.0-cp39-cp39-win_amd64.whl
PyshGP 用Python推送基因编程警告:在1.0版之前,此程序包的公共API可能会有重大更改。动机什么是PushGP? 推(Push)是一种与进化计算/基因编程配合使用的编程语言。 它是一种基于堆栈的语言,每种数据类型(包括...
python使用dir()函数获取对象中可用的属性和方法(看不到python源码又想知道怎么调用,DLL调用分析,SDK二次开发技巧)
用遗传算法解决旅行家问题,MATLAB与Python实现 旅行商问题 旅行商问题,即 TSP 问题(Traveling Salesman Problem)是数学领域中著名问题之一。 假设有一个旅行商人要拜访 n 个城市,他必须选择所要走的路径,路经...
python pyqt5
点击内部的python文件运行,可看到机械臂摇晃
python多线程下tcp服务端,数据实时动态打包发送,就是一边改变数据一边发送的意思哈,python3.6写的哈
cv2是带opencv的python环境,使用方法放到anconda下的envs文件夹下解压后在pycharm下配置环境即可
docker下使用django的项目,GitHub链接: https://github.com/twtrubiks/docker-tutorial
程序员的生存现状 自己眼中的计算机领域的发展前景 自我介绍 2、编程环境的配置 python环境的部署 好的编辑器是成功的一半 python各种库的安装和使用 程序:设计、编写、运行、调试 基本流程 举例:写作、解...
通过ros建立工作区打印helloworld,通过c++与python两种方式
docker-django-nginx-uwsgi-postgres-tutorial-master