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
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 に答える
0

リストの最初の最初の長さまでの範囲を初期化するためです。しかし、リストするいくつかのインデックスを削除すると、小さくなります...そして for はまだ初期の長さまで実行されます

ところで...あなたのリストは二重要素で構成されていますか? そうしないと、部門での精度に問題が生じる可能性があります

于 2013-08-14T18:38:41.000 に答える