【问题标题】:"list index out of range" when using random to pick item使用随机选择项目时“列表索引超出范围”
【发布时间】:2019-12-17 19:04:34
【问题描述】:

我正在学习 python,我编写了一个程序来选择一个随机的办公室剧集来观看,我的程序有 75% 的时间可以正常工作,但另外 25% 的时候,它给了我错误:

列表索引超出范围。

我尝试弄乱选择剧集的行中的最小最大值

import random as r
seasons = [
          [1, 2, 3, 4, 5, 5, 6],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24],
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
          ]

def choose_ep():
    global seasons
    s = r.randint(1,10) # 1 - 10, not including 10 
    e = r.randint(min(seasons[s - 1]), max(seasons[s - 1]))
    print("Season: " + str(s) + ", Episode: " + str(e))

while True:
    choose_ep()
    if input() == "exit":
        break

我希望它给我一个随机季节的随机剧集。我不希望它给我一个像“第 1 季第 14 集”这样不存在的剧集

【问题讨论】:

  • r.randint(1, 10) 给出一个介于 1 和 10 之间的随机整数,这与给出 1 和 9 之间的范围的 range(1, 10) 相比可能会令人困惑。我注意到您的代码中的注释说您故意将最大值设置为 10,但您需要将其设置为 9。(我在 s= 行之后放置了一个 print(s) 以查看是否是这种情况。我可以忘记什么 randint也给。)
  • 我相信random.choice是一个更适合你使用的函数,那么你就不必处理索引了。

标签: python python-3.x


【解决方案1】:

https://docs.python.org/3/library/random.html#random.randint

random.randint(a, b)

返回一个随机整数 N,使得 a

所以 10 实际上包含在变量 s 的值中,因此您会得到错误。

【讨论】:

  • @t0asty 如果我的回答对您有所帮助,请考虑accepting
【解决方案2】:

不生成索引的替代解决方案:

import random as r

season_number, episode_list = r.choice(list(enumerate(seasons)))
season_number += 1
episode_number = r.choice(episode_list)

print(season_number, episode_number)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 2017-03-23
    • 2022-01-10
    相关资源
    最近更新 更多