【问题标题】:Logical error for prime number generator using while loops alone仅使用 while 循环的素数生成器的逻辑错误
【发布时间】:2015-11-09 07:25:15
【问题描述】:

以下是生成素数的代码:

to_num=int(raw_input("Enter till where u wish to generate prime nos > "))

i=2
flag="prime"
j=2
while i <= to_num:

 while j<i:

  if i%j == 0:
   flag="nprime"
   break
  else:
   flag="prime"


 if flag=="prime":
  print "%d is  prime"%i


  j+=1
 i+=1

但是产生的结果与预期不符,例如:

Enter till where u wish to generate prime nos > 10
2 is  prime
3 is  prime
4 is  prime
5 is  prime
6 is  prime
7 is  prime
8 is  prime
9 is  prime
10 is  prime

能否请您指导我哪里出错了?

P.S:使用for循环得到想要的结果。

【问题讨论】:

  • 您的代码似乎运行良好:ideone.com/u1Ij7Q
  • 此代码产生正确的结果,而不是您发布的结果。
  • 哦!!!我的错...发布了错误的代码...我将编辑帖子,,,
  • @abhisheknair 如果您已经有了解决方案,为什么还要更改代码?
  • 你需要在外循环开始时重置j = 2

标签: python for-loop primes


【解决方案1】:

您的 for 循环如下所示:

for i in range(2, to_num+1):
    for j in range(2, i):
        …

但是你的 while 循环看起来像这样:

i = 2
j = 2
while i <= to_num:
    while j < i:
        …
        j += 1
    i += 1

所以你永远不会在循环完成后将j 重置回 2。您应该在外部循环的开头添加一个j = 2,以使 while 循环等效于 for 循环:

i = 2
while i <= to_num:
    j = 2
    while j < i:
        …
        j += 1
    i += 1

最后请注意,您希望在每次迭代中增加j。在您问题的代码中,您将j += 1 作为if flag=="prime": 的一部分,因此它只会增加j 的素数。相反,您需要将增量向上移动到 while 循环中:

i = 2
while i <= to_num:
    j = 2
    while j < i:
        # the prime check here
        j += 1

    if flag == "prime":
        print "%d is  prime" % i

    i += 1

我真的建议您使用比单个空格更大的缩进,以便自己查看这些问题。当所有的缩进都如此相似时,它们很难被发现。

【讨论】:

  • 我尝试按照解释在外循环的开头分配 j = 2。在这种情况下,执行不会超过“2 是素数”,即第一行。
  • 谢谢@poke。这就解决了疑惑!将记住缩进。
【解决方案2】:

你需要重置你的内部标志和计数器:

to_num=100

i=2
is_prime=False
j=2
while i <= to_num:
 is_prime=True // you need to reset your inner flags
 j=2 // set j to starting value
 while j<i:

  if i%j == 0:
   is_prime=False
   break

  j+=1

 if is_prime==True:
   print (i)

 i+=1

最好使用布尔标志,而不是字符串。它更具可读性,您无需为字符串烦恼。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2019-01-08
    • 2022-11-14
    相关资源
    最近更新 更多