2014-03-25 56 views
0

我想写挑选出质数的范围为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 

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

另外我想知道是否有某种列表理解只能挑出素数?也许列表解析是更有效的方法?只有我没有弄清楚如何过滤素数。

任何帮助或评论深表感谢。

+1

您的压痕看起来'if'和'else'之间的错。他们应该处于同一水平。编辑:忽视此评论。我立场纠正。 – Gareth

+0

是的,你'number + = 1'是错位的。试着看看会发生什么。 – fredtantini

+1

@Gareth'for'循环可以采用'else'子句,如果循环提前退出(例如,使用'break',而不是用尽可迭代),则执行'else'子句。 – chepner

回答

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的第一循环中是没有道理的

+0

'number> 2'条件根本不需要。 –

+0

@JoeFrambach当然。我刚刚编辑了数字+ = 1部分;-) – Ant

+0

@Ant,所以基本上break语句退出for循环,但仍然执行数字+ = 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