作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当尝试使用埃拉托色尼筛法算法查找素数时,使用了以下代码。执行时给出索引错误。
我找不到索引超出范围的原因。我正在使用 Python 2.7
"""
This program will find all the prime numbers up to the entered number using Sieve of Eratosthenes Algorithm
"""
while True:
print "\n" * 3
list1 = []
final = []
max = raw_input("Enter number upto which you want to find prime numbers or enter 0 to exit :")
if max.isdigit():
d = int(max)
for i in range (2,d):
list1.append(i)
print list1
k = 0
x = 0
while True:
temp = list1[k]
final.append(temp)
length = len(list1)
if (k+1) != length:
for x in range(k+1,length):
temp1 = list1[x]
temp2 = final[k]
if temp1 % temp2 == 0:
del list1[x]
k += 1
else:
break
print(final)
else:
print ("Invalid Input...!!")
continue
最佳答案
您要从列表中删除元素,这会使列表变短(因此,最初可以检查的元素将超出范围。也就是说,一旦删除 4,您会发现错误寻找第 5 个元素。验证这一点的一种方法是抛出一个
import pdb; pdb.set_trace()
在您的代码中,每次都打印出 list1。您可以使用 c
前进到下一个循环迭代。
解决方案是将 list1 复制到名为 primes
的列表中开始,然后从 primes
中删除元素而不是 list1
.
关于python - 在 Python 中使用埃拉托色尼筛法时出现索引错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49174658/
我是一名优秀的程序员,十分优秀!