#利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456
from
functools
import
reduce
def
str2float(s):
s
=
s.split(
'.'
)
#以小数点为分隔符,把字符串分为两部分
def
f1(x,y):
#函数1,小数点之前的数用这个函数处理
return
x
*
10
+
y
def
f2(x,y):
#函数2,小数点之后的数用这个函数处理
return
x
/
10
+
y
def
str2num(
str
):
#函数3,用于把字符串'123'逐个变为数字
return
{
'0'
:
0
,
'1'
:
1
,
'2'
:
2
,
'3'
:
3
,
'4'
:
4
,
'5'
:
5
,
'6'
:
6
,
'7'
:
7
,
'8'
:
8
,
'9'
:
9
}[
str
]
return
reduce
(f1,
map
(str2num,s[
0
]))
+
reduce
(f2,
list
(
map
(str2num,s[
1
]))[::
-
1
])
/
10
#最后一部是这个解法的精髓
#小数点前的数'123',用 x * 10 + y 正常求和就能得出123,小数点之后的数'456'要怎样才能得出0.456呢?
#首先把字符串'456'用list(map(str2num,s[1]))转成一个列表[4,5,6]
#然后用[::-1]切片的方式从后往前取,列表变为[6,5,4]
#然后把[6,5,4]利用reduce函数放到f2函数中计算,( 6 / 10 + 5) / 10 + 4 = 4.56,得出结果4.56
#再除以一个10,得出0.456,到此成功把字符串'456'变成了浮点数0.456
#把前后结果加起来,就得到了最终解,成功把字符串'123.456'变成了浮点数123.456