【问题标题】:Why does it say IndexError: list index out of range?为什么会显示 IndexError: list index out of range?
【发布时间】:2022-11-28 05:48:38
【问题描述】:

我是一个蟒蛇新手。我正处于测试我的代码的阶段,但我很困惑为什么有时这行得通,有时却行不通。根据我的理解,random.randint(0,13) 这意味着从 0 到 12 的随机数,这是我的卡片列表的数量。

获取错误:

Traceback (most recent call last):
  File "main.py", line 72, in <module>
    generate_random_hand()
  File "main.py", line 32, in generate_random_hand
    computer_hand.append(cards[rand1])
IndexError: list index out of range

这是代码:

#Init
cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
computer_hand = []
player_hand = []
isContinue = True


#Generate first 2 cards of computer and player
def generate_random_hand():
  for _ in range(0,2):
    rand1 = random.randint(0,13)
    rand2 = random.randint(0,13)
    computer_hand.append(cards[rand1])
    player_hand.append(cards[rand2])

这是问题的屏幕截图: Image of ERROR

我希望每次运行都不会出错。

【问题讨论】:

标签: python


【解决方案1】:

看来您的假设不正确。

快速测试给了我以下输出:

>>> from random import randint
>>> randint(0,13)
3
>>> randint(0,13)
1
>>> randint(0,13)
10
>>> randint(0,13)
2
>>> randint(0,13)
12
>>> randint(0,13)
12
>>> randint(0,13)
3
>>> randint(0,13)
12
>>> randint(0,13)
6
>>> randint(0,13)
2
>>> randint(0,13)
13

因此,当您最终获得 13 时,异常会告诉您所提供的值不在您的卡片列表中的索引范围内:0-12

【讨论】:

  • 哦。我来自Angela Yu的python课程,它说不包括第二个参数。谢谢!
【解决方案2】:

random.randint(0,13) 从 0 到 13。

该数组仅从 0 到 12;

将 random.randint(0,13) 更改为:

random.randint(0, 12)

【讨论】:

    【解决方案3】:

    我想我看到了你的错误。该列表有 13 个项目,所以如果 randint 生成 13,而你使用 cards[13],它超出范围,因为索引从 0 开始。在这种情况下,你会做 cards[randint(0, 12)]。

    【讨论】:

      【解决方案4】:

      您的列表中有 12 个元素,您正在尝试检查第 13 个元素,因为它应该是 computer_hand.append(cards[rand1 - 2]) 因为元素的所有索引都从 0 开始。所以实际上有 0,1,2 ,3,4,5,6,7,8,9,10,11 个元素。因此,索引的最大值应该只有 11。

      【讨论】:

        猜你喜欢
        • 2015-02-11
        • 1970-01-01
        • 1970-01-01
        • 2019-02-23
        • 1970-01-01
        • 2023-03-27
        • 2019-04-15
        • 2020-10-16
        • 1970-01-01
        相关资源
        最近更新 更多