【问题标题】:Finding the prime numbers in Python 3.4.1在 Python 3.4.1 中查找素数
【发布时间】:2014-11-07 08:14:25
【问题描述】:
for n in range(2,10):
    for x in range(2,n):
        if n%x==0:
            print(n, 'equals to', x, '*', n//x)
            break
        else:
            print(n, 'is a prime number')

以下是我收到的输出。

3 is a prime number
4 equals to 2 * 2
5 is a prime number
5 is a prime number
5 is a prime number
6 equals to 2 * 3
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
8 equals to 2 * 4
9 is a prime number
9 equals to 3 * 3

但是,它正在重复这些值。而且9不是素数。 请帮我纠正语法。

以下是链接: https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops

【问题讨论】:

标签: python python-3.x


【解决方案1】:

如你所愿,你的程序会检查n 是否可以被一个因子整除。如果是,那太好了,您正确打印它是复合的。如果不是,您立即打印它是一个质数。问题是在你检查了其他因素之前你不知道这一点。仅仅因为 9 不能被 2 整除并不意味着它是素数。您还必须检查 3。

这意味着稍微改变你的逻辑。在声明 n 为素数之前,您需要检查所有可能的因素。一种方法是使用额外的布尔变量。

for n in range(2,10):
    is_prime = True

    for x in range(2,n):
        if n%x==0:
            print(n, 'equals to', x, '*', n//x)
            is_prime = False
            break

    if is_prime:
        print(n, 'is a prime number')

请注意,“是素数”打印输出不再在内循环内,而是在外循环。

另一种方法是使用一个很酷的 Python 技巧并将else 子句添加到内部循环。 else 子句仅在循环退出而没有遇到break 语句时才会发生。

for n in range(2,10):
    for x in range(2,n):
        if n%x==0:
            print(n, 'equals to', x, '*', n//x)
            break
    else:
        print(n, 'is a prime number')

请注意,将else 子句附加到循环上的想法是 Python 主义。它在 C 或 Java 等其他语言中不存在。因此,虽然简洁,但理解基于布尔变量的解决方案也很好。该技术适用于任何语言。

【讨论】:

  • 它的缩进问题...感谢整理。
【解决方案2】:

根据您提供的链接,它在示例代码下方有一条声明

是的,这是正确的代码。仔细看:else 子句属于 for 循环,而不是 if 语句。

因此,您应该打算将else 子句针对内部for 而不是if

【讨论】:

    【解决方案3】:

    我很难理解到底发生了什么。找到这个答案https://stackoverflow.com/a/16451661/5203300

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多