您的位置:首页 > 编程语言 > Python开发

Python 使用map()和reduce() 函数将带小数点的字符串数字转化成小数

2017-10-25 00:00 801 查看
题目:

利用
map
reduce
编写一个
str2float
函数,把字符串
'123.456'
转换成浮点数
123.456


答案:

from functools import reduce

#把字符串数字 变成单独的数字个体
def chars2num(s):
chars_num = {"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9}
return chars_num[s]

#把这些独立的数字,拼成相应的数字
#
#计算小数点左边的数字
def point_left(x,y):
return x*10 + y

#计算小数点右边的数字
def point_right(x,y):
return x*0.1 + y

#把带小数点的字符串数字转化成小数
def str2float(s):
chars = s

#根据小数点,将字符串分割成左右两块
chars = chars.split(".")

#将左右两块字符串,分别转化成独立的数字
#
#左边
chars_num1 = map(chars2num,chars[0])
#右边
chars_num2 = map(chars2num,chars[1])

#计算左边数字
left_num = reduce(point_left,chars_num1)
#计算右边数字
right_num = reduce(point_right,list(chars_num2)[::-1])*0.1

#最终数据
num = left_num + right_num
#精简点的写法
#num = reduce(point_left,map(chars2num,chars[0])) + reduce(point_right,list(map(chars2num,chars[1]))[::-1])*0.1
print(num)

#调用函数,查看结果
str2float("123.456")

这里面用到了字符串自带的split 方法,对字符串进行了切割。

right_num 在计算时需要从后向前计算,所以采用列表的切片的操作[开始位置:结束位置:步幅],步幅为负,表示从右向左。

right_num 之所以要再*0.1 是因为 reduce 函数是每次取两个参数,这里是先取6,5。计算完再取4,如果这时不*0.1,个数位是4,但是我们需要是个数位是0 ,所以需要再*0.1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息