利用map
和reduce
编写一个str2float
函数,把字符串'123.456'
转换成浮点数123.456
思路:把字符串根据小数点分成整数和小数部分。
整数部分*10后使用reduce函数。
小数部分反转后*0.1使用reduce函数。
from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def str2num(s):
return DIGITS[s]
def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(str2num, s))
def str2fraction(s):
return reduce(lambda x, y: x * 0.1 + y, map(str2num, s))
def str2float(s):
p_index = s.index('.')
s_int = s[0:p_index]
s_fraction = s[p_index + 1:]
#字符串反转也使用reduce
s_refraction = reduce(lambda x, y: y + x, s_fraction)
#注意加个0,否则得到4.56
s_refraction += '0'
return str2int(s_int) + str2fraction(s_refraction)
print('str2float(\'123.456\') =', str2float('123.456'))
if abs(str2float('123.456') - 123.456) < 0.00001:
print('测试成功!')
else:
print('测试失败!')