Python 检测素数——两者都是“;如果;及;否则";分支在一个循环中运行,但只有一个应该运行

Python 检测素数——两者都是“;如果;及;否则";分支在一个循环中运行,但只有一个应该运行,python,if-statement,while-loop,Python,If Statement,While Loop,如果我输入偶数,这段代码运行正常,但当我输入奇数或素数时,这段代码表现异常。它能准确地识别复合材料。不考虑素数或复合奇数,它会打印素数多次(有时两次或三次)。 输出如下所示: 请输入一个数字以检查它是否为素数53 首要的 首要的 首要的 请输入一个数字以检查它是否为素数36 36是偶数 请输入一个数字以检查它是否为素数21 综合指数21除以3。 请输入一个数字以检查它是否为素数23 首要的 请输入一个数字以检查它是否为素数 首要的 首要的 请输入一个数字以检查它是否为素数 我想我已经做了一些缩

如果我输入偶数,这段代码运行正常,但当我输入奇数或素数时,这段代码表现异常。它能准确地识别复合材料。不考虑素数或复合奇数,它会打印素数多次(有时两次或三次)。 输出如下所示:

请输入一个数字以检查它是否为素数53
首要的
首要的
首要的
请输入一个数字以检查它是否为素数36
36是偶数
请输入一个数字以检查它是否为素数21
综合指数21除以3。
请输入一个数字以检查它是否为素数23
首要的
请输入一个数字以检查它是否为素数
首要的
首要的
请输入一个数字以检查它是否为素数
我想我已经做了一些缩进错误或实现了while循环错误。 请帮忙

这个问题不仅仅是关于素性测试的算法,而是解决了一个实现问题。

只要当前i不等于n,就打印“PRIME”,但如果没有i除以n,就应该只输出“PRIME”。您可以这样做:

import math
while True:
 n=(raw_input("Please enter a number to check if it is prime or not " ))
 if n == "gate":
    exit()
 n=int(n)
 x=int( math.sqrt(n))
 if n%2==0:
    print n , "is an even number"
 else:
    for i in range(3,x+1,2):
        if n%i==0 :
           print " Composite",n, "div by" ,i ,"."
        else:
           print "PRIME"
import math
while True:
 n=(raw_input("Please enter a number to check if it is prime or not " ))
 if n == "gate":
    exit()
 n=int(n)
 x=int( math.sqrt(n))
 if n%2==0:
    print n , "is an even number"
 else:
    prime = True
    for i in range(3,x+1,2):
        if n%i==0 :
           print " Composite",n, "div by" ,i ,"."
           prime = False
    if prime:
        print "PRIME"

当找到一个因子时,您需要退出循环,并且只有在测试了所有因子之后才打印出该数字为素数。因此,您的循环应该更像这样:

import math
while True:
 n=(raw_input("Please enter a number to check if it is prime or not " ))
 if n == "gate":
    exit()
 n=int(n)
 x=int( math.sqrt(n))
 if n%2==0:
    print n , "is an even number"
 else:
    for i in range(3,x+1,2):
        if n%i==0 :
           print " Composite",n, "div by" ,i ,"."
        else:
           print "PRIME"
import math
while True:
 n=(raw_input("Please enter a number to check if it is prime or not " ))
 if n == "gate":
    exit()
 n=int(n)
 x=int( math.sqrt(n))
 if n%2==0:
    print n , "is an even number"
 else:
    prime = True
    for i in range(3,x+1,2):
        if n%i==0 :
           print " Composite",n, "div by" ,i ,"."
           prime = False
    if prime:
        print "PRIME"

请注意,
else
for
对齐,而不是
if

请参见非常感谢。它解决了我的问题。谢谢你的帮助。你的代码完美地完成了任务。但是,你能解释一下,还有什么是假设吗。在前面的else下,它似乎是一个没有if的else。正如注释中所指出的,只有当我们没有跳出
for
循环时,才会执行
else
else
for
一起使用,而不是
if
。。使用
for
/
else
可以避免像某些其他解决方案那样使用标志。