IndexError при попытке перебрать списокPython

Программы на Python
Anonymous
IndexError при попытке перебрать список

Сообщение Anonymous »

Я только что закончил онлайн-курс Harvard CS50P и для своего первого проекта пытаюсь разработать программу, которая вычисляет значение y полиномиальных функций. Я знаю, что мой код, вероятно, ужасно оптимизирован и что существует библиотека, которая уже делает то, что я делаю, но на самом деле это не моя цель. Я пытаюсь сделать что-то, что работает, несмотря ни на что.

Код: Выделить всё

import math

equation = input("Equation: ").strip().lower().replace(" ", "")
value = input("Value of x: ")

chars = []
exponents = []
mults = []
sums = []
subs = []
divs = []
sqrts = []

result = 0

for char in equation:
if char == "x":
char = char.replace("x", value)
chars.append(char)
else:
chars.append(char)

for op in range(len(chars)):
if chars[op] == "^":
exponents.append(1)
elif chars[op] == "*":
mults.append(op)
elif chars[op] == "+":
sums.append(op)
elif chars[op] == "-":
subs.append(op)
elif chars[op] == "/":
divs.append(op)
elif chars[op] == "v":
sqrts.append(op)

for exponent in range(len(exponents)):
expResult = int(chars[exponents[exponent] - 1]) ** int(chars[exponents[exponent] + 1])
chars[exponents[exponent] - 1] = expResult
chars.remove(chars[exponents[exponent]])
chars.remove(chars[exponents[exponent]])
exponents.remove(1)
result += float(expResult)

for sqrt in range(len(sqrts)):
sqrtResult = int(chars[sqrts[sqrt] - 1]) * math.sqrt(int(chars[sqrts[sqrt] + 1]))
chars[sqrts[sqrt] - 1] = sqrtResult
chars.remove(chars[sqrts[sqrt]])
chars.remove(chars[sqrts[sqrt]])
result += float(sqrtResult)

for mult in range(len(mults)):
multResult = int(chars[mults[mult] - 1]) * int(chars[mults[mult] + 1])
chars[mults[mult] - 1] = multResult
chars.remove(chars[mults[mult]])
chars.remove(chars[mults[mult]])
result += float(multResult)

for div in range(len(divs)):
divResult = int(chars[mults[mult] - 1]) * int(chars[mults[mult] + 1])
chars[divs[div] - 1] = divResult
chars.remove(chars[divs[div]])
chars.remove(chars[divs[div]])
result += float(divResult)

print(result)
print(chars)
print(exponents)
Я все еще нахожусь на первых этапах его разработки. Однако всякий раз, когда я ввожу функцию с более чем одной операцией, я получаю сообщение IndexError: индекс списка вне диапазона.
Так, например:

Код: Выделить всё

Equation: x^3^3
Value of x: 2
Traceback (most recent call last):
File "/Users/vinisiqueira/graphingCalc/graphingCalc.py", line 38, in 
expResult = int(chars[exponents[exponent] - 1]) ** int(chars[exponents[exponent] + 1])
~~~~~~~~~^^^^^^^^^^
IndexError: list index out of range
Когда я изменяю циклы for на одноразовую итерацию, я получаю:

Код: Выделить всё

Equation: 2^3^2
Value of x: 2
8.0
[8, '^', '2']
[1]
Это означает, что первая операция работает, но почему-то не получается при повторном выполнении того же самого.
Мне очень жаль этот код, если он неясен, но любая помощь будет оценена по достоинству.
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/783 ... -over-list

Вернуться в «Python»