我知道这个问题已被回答了很多次,但我无法弄清楚我的问题在哪里。这是我的代码:
from random import*
def VerificationLongue():
x=randint(0,1000)
liste=CreerListe()
Check=0
i=0
while i<=len(liste):
if x==liste[i]:
Check=Check+1
i=i+1
print("X est dans la liste",Check," fois")
def CreerListe():
ListeAleatoire=[]
for i in range (0,100):
valeur=randint(0,1000)
ListeAleatoire.append(valeur)
return (ListeAleatoire)
VerificationLongue()
这是一个简单的算法,用于查找数字是否在随机数列表中。我知道有&#39;计数&#39;或&#39;在&#39;但这是针对学校的,他们不希望我们使用它们。所以我得到了错误:
line 11, in VerificationLongue
if x==liste[i]:
IndexError: list index out of range
我不知道为什么会出现此错误,因为它已初始化为0。
答案 0 :(得分:3)
您已获得i<=len(liste)
,但您的列表的最后一个元素将出现在索引len(liste)-1
,这意味着您将获得IndexError
。
您可以将其替换为i < len(liste)
。
答案 1 :(得分:0)
下面:
while i<=len(liste):
i
可以等于len(liste)
。它不应该。您必须使用i<len(liste)
:
>>> l = range(5)
>>> l
[0, 1, 2, 3, 4]
>>> len(l)
5
>>> l[5]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> l[4]
4
旁注:你可以使用理解来做你的while循环:
>>> liste = [randrange(10) for _ in xrange(20)]
>>> liste
[4, 4, 0, 7, 6, 6, 2, 9, 8, 1, 4, 7, 2, 4, 1, 4, 7, 4, 0, 2]
>>> x=randint(0,10)
>>> x
4
>>> sum(x == i for i in liste)
6
但是列表也有count
方法:
>>> liste.count(x)
6
答案 2 :(得分:0)
您需要做的只是循环中的print i
,并且您可以轻松了解其发生的原因。
您的循环应该是i < len(liste)
而不是<=
。列表从零开始索引,因此如果您有100个项目,则编号为0-99。通过提升<=
,您将从0到100,而liste[100]
不存在。