首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么列表索引在使用random模块时会超出范围?

为什么列表索引在使用random模块时会超出范围?
EN

Stack Overflow用户
提问于 2016-10-15 23:36:12
回答 2查看 145关注 0票数 0

我正在构建一个聊天机器人,我可以让它随机回答我的问题。我将所有的回复添加到一个列表中,每当我问候它时,它都会随机给我一个答案。这很好,但是有时候,程序会抛出一个异常-- IndexError: list index out of range。我不明白为什么列表索引会超出范围。这个列表有6个项目,通过使用random.randint(0,len(slist)),我能够得到一个随机的响应。

我已经使用异常处理来解决这个问题。但是,我想知道为什么它会产生错误。

下面是没有异常处理的代码:

代码语言:javascript
复制
if self.Has_user_greeted == False:
    self.AI_Greet()
 else:
    # goes out of range here
    self.AI_respond = random.randint(0,len(self.AI_Greeted))
    print(self.AI_Greeted[self.AI_respond])
EN

回答 2

Stack Overflow用户

发布于 2016-10-15 23:39:47

randint的行为与Python的其余部分不同(由于与其他计算机语言相关的历史原因)。特别是,与Python的列表索引和len()不同,randint()确实包含了上限。

所以使用randint(0,len(self.AI_Greeted) - 1)

票数 2
EN

Stack Overflow用户

发布于 2016-10-15 23:38:12

这是因为列表索引从0开始,randint将在您指定的inclusively上限范围内选择一个数字。观察以下示例:

代码语言:javascript
复制
>>> a = [1,2,3]
>>> len(a)
3

因此,现在尝试获取索引3处的值

代码语言:javascript
复制
>>> a[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

因为最高的索引实际上是2

你想在你的例子中做的就是简单的-1长度:

代码语言:javascript
复制
random.randint(0,len(self.AI_Greeted) - 1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40060952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档