鱼C论坛

 找回密码
 立即注册
查看: 3553|回复: 21

[技术交流] [转]趣文:Python程序员进化史。

[复制链接]
发表于 2014-12-21 12:12:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wei_Y 于 2014-12-21 12:13 编辑

导读:下面代码来自 fmeyer ,列举了各种程序员所写的阶乘算法代码,甚至包括网页设计师的。

                               
登录/注册后可看大图
  1. #新手程序员
  2. def factorial(x):
  3.     if x == 0:
  4.         return 1
  5.     else:
  6.         return x * factorial(x - 1)
  7. print factorial(6)

  8. #有一年 Pascal 经验的程序员
  9. def factorial(x):
  10.     result = 1
  11.     i = 2
  12.     while i <= x:
  13.         result = result * i
  14.         i = i + 1
  15.     return result
  16. print factorial(6)

  17. #有一年 C 经验的程序员
  18. def fact(x): #{
  19.     result = i = 1;
  20.     while (i <= x): #{
  21.         result *= i;
  22.         i += 1;
  23.     #}
  24.     return result;
  25. #}
  26. print(fact(6))

  27. #有一年 SICP 经验的程序员
  28. @tailcall
  29. def fact(x, acc=1):
  30.     if (x > 1): return (fact((x - 1), (acc * x)))
  31.     else: return acc
  32. print(fact(6))

  33. #有一年 Python 经验的程序员
  34. def Factorial(x):
  35.     res = 1
  36.     for i in xrange(2, x + 1):
  37.         res *= i
  38.     return res
  39. print Factorial(6)

  40. #懒惰的Python程序员
  41. def fact(x):
  42.     return x > 1 and x * fact(x - 1) or 1
  43. print fact(6)

  44. #更懒惰的Python程序员
  45. f = lambda x: x and x * f(x - 1) or 1
  46. print f(6)

  47. #专家级Python程序员
  48. import operator as op
  49. import functional as f
  50. fact = lambda x: f.foldl(op.mul, 1, xrange(2, x + 1))
  51. print fact(6)

  52. #Python Hacker
  53. import sys
  54. @tailcall
  55. def fact(x, acc=1):
  56.     if x: return fact(x.__sub__(1), acc.__mul__(x))
  57.     return acc
  58. sys.stdout.write(str(fact(6)) + '\n')

  59. #专家级程序员
  60. import c_math
  61. fact = c_math.fact
  62. print fact(6)

  63. #英国专家级程序员 (译注:在英式英语中,“数学”的简写,多用“maths”,不是“math"。)
  64. import c_maths
  65. fact = c_maths.fact
  66. print fact(6)

  67. #网页设计师
  68. def factorial(x):
  69.     #-------------------------------------------------
  70.     #--- 这段代码是从 Math Vault 那弄过来滴---
  71.     #--- 计算阶乘 (C)亚瑟·史密斯 1999年---
  72.     #-------------------------------------------------
  73.     result = str(1)
  74.     i = 1 #谢谢亚当
  75.     while i <= x:
  76.         #result = result * i #It's faster to use *=
  77.         #result = str(result * result + i)
  78.            #result = int(result *= i) #??????
  79.         result str(int(result) * i)
  80.         #result = int(str(result) * i)
  81.         i = i + 1
  82.     return result
  83. print factorial(6)

  84. #Unix 程序员
  85. import os
  86. def fact(x):
  87.     os.system('factorial ' + str(x))
  88. fact(6)

  89. #Windows 程序员
  90. NULL = None
  91. def CalculateAndPrintFactorialEx(dwNumber,
  92.                                  hOutputDevice,
  93.                                  lpLparam,
  94.                                  lpWparam,
  95.                                  lpsscSecurity,
  96.                                  *dwReserved):
  97.     if lpsscSecurity != NULL:
  98.         return NULL #Not implemented
  99.     dwResult = dwCounter = 1
  100.     while dwCounter <= dwNumber:
  101.         dwResult *= dwCounter
  102.         dwCounter += 1
  103.     hOutputDevice.write(str(dwResult))
  104.     hOutputDevice.write('\n')
  105.     return 1
  106. import sys
  107. CalculateAndPrintFactorialEx(6, sys.stdout, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)

  108. #企业程序员
  109. def new(cls, *args, **kwargs):
  110.     return cls(*args, **kwargs)

  111. class Number(object):
  112.     pass

  113. class IntegralNumber(int, Number):
  114.     def toInt(self):
  115.         return new (int, self)

  116. class InternalBase(object):
  117.     def __init__(self, base):
  118.         self.base = base.toInt()

  119.     def getBase(self):
  120.         return new (IntegralNumber, self.base)

  121. class MathematicsSystem(object):
  122.     def __init__(self, ibase):
  123.         Abstract

  124.     @classmethod
  125.     def getInstance(cls, ibase):
  126.         try:
  127.             cls.__instance
  128.         except AttributeError:
  129.             cls.__instance = new (cls, ibase)
  130.         return cls.__instance

  131. class StandardMathematicsSystem(MathematicsSystem):
  132.     def __init__(self, ibase):
  133.         if ibase.getBase() != new (IntegralNumber, 2):
  134.             raise NotImplementedError
  135.         self.base = ibase.getBase()

  136.     def calculateFactorial(self, target):
  137.         result = new (IntegralNumber, 1)
  138.         i = new (IntegralNumber, 2)
  139.         while i <= target:
  140.             result = result * i
  141.             i = i + new (IntegralNumber, 1)
  142.         return result

  143. print StandardMathematicsSystem.getInstance(new (InternalBase, new (IntegralNumber, 2))).calculateFactorial(new (IntegralNumber, 6))
