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
可以避免像某些其他解决方案那样使用标志。