Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 素性测试算法失败_Python_Algorithm_Numbers_Primes_Primality Test - Fatal编程技术网

Python 素性测试算法失败

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语句,但仍然不起

我创建了一个简单的素性测试算法,但对于像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: 
    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