Discuss / Python / 第三题的代码

第三题的代码

Topic source

蝎尾蛇嚴

#1 Created at ... [Delete] [Delete and Lock User]

鉴于参考代码和评论区一些同学给出的代码中要用到前几章没有讲过的lambda,所以为了方便不会的同学理解,我写了一个不用lambda的,供大家参考。

from functools import reduce

def str2float(s):

    #首先定义两个内部的函数,一个用来通过map将字符串转化成int数字,另一个通过reduce来得到浮点数。

    def char2num(x):

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

        return digits[x]

    def y(x,y):

        return x*10+y

    #接下来需要查找'.'的下标,用到index函数。

    n=s.index('.')

    #找到下标后可以将小数点左和右拆成两部分x1和x2

    x1=map(char2num,s[0:n])

    x2=map(char2num,s[n+1:])

    y1=reduce(y,x1)

    y2=reduce(y,x2)

    #然后根据刚才得到的小数点的位置,乘上对应的次方数

    return y1+y2*0.1**(len(s)-n-1)


  • 1

Reply