第三题
Topic source哇,我真的写得太绕了^^
from functools import reducedef str2float(s): digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} a=s.split('.') s1=a[0] #把‘123.456’分成‘123’,‘456’ s2=a[1] # 若输入‘123’,则返回123 def str2num(s): def fn(x,y): return x*10+y def char2num(s): return digits[s] return reduce(fn,map(char2num,s)) # 返回【123,456】 num=list(map(str2num,[s1,s2])) def fn(x,y): return x+y*0.001 return reduce(fn,num)def main(): print(str2float('123.456'))if __name__ == '__main__': main()
- 1
Dream-and-Freedom
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
n=0
while s[n]!='.': #计算小数点在第几位
n=n+1
s1=s[:n] #小数点前切片
s2=s[n+1:] #小数点后切片
def f1(x,y):
return 10*x+y
def char2num(s):
return DIGITS[s]
a=reduce(f1,map(char2num,s1))
b=reduce(f1,map(char2num,s2))/(10**(len(s2)))
return a+b