# -*- coding: utf-8 -*-
from functools import reduce
def str2float(s):
def f(x,y):
count=0
if not isinstance(x,int):
count+=1
return x+y*(10**(-count))
elif isinstance(y,int):
return 10*x+y
else:
return float(x)
def translate(s):
return {'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'.':'.'}[s]
return reduce(f,map(translate,s))
print('str2float(\'123.456\') =', str2float('123.456'))
问题如下:本代码是将字符串转换为浮点。reduce()每次调用f(),都会执行count=0,导致结果为124.5,而不是123.456。但是count=0不放那里又会报错,在不用split()的情况下,如何解决呢?