0

我想编写一个解决数学任务的函数。任务以列表形式分配给函数(例如 [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

谢谢您的帮助!

4

3 回答 3

1

设置要迭代的范围后,从列表中删除元素,更改其大小。该程序尝试迭代与一开始一样多的项目,但不再有那么多项目。

(del不是函数。不要在目标周围加上括号。)

于 2013-08-14T18:34:35.943 回答
0

因为您将一个范围初始化为列表的第一个初始长度。但是如果你删除一些你列出的索引会变小......并且 for 仍然运行到初始长度

顺便说一句……你的清单是由双重元素组成的吗?否则你可能会在部门的准确性方面遇到问题

于 2013-08-14T18:38:41.000 回答
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]
于 2013-08-14T18:47:02.143 回答