題目:python
利用map
和reduce
編寫一個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