【问题标题】:Unable to find the mistake in prime number code in python无法在python中的素数代码中找到错误
【发布时间】:2013-11-27 17:44:15
【问题描述】:
n=5;count=2;i=3;j=2;
while (count <= n):
    for j in range (2,i):
            if(i%j == 0):           
                break
    if(j==i):
        print i
        count = count +1
    i = i+1

我试图找到前 n 个素数,但不知何故,这段代码似乎无法编译。 程序卡在 for 循环。 我尝试使用相同的逻辑在 C 中编写代码,它似乎工作正常,但由于我需要大量支持,python 似乎是一个明显的选择,因此想在 python 中运行。 任何帮助都会很棒。

【问题讨论】:

  • 缩进在 Python 中很重要——这实际上应该是你了解该语言的第一件事。
  • 使用有意义的变量名将使您的代码更易于阅读和理解
  • 样式 nit:去掉 whileif 语句中的括号。括号是明显的 C 主义。

标签: python python-3.x primes


【解决方案1】:

range(a, b)a 变为 b-1

n=5;count=2;i=3;j=2;
while (count <= n):
    for j in range (2,i):
        if(i%j == 0):           
            break
    if(j==i-1):
        print i
        count = count +1
    i = i+1

我打赌你有

 int j;
 for(j = 2; j < i; j++) {
 }

因此,在质数循环结束时,j 将变为 i

Python 在使用range 时不会超出限制。

【讨论】:

  • 好的catch,需要调整check,不是范围
  • +1 出色的收获。但是请注意,如果您在此处使用else:,则完全消除了检查。这避免了重复ij 之间的关系,对于DRYer 代码。
  • 我没有更改 if 语句,而是更改了 for 循环条件,程序运行得很好。感谢您的帮助
  • @CDspace 您可以检查范围并保持测试不变,就像您在答案中建议的那样,顺便说一句,这很好; OP实际上在上面的评论中说他们确实做到了,而且效果很好。 :)
【解决方案2】:

您的问题在这里:

for j in range (2,i):

这会检查 j=2,3,4....i-1。因此,您的代码永远不会运行:

if(j==i):
        print i
        count = count +1

所以计数永远不会改变。因此你得到一个无限的while循环。将您的支票更改为

if(j==i-1):
        print i
        count = count +1

【讨论】:

  • range(2, i+1) 不会生成素数,因为i 总是除以i
  • @PaulDraper 错误。 range(2, i+1) 将起作用,因为 break 将始终为 j==i 触发素数,但这并不重要,因为随后 if (j==i): 成功。如果那里有else:,但那里没有else:,这将不起作用,这是一个测试。此外,the OP says 他们“更改了 for 循环条件,程序运行良好。”。
【解决方案3】:

在 Python 3 中,它是 print(),而不是 print。当您更改此行时,代码将编译:

        print(i)

你似乎也有一个无限循环,但我会让你调试它。

【讨论】:

  • 嗯...也许他正在使用 Python 2。因为他没有提到这是一个问题。
  • 是的,但他确实标记了 Python 3,这是 Python 3 中唯一的编译错误(这是他声称的问题所在)。
【解决方案4】:

这对于循环后 else: 关键字的其他晦涩语法很有用。正如其他人所评论的那样,您成功完成 for 循环的测试差了一个。

请尝试使用else 来测试是否成功完成:

for j in range (2,i):
        if(i%j == 0):
            break
else:
    print i
    count = count +1

【讨论】:

  • 如果 Python 有什么明显不同的地方,它 for ... else 的情况。它实际上对你大喊:“Python”; IOW 这是一次难忘的经历。所以,“晦涩”并不是对它的感觉。 :)(只是一个旁注):)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-02
  • 2021-05-18
  • 1970-01-01
  • 2017-12-25
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多