Discuss / Python / 第三题

第三题

Topic source

13个望辰

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

(1)第一种方法是使用replace函数将字符串中的"."替换为"",再使用digits的思路转换为整数,最后添加小数点:

from functools import reduce

def str2float(s):
    for i in range(len(s)):
        if s[i]=='.':
            count=len(s)-(i+1)
            ss=s.replace('.','')

    def char2int(s):
        DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        return DIGITS[s]
    
    return reduce(lambda x,y:x*10+y,map(char2int,ss))/(pow(10,count))

(2)第二种方法是使用split函数将字符串在"."处分割成两部分,分别用digits函数转换为整数,最后把小数部分加上小数点与整数部分相加:

from functools import reduce

def str2float(s):
    for i in range(len(s)):
        if s[i]=='.':
            count=len(s)-(i+1)
    
    ss=s.split('.',1)
    
    def char2int(s):
        DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        return DIGITS[s]
    
    a=[]
    for j in range(len(ss)):
        a.append(reduce(lambda x,y:x*10+y,map(char2int,ss[j])))
    return a[0]+a[1]/(pow(10,count))

(3)其实还可以把两种方法结合起来,即把用split函数分割后的两个字符串再拼接,再使用第一种方法后半部分:

from functools import reduce

def str2float(s):
    for i in range(len(s)):
        if s[i]=='.':
            count=len(s)-(i+1)
    
    ss=s.split('.',1)
    sss=ss[0]+ss[1]
    
    def char2int(s):
        DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        return DIGITS[s]

    return reduce(lambda x,y:x*10+y,map(char2int,sss))/(pow(10,count))

  • 1

Reply