为了账号安全,请及时绑定邮箱和手机立即绑定

random.randint() 调用 -1?

random.randint() 调用 -1?

守着星空守着你 2022-01-18 17:01:00
有人可以解释为什么rangeinrandom.randint(0, len(messages) - 1)的末尾有负 1 吗?该列表有 9 个值:import randommessages = ['It is certain',            'It is decidedly so',            'Yes definitely',            'Reply hazy try again',            'Ask again later',            'Concentrate and ask again',            'My reply is no',            'Outlook not so good',            'Very doubtful']select_number = random.randint(0, len(messages) - 1)list_select  = messages[select_number]print(list_select)
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

random.randint()的第二个值是包容性的。它将从10 个随机整数(0123456、和)中选择一个数字7,其中列表中只有 9 个索引。是,但没有索引,因为 Python 索引从. 相反,唯一有效的索引从到。89len(messages)9messages[9]008

因此,通过使用random.randint(0, len(messages) - 1),该功能仅限于为messages列表选择有效索引。

代码应该改为使用random.choice(),它从列表中选择一个随机元素:

list_select = random.choice(messages)

在其他情况下,random.randrange()也可能是一个选项,因为它不包括可能值中的端点,类似于 Python 索引、切片和range()

index_select = random.randrange(len(messages))


查看完整回答
反对 回复 2022-01-18
?
慕村9548890

TA贡献1884条经验 获得超4个赞

random.randint(a, b) 返回一个随机整数 N,使得 a <= N <= b。

len(messages) - 1有点棘手,因为您的列表范围确实是 9,但是您必须记住计数是从 0 而不是 1 开始的。所以在您的情况下len(messages)将返回 9 但第一个元素在messages[0]

这意味着在您的情况下,select_number = random.randint(0, len(messages) - 1)将给出从 0 到len(messages) - 19 - 1 的数字。


查看完整回答
反对 回复 2022-01-18
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

这是因为random.randint随机选择列表的索引,从 0 到 8,并选择一条消息。
现在,列表的索引从0len(messages)-1=8
根据文档:https ://docs.python.org/3/library/random.html#random.randint

随机.randint(a, b) 。返回一个随机整数 N,使得 a <= N <= b。randrange(a, b+1) 的别名。

这意味着选择 0 到 8 之间的整数,这是列表的有效索引,如果我们改为 put len(messages),索引 9 也会被选择,这对于 Python 中的列表来说是无效的索引,因为 Python 列表是0-indexed


查看完整回答
反对 回复 2022-01-18
  • 3 回答
  • 0 关注
  • 260 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信