我的部分家庭作业是编写一个函数来解析一个字符串,例如'-.4e-4'
并识别任何会阻止它被转换为浮点数的问题。例如,'10e4.5'
我需要检测指数中的小数并提供相关的错误消息。
我尝试了很多事情。第一个也是最基本的当然是 try: except:。尝试将其转换为浮点数并让 Python 完成繁重的工作。但是,据我所见,它可以返回的错误对于这个分配来说不够描述。
我尝试的第二件事是规范化字符串,用 n 替换所有数字,用 s 替换符号,用 d 替换小数,用 e 替换指数(C 中的 maketrans 函数非常快)。然后,我将任何重复的 n 减少为单个 n。我列出了所有有效的浮点格式,并检查了标准化字符串是否在该列表中。又名,我将其列入白名单。它工作得很好,而且相当省时,但同样没有错误检查。该代码发布在下面。
import string,time
check_float_trans = string.maketrans("nsd0123456789-+.","???nnnnnnnnnnssd")
check_float_valids = 'n sn sndn ndn ndnen dn sdn sdnen sdnesn dnesn dnen nen nesn snesn sn snen sndnen sndnesn ndnesn'.split()
def check_float( test ):
"""Check if string <test> could be cast as a float, returns boolean."""
test = test.translate(check_float_trans)
test = ''.join([a for a,b in zip(test, ' '+test) if a != b])
return test in check_float_valids
我希望这里有人能给我一些指示。我不想把这个交给我,但我相对卡住了。我尝试对其进行监护人编码,试图找出字符串可能无法作为浮点数转换的原因,但我永远无法建立足够的墙来确保没有坏字符串得到误报。
谢谢。