(1)第一种方法是使用replace函数将字符串中的"."替换为"",再使用digits的思路转换为整数,最后添加小数点:
from functools import reduce def str2float(s): for i in range(len(s)): if s[i]=='.': count=len(s)-(i+1) ss=s.replace('.','') def char2int(s): DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} return DIGITS[s] return reduce(lambda x,y:x*10+y,map(char2int,ss))/(pow(10,count))
(2)第二种方法是使用split函数将字符串在"."处分割成两部分,分别用digits函数转换为整数,最后把小数部分加上小数点与整数部分相加:
from functools import reduce def str2float(s): for i in range(len(s)): if s[i]=='.': count=len(s)-(i+1) ss=s.split('.',1) def char2int(s): DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} return DIGITS[s] a=[] for j in range(len(ss)): a.append(reduce(lambda x,y:x*10+y,map(char2int,ss[j]))) return a[0]+a[1]/(pow(10,count))
(3)其实还可以把两种方法结合起来,即把用split函数分割后的两个字符串再拼接,再使用第一种方法后半部分:
from functools import reduce def str2float(s): for i in range(len(s)): if s[i]=='.': count=len(s)-(i+1) ss=s.split('.',1) sss=ss[0]+ss[1] def char2int(s): DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} return DIGITS[s] return reduce(lambda x,y:x*10+y,map(char2int,sss))/(pow(10,count))
Sign in to make a reply
13个望辰
(1)第一种方法是使用replace函数将字符串中的"."替换为"",再使用digits的思路转换为整数,最后添加小数点:
(2)第二种方法是使用split函数将字符串在"."处分割成两部分,分别用digits函数转换为整数,最后把小数部分加上小数点与整数部分相加:
(3)其实还可以把两种方法结合起来,即把用split函数分割后的两个字符串再拼接,再使用第一种方法后半部分: