0

下面的代码是我在许多 SO 资深人士的帮助下创建的:

该代码采用输入的数学表达式并将其拆分为运算符和操作数以供以后使用。我创建了两个函数,拆分的解析函数和错误函数。我遇到了错误函数的问题,因为它不会显示我的错误消息,而且我觉得在代码运行时该函数被忽略了。如果输入这样的表达式,则应打印错误:3//3+4 等。其中有两个运算符一起,或者整个表达式中有两个以上的运算符,但错误消息不打印。我的代码如下:

def errors():

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


def parse(expression):
    operators= set("*/+-")
    opExtrapolate= []
    numExtrapolate= []
    buff=[]
    for i in expression:
        if i in operators:
            numExtrapolate.append(''.join(buff))
            buff= []
            opExtrapolate.append(i)
            opExtrapolation=opExtrapolate
        else:
            buff.append(i)
    numExtrapolate.append(''.join(buff))
    numExtrapolation=numExtrapolate
    #just some debugging print statements
    print(numExtrapolation)
    print("z:", len(opExtrapolation))
    return numExtrapolation, opExtrapolation

    errors()

任何帮助,将不胜感激。请不要引入比此处已有代码更高级的新代码。我正在寻找解决我的问题的方法......不是大的新代码段。谢谢。

4

1 回答 1

1

errors() 函数在 parse() 返回后被调用,因为它出现在 parse() 的主体中。希望这是一个错字。

对于这个特定的输入,numExtrapolate 附加了一个空缓冲区,因为 / 和 / 之间没有操作数。这使得它的长度为 4 并且您对 Bad1 的检查失败。所以放一张这样的支票

 if buff:
     numExtrapolate.append(''.join(buff))
于 2012-11-02T10:58:36.583 回答