Discuss / Python / 对楼下一位大佬的答案加上思路

对楼下一位大佬的答案加上思路

Topic source

雨鸢梦

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

第三题:

def str2float(s):
    DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3,'4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    def char2num(s):
        return DIGITS[s]
    def fn(x, y):
        return 10 * x + y
    n = s.index('.')
    s1 = list(map(char2num, s[0:n]))
    s2 = list(map(char2num, s[n + 1:]))
    return reduce(fn, s1) + reduce(fn, s2) / 10**len(s2)

这里的主要思路是要分割小数点前的列表与小数点后的列表,小数点前可以用x*10+y来让单独的数字变成整数。小数点后面的数字要让它们先变成整数,然后除以十的n次方,具体几次方根据列表长度而定,也就是len(s2),值得注意的是,这里用的是**而不是*,因为用**才是次方,这里是十的三次方,如果用*,就变成了10*3

还有一个函数,index() 函数是用于从列表中找出某个值第一个匹配项的索引位置。这里用index()找到了小数点的位置,然后切片分割列表。


  • 1

Reply