Discuss / Python / 一,二,三题。第三题只需要记录下小数点的位置并且清除小数点,其他方法与转换为整数类似

一,二,三题。第三题只需要记录下小数点的位置并且清除小数点,其他方法与转换为整数类似

Topic source

是瑞瑞喔

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

三:

def str2float(s):

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

    n = s.find('.')

    s = s.replace('.','')

    return (reduce(lambda x,y:x*10+y,map(lambda a:digits[a],s)))*(10**(-n))

二:

def prod(L):

    return reduce(lambda x,y:x*y,L)

一:

def normalize(name):

    return name.title()

是瑞瑞喔

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

第三题

1、找到小数点的位置n,

2、然后从字符串s中删除小数点。这个时候就跟转换为整数的方法一致了。

3、最后在生成的整数上乘以10的-n次方就可以得到小数

你这个位数是错的,如果是12345.6

def str2float(s):
    digits = {}
    for i in range(10):
        digits[str(i)] = i


    dot = s[::-1].find('.')
    s = s.replace('.', '')
    return reduce(lambda x,y:x*10+y, map(lambda i:digits[i], s)) * 10 ** (-dot)

是瑞瑞喔

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

原代码是从字符串的左边开始计算的小数点位置,应该从右边开始计算。所以把

n = s.find('.')

改为

n = len(s) - s.find('.') - 1

或   n = s[::-1].find('.')   就可以了


  • 1

Reply