这是一个无限循环吗?

时间:2014-03-25 15:06:06

标签: python loops

我正在尝试编写一个程序来挑选3到9范围内的素数。这是我的代码:

primes_list = []
number = 3
while number > 2 and number < 10:
    for n in range(2, number):
        if number % n == 0:
            break
        number += 1
    else:
        primes_list.append(number)
print primes_list

这似乎是一个无限循环,但这只是猜测,因为输出永远不会出现。如果是无限循环,为什么?

此外,我想知道是否有某种列表理解可以只挑选素数?也许列表理解是更有效的方法?只有我还没弄清楚如何过滤素数。

非常感谢任何帮助或评论。

2 个答案:

答案 0 :(得分:6)

while number > 2 and number < 10:
    for n in range(2, number):
        if number % n == 0:
            break
    else:
        primes_list.append(number)
    number += 1

>>> primes_list
[3, 5, 7]
>>> 

这可能是你想到的。

请注意,第一个循环内的数字+ = 1是错位的

答案 1 :(得分:1)

for n in range(2, number):
    if number % n == 0:
        break
    number += 1

由于休息,你永远不会到达

number += 1 

满足条件时。它将永远将数字附加到列表中。

尝试以下方面的内容:

primes_list = []
lower = 3
upper = 10
for number in range(lower, upper):
    if(isPrime(number)):
        primes_list.append(number)

print primes_list

#note this is not an efficient implementation
def isPrime(number):
    for n in range(2, number):
        if number % n == 0:
            return false
    return true