Discuss / Python / 第三题,结合各位大佬的,来个究极套娃版

第三题,结合各位大佬的,来个究极套娃版

Topic source

綾之桜

#1 Created at ... [Delete] [Delete and Lock User]
from functools import reduce
def str2float(s):
    s1, s2 = s.split('.')
    s2 = s2[::-1] + '0'
    return reduce(lambda x, y: x * 10 + y, map(int, s1)) + reduce(lambda x, y: x / 10 + y, map(int, s2))

綾之桜

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

上面的好像用了内置的int函数, 其实感觉这样比较好: 

def str2float(s):
    DIGITS = {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '0': 0}
    s1, s2 = s.split('.')
    s2 = s2[::-1] + '0'
    return reduce(lambda x, y: x * 10 + y, map(lambda z: DIGITS[z], s1)) + reduce(lambda x, y: x / 10 + y, map(lambda z: DIGITS[z], s2))

当然不用split函数也可以: 

def str2float(s):
    DIGITS = {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '0': 0, '.': 0}
    L = 10 ** (len(s) - s.index('.') - 1)
    return reduce(lambda x, y: x + y if y == 0 else x * 10 + y, map(lambda z: DIGITS[z], s)) / L

总之方法是很多的, 想要简化的话甚至可以全合并到一行代码里, 最后还是感谢廖老师和评论区的大佬们, 真的学到很多


  • 1

Reply