【问题标题】:IndexError: list assignment index out of range Python 3IndexError:列表分配索引超出范围 Python 3
【发布时间】:2018-03-19 18:18:48
【问题描述】:

有人知道为什么我在这段代码中会出现 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

也许我对列表/数组的声明有误?...

【问题讨论】:

    标签: python arrays python-3.x pycharm index-error


    【解决方案1】:

    这里有许多误解,我认为只解决你特别询问的问题不会有适当的帮助,所以我会做更多的事情。

    首先,列表。您正在创建空列表 gegner 和 gegnerhp;看起来您随后想要将一些项目添加到这些列表中,并且您正在尝试通过指定索引来实现。在python中,列表索引从0开始,而不是1。

    即在以下列表中:

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

    索引“1”是列表中的第二个项。

    在您的代码中,您的 range(1,anzhalgegner) 将从 1 开始并递增到您将 anzhalgegner 设置为的任何值。在您的第一次迭代中,您的代码尝试在位置 1 处为列表 gegner 分配一个值 - 但是,该列表在位置 0 处没有任何内容,这意味着它无法为位置 1 分配任何内容。

    让您入门的最简单更改是从 0 开始。

    一旦您尝试过,我还建议您不要手动指定列表中的哪个位置来放置项目 (list[index] = value),因为您所做的只是将内容添加到列表,考虑使用 append 方法。然后它看起来像这样:

    if random == 1:
        gegner.append("goblin")
        gegnerhp.append(randint(10,50))
    

    【讨论】:

      【解决方案2】:

      您会收到 IndexError,因为列表为空。

      您无法通过访问无效索引来创建列表项。使用.append istead。

      if random == 1:
          gegner.append("goblin")
          gegnerhp.append(randint(10, 50))
      

      等等

      【讨论】:

      • ty,但是现在如果我想显示它,我还必须使用索引:print("* {0} with {1} HP".format(gegner[i-1]),gegnerhp[i-1]) 然后我得到错误:print("* {0} with {1} HP".format(gegner[i-1]),gegnerhp[i-1]) IndexError: tuple index out of range
      • 你有一个不应该的右括号:改用print("* {0} with {1} HP".format(gegner[i-1], gegnerhp[i-1]))
      【解决方案3】:

      您的列表gegnergegnerhp 是空的,因此访问它们会给您一个错误。

      【讨论】:

      • 他们必须是满的?但是如果我需要像在这种情况下那样清空它们,我该怎么办?
      • @zwerg4 使用lst.append(element) 将项目添加到list 的末尾
      猜你喜欢
      • 2018-10-21
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-27
      • 2020-09-17
      • 1970-01-01
      相关资源
      最近更新 更多