Индекс строки вне диапазона при обращении к различным операторам if - PullRequest
0 голосов
/ 09 апреля 2019

Я делаю программу калькулятора для класса и получаю строковый индекс из-за ошибки диапазона, когда я обращаюсь к знакам минус, умножения и деления, но не получаю его для знака сложения, так как я впервые обращаюсь к сложениюоператоров if / elif.

problem = ("123 * 456")
numLength = 0
placeCount = -1
for i in problem:
    placeCount = placeCount + 1
    if i == "0" or i == "1" or i == "2" or i == "3" or i == "4" or i == "5" or i == "6" or i == "7" or i == "8" or i == "9":
        numLength = numLength + 1
        holdingList.append(i)
    if i == " " or i == ")" and numLength > 0:
        theNum = concatenate_list_data(holdingList)
        if problem[placeCount - (numLength + 2)] == "+" or problem[placeCount + 1] == "+":
            theNum = int(theNum)
            adding.append(theNum)
            holdingList = []
            numLength = 0
            theNum = ""
        elif problem[placeCount - (numLength + 2)] == "-" or problem[placeCount + 1] == "-":
            theNum = int(theNum)
            subtracting.append(theNum)
            holdingList = []
            numLength = 0
            theNum = ""
        elif problem[placeCount - (numLength + 2)] == "*" or problem[placeCount + 1] == "*":
            theNum = int(theNum)
            multing.append(theNum)
            holdingList = []
            numLength = 0
            theNum = ""
        elif problem[placeCount - (numLength + 2)] == "/" or problem[placeCount + 1] == "/":
            theNum = int(theNum)
            dividing.append(theNum)
            holdingList = []
            numLength = 0
            theNum = ""

Ошибка:

Traceback (most recent call last):
    File "/Users/nick/Desktop/Programs/calculator.py", line 61, in <module>
      if problem[placeCount - (numLength + 2)] == "+" or problem[placeCount + 1] == "+":
    IndexError: string index out of range

1 Ответ

0 голосов
/ 09 апреля 2019

Если введено:

problem = '(123 * 456)'

Когда вы достигнете ) в конце строки, problem[placeCount + 1] находится за пределами строки.

Вы не делаетеполучить ошибку, когда оператор +, потому что логические операторы делают ярлыки.Так как problem[placeCount - (numLength + 2)] == "+" имеет значение true, он никогда не пытается оценить problem[placeCount + 1] == "+".

Но когда problem[placeCount - (numLength + 2)] == "+" имеет значение false, он пытается проверить problem[placeCount + 1].Это выходит за пределы строки и выдает ошибку.

Измените тест на:

if problem[placeCount - (numLength + 2)] == "+" or (placeCount < len(problem) - 1 and problem[placeCount + 1] == "+"):

и аналогично для всех других операторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...