1. 程式人生 > >廖雪峰Python - map/reduce練習

廖雪峰Python - map/reduce練習

練習

  1. 利用map()函式,把使用者輸入的不規範的英文名字,變為首字母大寫,其他小寫的規範名字。輸入:[‘adam’, ‘LISA’, ‘barT’],輸出:[‘Adam’, ‘Lisa’, ‘Bart’]:

    def normalize(name):
        return name.title()
    
    
    # 測試:
    
    L1 = ['adam', 'LISA', 'barT']
    L2 = list(map(normalize, L1))
    print(L2)
  2. Python提供的sum()函式可以接受一個list並求和,請編寫一個prod()函式,可以接受一個list並利用reduce()求積:

    from functools import reduce
    
    def prod(L):
        def fn(x, y):
            return x * y
    
        return reduce(fn, L)
    
    print('3 * 5 * 7 * 9 =', prod([3, 5, 7, 9]))
  3. 利用map和reduce編寫一個str2float函式,把字串’123.456’轉換成浮點數123.456:

    from functools import reduce
    
    def str2float(s):
        def str2num_int(s): # 將str轉成int 的函式
    def fn(x, y): return x * 10 + y def char2num(c): digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} return digits[c] return reduce(fn, map(char2num, s)) if '.' in s: s1, s2 = s.split('.'
    ) num1 = str2num_int(s1) num2 = str2num_int(s2) * (0.1 ** len(s2)) return num1 + num2 else: num = str2num_int(s) return num print('str2float(\'123.456\') =', str2float('123.456'))