2022-04-13 终于做出来,map-reduce练习题

1. 利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:

def normalize(name):

    s = name[1:].lower()

    return name[0].upper() + s

# 测试

L1 = ['adam','LISA','barT']

L2 = list(map(normalize, L1))

print(L2)


2. Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积:

from functools import reduce

def fn(x, y):

    return x * y   

def prod(L):

    return reduce(fn,L)

#测试

print('3*5*7*9 = ', prod([3, 5, 7, 9]))

if prod([3, 5, 7, 9]) == 945:

  print('测试成功!')

else:

  print('测试失败!') 

3. 利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456:

from functools import reduce

def str2float(s):

    s1 = s[:s.index('.')]

    s2 = s[s.index('.')+1:]

    return reduce(fn1,map(char2num,s1)) + 1/10*reduce(fn2,map(char2num,s2[::-1]))

def char2num(s):

    digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '.': '.'}

    return digits[s]

def fn1(x,y):

    return x*10 + y

def fn2(x,y):

    return x*1/10 + y 

#测试

print('str2float(\'123.456\')) = ', str2float('123.456'))

if abs(str2float('123.456') - 123.456) < 0.00001:

    print('测试成功!')

else:

    print('测试失败!')   

你可能感兴趣的:(2022-04-13 终于做出来,map-reduce练习题)