代码已损坏,但我似乎找不到错误

时间:2019-05-16 14:17:36

标签: python-3.7

所以,基本上。发生的事情是我不断出错。 IndexError:字符串索引超出范围。我想知道发生了什么事?

我尝试更改代码的呈现方式,并尝试更改IDE的代码,但这没用。

编辑:已解决。我可能会想补充一点,这应该能够在控制台上编写的数学方程中找到+,-,*和/。

def OpFind(cal):
    n = 0
    a = 0
    while n != "+" or n != "-" or n != "*" or n != "/":
        n = (cal[a])
        a += 1

    return n


calc = str(input())

print(OpFind(calc))

IndexError:字符串索引超出范围

1 个答案:

答案 0 :(得分:1)

发生的事情是,您创建了一个循环,该循环将遍历整个字符串,然后在该循​​环内,您最终将尝试在字符串之外捕获字符并获取该异常。 始终

此表达式:

n != "+" or n != "-" or n != "*" or n != "/"

永远都是正确的(尽管已经有一段时间了,因为我使用Python,所以如果null相似,它可能是Nonen,我不记得了,但这并没有在这里不适用)。

n将始终至少与这些符号中的 3个不同。例如,如果n"+",则它将不同于"-""*""/"

让我改一下。表达式允许循环中断的唯一方法是,如果您找到与所有同一时间的所有不同字符串相同的符号。这是不可能的,因此为什么无论内容如何它都会遍历整个字符串。

我猜您打算使用and而不是or

但是,我将要做的是重写您的代码,以使它在字符串结束时结束,因为您还没有涉及另一种情况,如果字符串不包含任何内容,该怎么办?这样,它将始终崩溃并发生异常。

相反,请执行以下操作:

def OpFind(cal):
    for n in cal:
        if n == "+" or n == "-" or n == "*" or n == "/":
            return n
    return None

这不会落在字符串的结尾,如果您给它提供了一个不包含任何运算符的字符串,它将返回None

还有多种方法可以使代码更加简洁,例如使用in关键字:

def OpFind(cal):
    for n in cal:
        if n in ["+", "-", "*", "/"]:
            return n
    return None

还有一些内置的功能可能会有所帮助,例如next

def OpFind(cal):
    return next((n for n in cal if n in ["+", "-", "*", "/"]), None)