所以,基本上。发生的事情是我不断出错。 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:字符串索引超出范围
答案 0 :(得分:1)
发生的事情是,您创建了一个循环,该循环将遍历整个字符串,然后在该循环内,您最终将尝试在字符串之外捕获字符并获取该异常。 始终。
此表达式:
n != "+" or n != "-" or n != "*" or n != "/"
永远都是正确的(尽管已经有一段时间了,因为我使用Python,所以如果null
相似,它可能是None
或n
,我不记得了,但这并没有在这里不适用)。
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)