我想编写一个解决数学任务的函数。任务被赋予作为列表的函数(例如[3,'+',4,'*',15]),并且应该通过考虑乘法和除法来解决。
def getresult(TaskAsList):
"""Ermitle Ergebnis einer Aufgabe – Aufgabe muss als Liste zugeführt werden"""
while len(TaskAsList)>1:
for i in range(len(TaskAsList)-1):
if TaskAsList[i] == '*':
TaskAsList[i-1] = TaskAsList[i-1]*TaskAsList[i+1]
del(TaskAsList[i+1])
del(TaskAsList[i])
elif TaskAsList[i] == ':':
TaskAsList[i-1] = TaskAsList[i-1]/TaskAsList[i+1]
print(i)
del(TaskAsList[i+1])
del(TaskAsList[i])
for i in range(len(TaskAsList)-1):
if TaskAsList[i] == '+':
TaskAsList[i-1] = TaskAsList[i-1]+TaskAsList[i+1]
del(TaskAsList[i+1])
del(TaskAsList[i])
elif TaskAsList[i] == '-':
TaskAsList[i-1] = TaskAsList[i-1]-TaskAsList[i+1]
del(TaskAsList[i+1])
del(TaskAsList[i])
return TaskAsList[0]
通过尝试此操作,将引发IndexError。
Traceback (most recent call last): File "<stdin>", line 1, in
<module> File "./task_generator.py", line 30, in getresult
del(TaskAsList[i]) IndexError: list index out of range
感谢您的帮助!
答案 0 :(得分:1)
将范围设置为迭代后,您将从列表中删除元素,并更改其大小。该程序试图从一开始就迭代尽可能多的项目,但不再有那么多项目了。
(del
不是函数。不要在目标周围加上括号。)
答案 1 :(得分:0)
因为您初始化了一个运行到列表第一个初始长度的范围。但是如果删除了一些索引,那么列表会变得更小......并且for仍然会运行到初始长度
顺便说一句......你的列表是否包含双重元素?否则你可能会在你的准确性方面遇到麻烦
答案 2 :(得分:0)
def getresult(TaskAsList):
while len(TaskAsList)>1:
while ('*' in TaskAsList) or (':' in TaskAsList):
for i in range(len(TaskAsList)-1):
if TaskAsList[i] == '*':
TaskAsList[i-1] = TaskAsList[i-1]*TaskAsList[i+1]
del(TaskAsList[i+1])
del(TaskAsList[i])
break
elif TaskAsList[i] == ':':
TaskAsList[i-1] = TaskAsList[i-1]/TaskAsList[i+1]
print(i)
del(TaskAsList[i+1])
del(TaskAsList[i])
break
for i in range(len(TaskAsList)-1):
if TaskAsList[i] == '+':
TaskAsList[i-1] = TaskAsList[i-1]+TaskAsList[i+1]
del(TaskAsList[i+1])
del(TaskAsList[i])
break
elif TaskAsList[i] == '-':
TaskAsList[i-1] = TaskAsList[i-1]-TaskAsList[i+1]
del(TaskAsList[i+1])
del(TaskAsList[i])
break
return TaskAsList[0]