复制代码



下面代码是kohashi给出的,他说是在邮局看到的。
  1. #VBA 程序员
  2. def factorial(x):
  3.     if x == 0:
  4.         return 1
  5.     if x == 1:
  6.         return x
  7.     if x == 2:
  8.         return x * (x-1)
  9.     if x == 3:
  10.         return x * (x-1) * (x-2)
  11.     if x == 4:
  12.         return x * (x-1) * (x-2) * (x-3)
  13.     if x == 5:
  14.         return x * (x-1) * (x-2) * (x-3) * (x-4)
  15.     if x == 6:
  16.         return x * (x-1) * (x-2) * (x-3) * (x-4) * (x-5)
  17. print factorial(6)
复制代码



原文:fmeyer    编译:伯乐在线 – 黄利民
原文链接:
http://python.jobbole.com/15005/
我写的for的那个。

评分

参与人数 1荣誉 +3 鱼币 +3 贡献 +2 收起 理由
~风介~ + 3 + 3 + 2 好东西!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-12-22 00:06:48 | 显示全部楼层
:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-12-22 00:20:19 | 显示全部楼层
没有全看懂,但这一个挺好,有lambda函数,有递归,有逻辑短路。
  1. f = lambda x: x and x * f(x - 1) or 1
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-22 09:47:16 | 显示全部楼层
微逻辑 发表于 2014-12-22 00:20
没有全看懂,但这一个挺好,有lambda函数,有递归,有逻辑短路。

递归值太多了会慢吧,用ruduce配合lambda好点。
reduce(lambda x,y: x*y,range(6))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-22 22:32:02 | 显示全部楼层
wei_Y 发表于 2014-12-22 09:47
递归值太多了会慢吧,用ruduce配合lambda好点。
reduce(lambda x,y: x*y,range(6))

1、python3中reduce已经不是BIF了,要引入function模块。
2、你的代码运行结果是0。
3、即使改成下面的代码也不完全符合题意,因为无法计算0!=1。
  1. reduce(lambda x,y: x*y,range(1,n+1))
复制代码


:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-23 11:14:51 | 显示全部楼层
微逻辑 发表于 2014-12-22 22:32
1、python3中reduce已经不是BIF了,要引入function模块。
2、你的代码运行结果是0。
3、即使改成下面的 ...

呃,写的不严谨了忘了从1开始乘。
0这个还真没考虑到,直接报错了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-23 13:54:45 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-12-29 16:49:41 | 显示全部楼层
有意思的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-30 21:10:47 | 显示全部楼层
呃,写的不严谨了忘了从1开始乘。
0这个还真没考虑到,直接报错了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-11 17:20:45 | 显示全部楼层
谁把我在邮局写的代码贴出来了:huffy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-11 22:56:51 | 显示全部楼层
看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-1-26 13:08:22 | 显示全部楼层
特么一个阶乘方法呢么多啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-26 13:33:33 | 显示全部楼层
haha,各有特色
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-10 09:44:05 | 显示全部楼层
哈哈 蛮有创意
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-11 17:46:55 | 显示全部楼层
回复赚鱼币写作业
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-12-30 11:13:53 | 显示全部楼层
下下看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-5-27 15:41:55 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-28 08:49:10 | 显示全部楼层
好像很厉害的样子呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-20 10:01:24 | 显示全部楼层
新人表示越往后越不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-22 21:29:05 | 显示全部楼层
  1. def function(a,b):
  2.     return a**b
复制代码


我才是最懒的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-17 03:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表