from functools import reduce
def str2float(s):
i = s.index('.') #找到.的位置
s = s[:i] + s[i+1:] #从.的位置把str切分再合并,目的是丢掉.此时数据是str
def fn(x,y):
return x * 10 + y #将list的数字变为一整个数字
def char2num(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] #试图将str转变为一个list的数字,因为dict无法接受一个str,需要配合map函数使用,此函数输出的并不是一串数字,而是一个一个的单独数字
#因此需要配合fn()函数使用,将单独的数字转化成为一串数字1,2,3,4,5,6=>123456
return reduce(fn,map(char2num,s))/(10**(len(s)-i))#最后一步,给数字123456添加小数点,使用数学方法,123456/1000=123.456,但是这个1000要如何得出?
#len(s)是计算s的长度,让他减去小数点所在的位置,即123456长度为6减去小数点所在的地方为3,结果等于3,10的3次方等于1000,这是最难想到的地方
Sign in to make a reply
心中熱望
from functools import reduce
def str2float(s):
i = s.index('.') #找到.的位置
s = s[:i] + s[i+1:] #从.的位置把str切分再合并,目的是丢掉.此时数据是str
def fn(x,y):
return x * 10 + y #将list的数字变为一整个数字
def char2num(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] #试图将str转变为一个list的数字,因为dict无法接受一个str,需要配合map函数使用,此函数输出的并不是一串数字,而是一个一个的单独数字
#因此需要配合fn()函数使用,将单独的数字转化成为一串数字1,2,3,4,5,6=>123456
return reduce(fn,map(char2num,s))/(10**(len(s)-i))#最后一步,给数字123456添加小数点,使用数学方法,123456/1000=123.456,但是这个1000要如何得出?
#len(s)是计算s的长度,让他减去小数点所在的位置,即123456长度为6减去小数点所在的地方为3,结果等于3,10的3次方等于1000,这是最难想到的地方