Python 素性测试算法失败
我创建了一个简单的素性测试算法,但对于像15这样的数字它失败了。为什么?Python 素性测试算法失败,python,algorithm,numbers,primes,primality-test,Python,Algorithm,Numbers,Primes,Primality Test,我创建了一个简单的素性测试算法,但对于像15这样的数字它失败了。为什么? number = int(input("Test if Prime: ")) print ("Is " + str(number) + " Prime?: ") for i in range (2, number): if number % i == 0: print ("No") break else: print ("Yes") 我尝试了带有其他变体的elif语句,但仍然不起
number = int(input("Test if Prime: "))
print ("Is " + str(number) + " Prime?: ")
for i in range (2, number):
if number % i == 0:
print ("No")
break
else:
print ("Yes")
我尝试了带有其他变体的elif语句,但仍然不起作用:
number = int(input("Test if Prime: "))
print ("Is " + str(number) + " Prime?: ")
for i in range (2, number):
if number % i == 0:
break
elif number % i != 0:
print ("Yes")
感谢您的帮助 循环中有else条件。在任何时间点,它只会检查一个值 修改for循环以打印出它正在检查的号码: 范围(2,编号)内的i的
:
印刷品(一)
如果编号%i==0:
打印(“否”)
打破
其他:
打印(“是”)
打印输出(对于编号=15):
你知道,如果它打印出“否”数字-1次,它就会起作用
要稍微修改您所做的操作,我们可以将其更改为:
flag=False
对于范围内的i(2,编号):
如果编号%i==0:
打印(“否”)
flag=True
打破
如果(!标志)
打印(“是”)
所有这一切只是将print语句推到循环之外(要使一个数字成为素数,它必须不可被所有小于它的数字整除)。该标志确保只打印True或False(您不想同时打印两者)以下是我根据您的示例所做的快速重构:
def是简单的(数字):
_prime=True吗
对于范围内的i(2,编号):
如果编号%i==0:
素=假吗
打破
回报是最好的
数字=整数(输入(“如果素数:”)测试)
打印(“Is”+str(数字)+“素数:”)
打印('Yes'如果是\u prime\u simple(数字),则为'No')
由于缩进错误,将对奇数的所有非除数执行else
范围(2,编号)内的i的:
如果编号%i==0:
打印(“否”)
打破
其他:
打印(“是”)
失败意味着当您输入15但打印出是
对吗?请为…尝试一个,否则
@tserenjams是,但它打印出“是。否”。@JohnnyMopp Yup,在那里,不起作用(添加到问题中)示例:。注意,它是一个,而不是if…else
。标志只是一个变量。。。您可以将其重命名为任何其他名称。你称它为标志,因为它是一个“标志”(在我们的例子中,它告诉我们如果一个数字不是素数),我改变了它,我希望它看起来像你试图做的那样
2
Yes
3
No