因为忘了有index操作、lamada函数,以及自己写了个str2int函数(其实可以直接用int()函数),所以在第三题将str转化为float中我的代码不够精简
from functools import reduce
DIGITS = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
def str2float(s):
def LenAfterPoint(s):
if '.' not in s:
return 0
count = 0
for x in s[::-1]:
if x != '.':
count += 1
else:break
return count
def str2int(s):
def fn(x,y):
return x*10+y
def char2num(x):
return DIGITS[x]
return reduce(fn,map(char2num,s))
return str2int(s.replace('.',''))/(10**LenAfterPoint(s))
而这个老哥写的就很好了
from functools import reduce
def str2float(s):
point=s.index('.')
r1=list(map(int,s[:point]))
r2=list(map(int,s[point+1:]))
r1.extend(r2)
return reduce(lambda x,y:10x+y,r1)/(10*len(s[:point]))
不过问题不大 ,慢慢来。