题目来源:廖雪峰的官方网站
python初学者,求轻喷
题目:利用map和reduce编写一个str2float函数,把字符串’123.456’转换成浮点数123.456
这道题我想到两种思路
1.读取str中的数字和小数点位置,先将其转换为整数然后除以小数点的位置
2.将str中小数部分和整数部分分别还原,最后相加
对于方法二,在实际操作中我想不到能够同时还原小数部分和整数部分的函数,故舍弃,采用方法一
# -*- coding: utf-8 -*-
from functools import reduce
def str2float(s):
CHAR_TO_FLOAT={
'0':0,
'1':1,
'2':2,
'3':3,
'4':4,
'5':5,
'6':6,
'7':7,
'8':8,
'9':9,
'.':-1}
def is_point(s):
return s != -1
#消除小数点
def fn(x,y):
return x*10+y
#还原成整数
def STR_TO_NUM(s):
return CHAR_TO_FLOAT[s]
#将字符串转换为数字list
L=list(map(STR_TO_NUM,s))
digit=len(L)-L.index(-1)-1
L=list(filter(is_point,L))
return reduce(fn,L)/pow(10,digit)
print('str2float(\'123.456\') =', str2float('123.456'))
if abs(str2float('123.456') - 123.456) < 0.00001:
print('测试成功!')
else:
print('测试失败!')