Python账单轮盘游戏:为何randint需用len(names)-1而非len(names)
为什么randint要使用number-1而不是number?
核心原因和两个关键规则直接相关:
Python列表采用0起始索引
你的names列表里,第一个元素的索引是0,最后一个元素的索引是len(names)-1。比如列表有3个人,有效索引就是0、1、2,不存在索引3的元素。random.randint(a, b)是闭区间取值
这个函数生成的随机数会包含a和b本身。如果写randint(0, number),当number等于列表长度时,可能会生成等于number的数值——而这个数值超出了列表的有效索引范围,运行时会直接抛出IndexError: list index out of range的错误。
举个实际例子:
假设输入的名字是"Alice, Bob, Charlie",names列表长度number=3:
- 用
randint(0, 2):生成的随机数是0、1、2,对应三个名字,能正常取值。 - 用
randint(0, 3):可能生成3,此时names[3]会报错,因为列表里没有这个索引的元素。
另外提个小技巧:你可以直接用random.choice(names)代替手动生成索引,它会直接从列表里随机挑选一个元素,代码更简洁还不会踩索引的坑。
内容的提问来源于stack exchange,提问作者Mathew Still
相关产品推荐
相关产品推荐

