繁体   English   中英

random.randint() 调用 -1?

[英]random.randint() call with -1?

有人可以解释为什么rangerandom.randint(0, len(messages) - 1)具有在年底减1? 该列表有 9 个值:

import random

messages = ['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)

random.randint()的第二个值是inclusive 它将从10 个随机整数( 0123456789 )中选择一个数字,其中列表中只有 9 个索引。 len(messages)9 ,但没有messages[9]索引,因为 Python 索引从0开始。 相反,唯一有效的索引从08

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

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

list_select = random.choice(messages)

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

index_select = random.randrange(len(messages))

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

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

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

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) - 1 ,即 9 - 1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM