【问题标题】:While looping issue in Python 3.5.1Python 3.5.1 中的循环问题
【发布时间】:2016-11-07 14:21:12
【问题描述】:

使用 Python 3.5.1。

我正在尝试构建一个 while 循环,它会迭代一个函数,直到将一定数量的素数附加到一个列表中。我之前写过一个函数,它接受一个数字,评估它是否是一个素数,如果它是一个素数,就将它添加到一个列表中:

def primelister(n):
    if n < 10:
            return
    else:
            l1=[]
            l2=[]
            ts1=np.arange(1,(n+1),1)
            for i in ts1:
                    if n%i==0:
                            l1.append(i)
                            continue
                    else:
                            continue
            if len(l1) < 3:
                    l2.append(i)
                    print(l2)

这个函数工作正常,似乎给出了正确的结果。我想在 while 循环中实现该函数,其中 n 的值从 10 开始,并在每个循环中递增 1。循环将一直持续到达到一定数量的素数(即在列出 1000 个素数时停止)。

这是我迄今为止尝试过的:

    n=10
    l1=[]
    l2=[]

    while numberofprimes < 100:
           ts1=np.arange(1,(n+1),1)
           for i in ts1:
                  if n%i==0:
                         l1.append(i)
                         continue
           if len(l1) < 3:
                  l2.append(i)
           numofprimes=len(l2)
           print("Number of primes so far:", numberofprimes)
           n = n + 1

循环显然被打破了。输出始终只有 1,循环似乎是无限的。我们将不胜感激。

【问题讨论】:

  • 每次迭代都需要重置l1。将l1=[] 移动到循环中。
  • 如果您希望看到解决方案的真正快速和智能实施,请查看link

标签: python


【解决方案1】:

问题是您没有在每次 while 循环迭代后重置 l1。此外,您使用 numberofprimes 作为您的 while 循环条件,同时将质数值分配给 numofprimes

import numpy as NP
n=10
l2=[]
numberofprimes = 0
while numberofprimes < 100:
    l1 = []
    ts1=NP.arange(1,(n+1),1)
    for i in ts1:
       if n%i==0:
            l1.append(i)
    if len(l1) < 3:
       l2.append(i)
    numberofprimes=len(l2)
    print("Number of primes so far:", numberofprimes)
    n = n + 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多