我想写一个函数,使用map和reduce将字符串转换为浮点数(这里不使用int())。以下是我目前的代码:
from functools import reduce
def str2float(s):
def char2number(s):
s = s.replace('.', '')
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s] #here i try to get pure numbers
def find_digt(s):
return (len(s) - s.find('.') - 1) if ',' in s else 0
return reduce(lambda x, y: (10 * x + y), (map(char2number, s))) / pow(10, find_digt(s))
print(str2float('1456.124'))
所以在这之后,我遇到了一个错误:
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[sn] # [s] is the [key]
KeyError: ''
这意味着“''”不在字典中。我进行了一些测试,例如:
s = '1234.456'
s = s.replace(',', '')
print('' in s) #True
所以现在的问题是,一旦
s = s.replace('.', '')
把 '.' 替换成 '' 后,它并没有清除字符串中的 '.'。
我想知道这里发生了什么。由于字符串是不可变的,那么正确的清除字符串中的字符的方法是什么?
s
中是否包含逗号,但是却搜索了句点的索引吗?看起来这是你在使用另一个分隔符时留下的痕迹。但这绝对很奇怪。 - MSeifert