2017-06-01 88 views
1

我已经写了一个python代码来找到2到30之间的素数。但是我的代码没有对2和3进行求值。任何人都可以告诉我这段代码有什么问题吗?Python中使用for循环和中断的素数

for i in range(2, 30): 
    for j in range(2, i-1): 
     if ((i % j) == 0): 
      print(i, "is not a prime number") 
      break 
     else: 
      print(i, "is a prime number") 
     break 
+0

如果我是2或3,你将不会进入下一个循环 – Morb

回答

0

它不工作,因为嵌套for声明:

for i in range(2, 30): 
    for j in range(2, i-1): 

用途range(2, i-1)直到i4range无返回值:

i = 2 --> range(2, 1) # No value 
i = 3 --> range(2, 2) # No value 
i = 4 --> range(2, 3) # 2 

这是因为range函数将值从first parameter(包括)返回到second parameter(不含税)。

1
for i in range(2, 30): 
    prime = True 
    for j in range(2, i-1): 
     if ((i % j) == 0): 
      prime = False 
      # print(i, "is not a prime number") 
      break 
     # else: 
     # print(i, "is a prime number") 
     # break 
    if prime: 
     print(i, "is a prime number") 
    else : 
     print(i, "is not a prime number") 

有很多在线链接来解决素数问题。为了提高自己搜索自己和理解。希望thisthis链接帮助你很多。快乐编码

2

您的代码的逻辑错误。 else子句应该附加到内部循环中,所以只有在循环耗尽而没有找到除数时才会执行。

for i in range(2, 30): 
    for j in range(2, i-1): 
     if ((i % j) == 0): 
      print(i, "is not a prime number") 
      break 
    else: 
     print(i, "is a prime number") 

另请注意,由于上边界不包含在范围内,所以外环只能运行到29。内部循环不包括i - 1,但这是非常好的,因为任何不平凡的除数都小于i - 1

内部循环根本不会输入2和3,因为在这些情况下范围将为空。这也很好,因为else子句将立即输入。

+0

好的。得到它了!我认为别的只能附在if语句上。谢谢。 – Laxman

+0

@Laxman请参阅https://stackoverflow.com/q/9979970/279627以获取'for'循环上'else'子句的更多信息。 –