1. 杨辉三角
   def triangles():
       L = [1]
       while 1:
           yield L
           L.append(0)
           L = [L[i-1] + L[i] for i in range(len(L))]
   n = 0
   for t in triangles():
        print(t)
        n = n + 1
        if n == 10:
           break

输出

   [1]
   [1, 1]
   [1, 2, 1]
   [1, 3, 3, 1]
   [1, 4, 6, 4, 1]
   [1, 5, 10, 10, 5, 1]
   [1, 6, 15, 20, 15, 6, 1]
   [1, 7, 21, 35, 35, 21, 7, 1]
   [1, 8, 28, 56, 70, 56, 28, 8, 1]
   [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

  1. 字符串转浮点数

do_reduce.py

   from functools import reduce


   def str2float(s):
       def s2n(s):
           return {'0': 0,
                   '1': 1,
                   '2': 2,
                   '3': 3,
                   '4': 4,
                   '5': 5,
                   '6': 6,
                   '7': 7,
                   '8': 8,
                   '9': 9,
                   '.': -1}[s]

       nums = list(map(s2n, s))
       if -1 in nums:
           dot_index = nums.index(-1)
           nums.remove(-1)
       else:
           dot_index = len(nums)
       return reduce(lambda x, y: x + y, map(lambda x: x * 10 ** (dot_index - nums.index(x) - 1), nums)

验证

   print(str2float('0'))
   print(str2float('123.456'))
   print(str2float('123.45600'))
   print(str2float('0.1234'))
   print(str2float('.1234'))
   print(str2float('120.0034'))

结果有点奇葩, 改日再看

   0
   123.456
   123.456
   0.12340000000000001  # 囧
   0.12340000000000001
   120.0034