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

相關文章
相關標籤/搜索