5

このコードで IndexError が発生する理由を誰かが考えていますか?

            global gegner
            global gegnerhp
            gegner = []
            gegberhp = []



            for i in range(1,anzahlgegner):
                random = randint(1,5)
                if random == 1:
                    gegner[i] = "goblin"
                    gegnerhp[i] = randint(10,50)
                elif random == 2:
                    gegner[i] = "ghost"
                    gegnerhp[i] = randint(10,50)
                elif random == 3:
                    gegner[i] = "hound"
                    gegnerhp[i] = randint(10,50)
                elif random == 4:
                    gegner[i] = "wolf"                        #LINE 147
                    gegnerhp[i] = randint(10,50)
                elif random == 5:
                    gegner[i] = "goblin"
                    gegnerhp[i] = randint(10, 50)
                print("* {0} with {1} HP".format(gegner[i]),gegnerhp[i])

たとえば、ランダムが 4 の場合、次のエラーが発生します。

  File "C:/Users/Fabio/PycharmProjects/test\dungeon.py", line 147, in run
gegner[i] = "wolf"
  IndexError: list assignment index out of range

リスト/配列の宣言が間違っているのでしょうか...

4

3 に答える 3

3

ここには多くの誤解があり、あなたが具体的に尋ねたものだけに対処することは適切に役立つとは思わないので、それ以上のことをするつもりです.

まずはリスト。空のリスト gegner と gegnerhp を作成しています。次に、それらのリストにいくつかのアイテムを追加したいようで、インデックスを指定してそれを実行しようとしています。Python では、リストのインデックスは 1 ではなく 0 から始まります。

つまり、次のリストにあります。

>>> gegner = ["wolf", "hound", "goblin"]
>>> print(gegner[0])
wolf
>>> print(gegner[1])
hound

インデックス '1' は、リストの2 番目の項目です。

コードでは、range(1,anzhalgegner) は 1 から始まり、anzhalgegner を設定した値まで増加します。最初の繰り返しで、コードはリスト gegner の位置 1 に値を割り当てようとしますが、リストの位置 0 には何もありません。つまり、位置 1 には何も割り当てることができません。

開始するための最も簡単な変更は、範囲を 0 から開始することです。

試してみたら、リスト内のどの位置にアイテムを配置するか (list[index] = value) を手動で指定する代わりに、リストの最後に何かを追加するだけなので、appendメソッドの使用を検討してください。次に、次のようになります。

if random == 1:
    gegner.append("goblin")
    gegnerhp.append(randint(10,50))
于 2017-10-08T13:06:36.113 に答える