Discuss / Python / 小白参照@BT指数爆表抢救无效的第一题,写的第三题

小白参照@BT指数爆表抢救无效的第一题,写的第三题

Topic source
from functools import reduce

def str2float(s):
    #去掉.
    def str(str):
        S=''
        for t in str:
            if t=='.':
                S=S+''
            else:
                S=S+t
        return S

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

    return reduce(lambda x, y: x * 10 + y,map(char2num,str(s)))*0.001

你这个乘0.001只适用于小数点后有三位的情况,前提是你已知了是怎样的str,换作一个小数点后只有两位的情况就不工作了

这道题的思路是把小数点前后的str分开

优化了一下,把0.001用函数替换了~

from functools import reduce

def str2float(s):
    #去掉.
    def str(str):
        S=''
        for t in str:
            if t=='.':
                S=S+''
            else:
                S=S+t
        return S
    def char2num(a):
            return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[a]
    #获取圆点和它前面的字符串的总长度        
    def str1(str1):
        n=0
        for k in str1:
            n=n+1
            if k=='.':
                break
        return n
    return reduce(lambda x, y: x * 10 + y,map(char2num,str(s)))/10**(len(s)-str1(s))

  • 1

Reply