Discuss / Python / 第三题

第三题

Topic source

    DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}

    n=0

    while s[n]!='.':         #计算小数点在第几位

        n=n+1

    s1=s[:n]                  #小数点前切片

    s2=s[n+1:]              #小数点后切片

    def f1(x,y):

        return 10*x+y

    def char2num(s):

        return DIGITS[s]

    a=reduce(f1,map(char2num,s1))                                

    b=reduce(f1,map(char2num,s2))/(10**(len(s2)))

    return a+b

哇,我真的写得太绕了^^

from functools import reducedef str2float(s):    digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}    a=s.split('.')    s1=a[0]  #把‘123.456’分成‘123’,‘456’    s2=a[1]    # 若输入‘123’,则返回123    def str2num(s):        def fn(x,y):            return x*10+y        def char2num(s):            return digits[s]        return reduce(fn,map(char2num,s))    # 返回【123,456】    num=list(map(str2num,[s1,s2]))        def fn(x,y):        return x+y*0.001    return reduce(fn,num)def main():    print(str2float('123.456'))if __name__ == '__main__':    main()

  • 1

Reply