第一题:
def normalize(name):
return name[0].upper()+name[1:].lower()
# 测试: L1 = ['adam', 'LISA', 'barT'] L2 = list(map(normalize, L1)) print(L2)
['Adam', 'Lisa', 'Bart']
第二题:
def prod(L):
def fn(x,y):
return x * y
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 * 5 * 7 * 9 = 945
测试成功!
第三题:
def str2float(s):
DIGITS = {str(v): v for v in list(range(10))}
s1,s2=s.split('.')
def fn(x, y):
return x * 10 + y
def char2num(s):
return DIGITS[s]
f1=reduce(fn, map(char2num,s1))
f2=reduce(fn, map(char2num,s2))/(10**len(s2))
return f1+f2
print('str2float(\'123.456\') =', str2float('123.456')) if abs(str2float('123.456') - 123.456) < 0.00001: print('测试成功!') else: print('测试失败!')
str2float('123.456') = 123.456
来源:https://www.bilibili.com/video/BV1qE411674j?p=58
受教了,朋友,\抱拳
1、split方法是str带有的,我还傻傻构建了一个;
2、小数位的处理用的好,全部用reduce(fn,f2)处理后再整体移动小数点,秒啊!
Sign in to make a reply
宇宙计时器
第一题:
def normalize(name):
return name[0].upper()+name[1:].lower()
['Adam', 'Lisa', 'Bart']
第二题:
def prod(L):
def fn(x,y):
return x * y
return reduce(fn, L)
3 * 5 * 7 * 9 = 945
测试成功!
第三题:
def str2float(s):
DIGITS = {str(v): v for v in list(range(10))}
s1,s2=s.split('.')
def fn(x, y):
return x * 10 + y
def char2num(s):
return DIGITS[s]
f1=reduce(fn, map(char2num,s1))
f2=reduce(fn, map(char2num,s2))/(10**len(s2))
return f1+f2
str2float('123.456') = 123.456
测试成功!
来源:https://www.bilibili.com/video/BV1qE411674j?p=58