趣文:Python程序員的進化史

jopen 12年前發布 | 6K 次閱讀 Python

導讀:下面代碼來自 fmeyer ,列舉了各種程序員所寫的階乘算法代碼,甚至包括網頁設計師的。 


  #新手程序員

  def factorial (x):

      if x == 0:

          return 1

      else:

          return x * factorial (x - 1)

  print factorial (6)

  #有一年 Pascal 經驗的程序員

  def factorial (x):

      result = 1

      i = 2

      while i <= x:

          result = result * i

          i = i + 1

      return result

  print factorial (6)

  #有一年 C 經驗的程序員

  def fact (x): #{

      result = i = 1;

      while (i <= x): #{

          result *= i;

          i += 1;

      #}

      return result;

  #}

  print(fact (6))

  #有一年 SICP 經驗的程序員

  @tailcall

  def fact (x, acc=1):

      if (x > 1): return (fact ((x - 1), (acc * x)))

      else: return acc

  print(fact (6))

  #有一年 Python 經驗的程序員

  def Factorial (x):

      res = 1

      for i in xrange (2, x + 1):

          res *= i

      return res

  print Factorial (6)

  #懶惰的 Python 程序員

  def fact (x):

      return x > 1 and x * fact (x - 1) or 1

  print fact (6)

  #更懶惰的 Python 程序員

  f = lambda x: x and x * f (x - 1) or 1

  print f (6)

  #專家級 Python 程序員

  import operator as op

  import functional as f

  fact = lambda x: f.foldl (op.mul, 1, xrange (2, x + 1))

  print fact (6)

  #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')

  #專家級程序員

  import c_math

  fact = c_math.fact

  print fact (6)

  #英國專家級程序員 (譯注:在英式英語中,“數學”的簡寫,多用“maths”,不是“math"。)

  import c_maths

  fact = c_maths.fact

  print fact (6)

  #網頁設計師

  def factorial (x):

      #-------------------------------------------------

      #--- 這段代碼是從 Math Vault 那弄過來滴---

      #--- 計算階乘 (C)亞瑟·史密斯 1999 年---

      #-------------------------------------------------

      result = str (1)

      i = 1 #謝謝亞當

      while i <= x:

          #result = result * i #It's faster to use *=

          #result = str (result * result + i)

             #result = int (result *= i) #??????

          result str (int (result) * i)

          #result = int (str (result) * i)

          i = i + 1

      return result

  print factorial (6)

  #Unix 程序員

  import os

  def fact (x):

      os.system ('factorial ' + str (x))

  fact (6)

  #Windows 程序員

  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, NULL, NULL, NULL, NULL, NULL)

  #企業程序員

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

下面代碼是 kohashi 給出的,他說是在郵局看到的。

#VBA 程序員

  def factorial (x):

      if x == 0:

          return 1

      if x == 1:

          return x

      if x == 2:

          return x * (x-1)

      if x == 3:

          return x * (x-1) * (x-2)

      if x == 4:

          return x * (x-1) * (x-2) * (x-3)

      if x == 5:

          return x * (x-1) * (x-2) * (x-3) * (x-4)

      if x == 6:

          return x * (x-1) * (x-2) * (x-3) * (x-4) * (x-5)

  print factorial (6)

原文:fmeyer    編譯:伯樂在線 – 黃利民

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!