首先贴代码:
def str2float(s):
def fn(x, y):
return x * 10 + y
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]
index=s.find('.')
L1=list(map(char2num,s[:index]))
L2=list(map(char2num,s[index+1:]))
return reduce(fn,L1)+reduce(fn,L2)/pow(10,len(L2))1
2
3
4
5
6
7
8
9
10
运行结果:
具体过程:
1.首先定义
fn:输入两个数,输出一个数字,例如输入2,3,输出23
char2num:将字符串转换成数字,例如输入‘12345’,输出list:[1,2,3,4,5]
2.找到小数点位置
index=s.find(’.’)
3.用map函数分别生成小数点前后的list
L1=list(map(char2num,s[:index]))
L2=list(map(char2num,s[index+1:]))
例如:123.456
输出:[1,2,3]和[4,5,6]
4.用reduce函数计算小数点前后对应的数字
例如:[1,2,3]和[4,5,6]
输出:123和456
5.将小数点前后合并
例如:123和456
输出数字:123.456
步骤4、5合为一步:
return reduce(fn,L1)+reduce(fn,L2)/pow(10,len(L2))