廖雪峰-python-函数式编程-map-reduce

因为忘了有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]))

不过问题不大 ,慢慢来。

猜你喜欢

转载自blog.csdn.net/zhuazengbian9095/article/details/82828048