繁体   English   中英

我在这里的While循环怎么了?

[英]What am I doing wrong with the While Loop here?

我正在使用的While循环收到一个错误,提示“ IndexError:列表索引超出范围”。 请帮助。

from array import *

limit = 20
limitn = limit+1
p = 2
nums = range(p,limitn)
primes = []

while p < limitn+1: 
    for i in nums:
        if i == p:
           primes.append(i)
        if i%p == 0:
           nums.remove(i)
    p = nums[0]


print primes    

您的列表没有索引,因为在最后一次迭代中, nums的长度为0,即列表为空,并且您正在引用第一个元素。
因为您在for循环中, nums.remove(index)删除了索引,但不更新列表。
因此, nums仍然引用先前的nums并且其长度已更改。
因此,代替.remove()使用slice:

nums = nums[: nums.index(i)] + nums[nums.index(i) + 1 :]

slice运算符创建一个新的nums删除元素i
您的寻找素数的程序不是一个好方法

for i in range(p, limitn):
     for j in range(2, i):
          if i % j == 0:
                break
     else:
          primes.append(i)

上面的代码将为您提供范围内的素数。 如果有什么可以改善的地方请发表评论

使用nums.remove(i)nums将是[]
所以, IndexError: List index out of range是没有问题的

from array import *

limit = 20
limitn = limit+1
p = 2
nums = range(p,limitn)

primes = []

while p < limitn+1: 
    for i in nums:
        if i == p:
           primes.append(i)
        if i%p == 0:
           print(i)
           nums.remove(i)

    # Check nums array size
    if len(nums) == 0:
        break
    p = nums[0]


print primes    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM