Discuss / Python / 办法虽笨,但是逻辑清晰

办法虽笨,但是逻辑清晰

Topic source

#1、将字符串拆为两部分,例如'123.456'拆成'123' 和 '456'

#2、将字符串变为对应的list,例如'123'-->[1, 2, 3],  '456'-->[4, 5, 6]

#3、获得整数部分:[1, 2, 3]-->123

#4、获得小数部分:[4, 5, 6]-->456-->0.456

#5、return 整数+小数

from functools import reduce

def str2float(s):

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

    #此函数用作map的第一个参数.将字符串-->相应的list,例如'123'-->[1, 2, 3]

    def str2num(s):

        return digits[s]

    #此函数用作reduce的第一个参数,将list-->相应的整数,例如[1, 2, 3]-->123  [4, 5, 6]-->456

    def funcz(x, y):

        return x * 10 + y

    #第一步:将字符串拆为两部分,例如'123.456'拆成'123' 和 '456'

    i=0

    while s[i] != '.':

        i = i + 1

    sz = s[:i]    #整数部分

    sx = s[i+1:]  #小数部分

    #第二、三步:将字符串整数部分-->相应的list-->整数,如[1, 2, 3]-->123

    zs = reduce(funcz,map(str2num, sz))  

    #第四步:将字符串小数部分-->相应的list-->整数,如[4, 5, 6]-->456

    xs = reduce(funcz,map(str2num, sx))    

    #不断除以10,直到小于1,变为相应的小数,如456-->0.456

    while xs >= 1:                        

        xs = xs / 10

    #第五步:得到的整数部分+小数部分

    return xs + zs


  • 1

Reply