第三题有些难
Topic sourcedef str2float(s):
def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}.get(s)
num = list(map(char2num, s))
num.pop(s.index('.'))
return reduce(lambda x, y: 10 * x + y, num) / 10 ** (len(s) - s.index('.') - 1)
原来用插入代码才能正常显示...
看到下一章节发现有更简洁的做法
def str2float(s):
def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}.get(s)
return reduce(lambda x, y: 10 * x + y, filter(lambda x: x != None, map(char2num, s))) / 10 ** (len(s) - s.index('.') - 1)
第三题
def str2float(s):
def char2num(c):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[c]
def fn(x, y):
return x * 10 + y
inte, deci = s.split('.')
return reduce(fn, map(char2num, inte)) + reduce(fn, map(char2num, deci)) / (10.0 ** len(deci))
-- coding: utf-8 --
from functools import reduce def str2float(s): def aa(x,y): return x + y0.1*len(str(y)) return reduce(aa,map(int,s.split('.'))) print ('str2float(\'123.45678\') =', str2float('123.45678'))
-- coding: utf-8 --
from functools import reduce def str2float(s): def aa(x,y): return x + y*0.1**len(str(y)) return reduce(aa,map(int,s.split('.'))) print ('str2float(\'123.45678\') =', str2float('123.45678'))
- 1
白水为泉真能扯
def str2float(s): def char2num(s): return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}.get(s) num = list(map(char2num, s)) num.pop(s.index('.')) return reduce(lambda x, y: 10 x + y, num) / 10 * (len(s) - s.index('.') - 1)