Discuss / Python / 第三题有些难

第三题有些难

Topic source

def str2float(s): def char2num(s): return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}.get(s) num = list(map(char2num, s)) num.pop(s.index('.')) return reduce(lambda x, y: 10 x + y, num) / 10 * (len(s) - s.index('.') - 1)

def str2float(s):
    def char2num(s):
        return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}.get(s)
    num = list(map(char2num, s))
    num.pop(s.index('.'))
    return reduce(lambda x, y: 10 * x + y, num) / 10 ** (len(s) - s.index('.') - 1)

原来用插入代码才能正常显示...

看到下一章节发现有更简洁的做法

def str2float(s):
    def char2num(s):
        return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}.get(s)
    return reduce(lambda x, y: 10 * x + y, filter(lambda x: x != None, map(char2num, s))) / 10 ** (len(s) - s.index('.') - 1)

妙尽璇矶

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

第三题

def str2float(s):
    def char2num(c):
        return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[c]

    def fn(x, y):
        return x * 10 + y

    inte, deci = s.split('.')

    return reduce(fn, map(char2num, inte)) + reduce(fn, map(char2num, deci)) / (10.0 ** len(deci))

-- coding: utf-8 --

from functools import reduce def str2float(s): def aa(x,y): return x + y0.1*len(str(y)) return reduce(aa,map(int,s.split('.'))) print ('str2float(\'123.45678\') =', str2float('123.45678'))

-- coding: utf-8 --

from functools import reduce def str2float(s): def aa(x,y): return x + y*0.1**len(str(y)) return reduce(aa,map(int,s.split('.'))) print ('str2float(\'123.45678\') =', str2float('123.45678'))


  • 1

Reply