Python 正在分析字符串以查看是否可以将其转换为浮点

Python 正在分析字符串以查看是否可以将其转换为浮点,python,validation,floating-point,Python,Validation,Floating Point,我的家庭作业的一部分是编写一个函数,该函数将解析一个字符串,如'-.4e-4',并识别任何可能阻止将其转换为浮点的问题。例如,在'10e4.5'中,我需要检测指数中的小数并提供相关的错误消息 我尝试过很多事情。第一个,当然也是最基本的是try:except:。尝试将其转换为浮点数,并让Python执行重载。然而,就我所见,它可能返回的错误对于这个赋值来说不够描述性 我尝试的第二件事是规范化字符串,将所有数字替换为n,将符号替换为s,将小数替换为d,将指数替换为e(C中的maketrans函数使这

我的家庭作业的一部分是编写一个函数,该函数将解析一个字符串,如
'-.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
导入字符串,时间
检查\u float\u trans=string.maketrans(“nsd0123456789-+”,“???nnnnnn SSD”)
检查浮动有效性='n sn sndn ndn ndnen dn sdn sdnen sdnesn dnesn dnen nen nesn sn sn snn sndnen sndnen sndnesn ndnesn'.split()
def检查浮球(测试):
“”“检查字符串是否可以转换为浮点数,返回布尔值。”“”
test=test.translate(检查\u float\u trans)
test=''.join([a代表a,b在zip中(test,“+test),如果a!=b])
检查浮动有效中的返回测试
我希望这里有人能给我一些建议。我不想把这个交给我,但我相对来说被卡住了。我试着对它进行编码,试着找出绳子不能作为浮子浇铸的原因,但我永远无法搭建足够的墙来确保没有坏的绳子得到假阳性

谢谢。

以下是我要做的。。。(这也是未经测试的)


试试
regular expression
我们也不允许在这一个上使用正则表达式。我知道。非常严格的规定。虽然我确实找到了一个Python模块,它完全符合我需要的正则表达式。。。我希望…那是非常令人沮丧的(在我看来,这是一份写得很糟糕的作业)。不过,这可能会使这个问题过于本地化。为什么不在except子句中包含一系列的
if/else
语句呢?建议解决方案时可能会有帮助的是提供更多关于编程课程哪一部分的信息。大多数课程的作业都是基于寻找一个特定的解决方案,该解决方案将使用刚刚教给你的信息/技术。实际上,我有老师希望我们编写的功能,但发现了其中的缺陷。相当多的缺陷。如果有帮助的话,我可以发帖,但本质上,它会寻找一个符号,循环到小数点,循环到指数,再寻找另一个符号。。。它失败了,因为他可能没有考虑到很多浮动。一旦我给了他我的解决方案(贴在上面),他很惊讶,并要求我做一个版本,做我上面描述的;通知用户浮动无效的原因。所以,我正在努力。我只是需要更多的想法来激发我的创造力,主要是:
def isValid(expression):

    if 'e' in expression:
        number, exponent = expression.split('e')
    else:
        print "not a valid format, no 'e' in expression"
        return False

    # a bunch of other if statments here to check for
    #certain conditions like '.' in the exponent component

    return float(number) ** float(exponent)


if __name__ == '__main__':
    print isValid('-.4e-4')
    print isValid('10e4.5')