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

题目:python

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

答案:spa

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 方法,对字符串进行了切割。code

right_num 在计算时须要从后向前计算,因此采用列表的切片的操做[开始位置:结束位置:步幅],步幅为负,表示从右向左。字符串

right_num 之因此要再*0.1 是由于 reduce 函数是每次取两个参数,这里是先取6,5。计算完再取4,若是这时不*0.1,个数位是4,可是咱们须要是个数位是0 ,因此须要再*0.1it

相关文章
相关标签/搜索