实现Python代码的错误信息

2024-09-30 08:36:14 发布

您现在位置:Python中文网/ 问答频道 /正文

def parse(expression):
    operators= set("*/+-")
    numbers= set("0123456789")#not used anywhere as of now
    opExtrapolate= []
    numExtrapolate= []
    buff=[]
    for i in expression:
        if i in operators:
            if len(buff) >0: #prevents buff if multiple operators
                numExtrapolate.append(''.join(buff))
            buff= []
            opExtrapolate.append(i)
            opExtrapolation=opExtrapolate
        else:
            buff.append(i)


    numExtrapolate.append(''.join(buff))

    numExtrapolation=numExtrapolate
    print(numExtrapolation)
    print("z:", len(opExtrapolation))
    return numExtrapolation, opExtrapolation

def errors():

    numExtrapolation,opExtrapolation=parse(expression)
    #Error for muliple operators
    if (len(numExtrapolation) ==3) and (len(opExtrapolation) !=2):
        print("Bad1")
    if (len(numExtrapolation) ==2) and (len(opExtrapolation) !=1):
        print("Bad2")
    #

我在一个旧的问题中发布了类似的代码,但是这个帖子中问题的前提是不同的。在

上面的代码接受用户在变量表达式中输入的数学输入,并将其拆分为操作数和运算符。如果输入不正确,errors函数将稍后打印错误。在

输入看起来像这样,运算符只能在集合中(“*/+-”),操作数是实数。一个输入的例子是45/23+233

在一个SO用户的帮助下,我能够使其中一个错误生效(多个运算符出错),但是我在实现更多的错误消息时遇到了困难。在

1)如果输入包含的项目不是数字或不是允许的运算符,则显示错误消息

或者像552这样的用户输入。在小数点后显示一个小数点后的第23位。在

3)如果用户试图除以零,则显示错误。在

●我尝试过的:

在parse()的else语句中,我试图对增益附加(i) 所以只有在buff.isdigit()==真,但我有错误说buff中没有数字。我还尝试创建一个名为“数字”的集合(在下面的代码中)并限制增益附加(i) 通过类似于初始for语句的for语句。但不幸的是,什么都没用。任何和所有的帮助将不胜感激。在

请不要引入比下面代码更高级的大量代码。我试图解决一个问题,而不是完全改变我的代码。谢谢你的帮助。在


Tags: 代码用户forlenifparse错误运算符
2条回答

可以使用正则表达式执行以下检查:

  1. 如果输入包含非数字或不包含允许运算符的项,则会显示错误消息

    if not re.match(r'[\d.*/+\- ]+$', expression):
        print("Bad3")  # Characters exist that are not allowed
    

    解释:^{cd1>}将只匹配数字、运算符和空格,^{{cd2>}表示允许其中一个或多个字符,并且^{{cd3>}匹配字符串的末尾。re.match()从字符串的开头开始,因此这意味着只允许这些字符。

  2. 如果用户输入一个数字,如.23或类似554的数字。如果小数点之前或小数点之后没有数字,则会显示另一个错误。(注意,类似于0.23的数字是可以的)。

    ^{pr2}$

    解释:^{cd5>}在regex中匹配一个文字“.”字符。中间的^{cd6>}是一个交替,因此如果表达式在中间的任何一方匹配,regex将匹配。^{cd7>}表示前一个字符不是数字,并且^{cd8>}表示下一个字符不是数字,因此此regex表示“match a”。'不是以数字或匹配a来处理的',后面没有数字。”。

  3. 如果用户试图除以零,则显示错误。

    ^{pr3}$

    说明:这与^{{cd9>}后面跟着任意数量的空格,然后匹配一个或多个^{cd10>}或^{{cd11>}字符,因此如果^{{cd12>}中的任何地方都有类似^{{cd13>}、^{cd14>}或^{cd15>}之类的字符,则此匹配。^{cd16>}表示下一个字符不能是数字或^{cd11>},这将阻止您匹配类似^{cd18>}之类的内容。

我会给你一些暗示,但不会帮你解决:)。 如果你需要更多,问一个确切的问题,我会回答的。在

我给你的答案与你的代码没有直接关系。在

您可以通过尝试转换字符串变量来测试它是否可以是整数:

try:
    var2 = int(var)

我让你看看它有什么错误

对于不使用try的版本,可以查看isdigit method

你可以通过检查一个字符串变量

^{pr2}$

要进一步检查,可以先查看变量的长度

if len(var) != and ... see above

要检查用户是否输入.543之类的内容并拒绝它,并且可以查看字符串变量的第一个元素:

if myvar[0] is ".":

要检查用户是否要除以0,只需检查最后一个数字是否等于0

if int(myvar) == 0:

所有这些都希望您能够首先获得运算符和数字。在

另一种解决方案是在解析数字和运算符之前使用正则表达式执行这些检查。 虽然这是家庭作业,但与你试图完成的练习相比,这似乎相当复杂。不管怎样,看看他们是个好主意。在

相关问题 更多 >

    热门问题