【发布时间】:2020-05-07 15:34:53
【问题描述】:
我编写了一个程序,应该打印出从 0 到 100 的所有合数,但我不断收到错误“列表索引超出范围”
我能做些什么来解决它?
def isPrime(x):
if x==0:
return False
if x==1 or x==2:
return True
for i in range(2, x):
if x%i==0:
return False
break
elif x%i==1:
return True
else:
print("error")
i=0
num = list(range(100))
while i<100:
if isPrime(num[i]==True): #I get the error here
del (num[i])
i += 1
else:
i += 1
print(num)
【问题讨论】:
-
1不是质数。最小的素数是2。更多x==1测试到前一个案例。 -
您正在使用
del (num[i])间歇性地从列表中删除元素,因此大小将不再是100。 -
您应该在尝试使用之前测试您的
isPrime函数,它目前已损坏。因为它会为任何奇数返回True。 -
这是错误的:
if isPrime(num[i]==True):您将bool作为参数传递给isPrime,这显然不会满足您的要求。您可能打算拥有if isPrime(num[i])==True:,但这是不好的形式。只需使用if isPrime(num[i]):它已经是bool。您无需通过将其与True进行比较来仔细检查。