在python中生成素数,但在打印else语句时出错

在python中生成素数,但在打印else语句时出错,python,Python,我正在制作程序来检查它是否为素数。但else语句不起作用 val = int(input("Enter Number here")) if (val % 2 == 0): print("Not Prime") elif (val % 2 != 0): for i in range(3, val, 2): if (val % i == 0): print("Not Prime") else: print("Prime

我正在制作程序来检查它是否为素数。但else语句不起作用

val = int(input("Enter Number here"))
if (val % 2 == 0):
    print("Not Prime")

elif (val % 2 != 0):
    for i in range(3, val, 2):
            if (val % i == 0):
                print("Not Prime")
else:
    print("Prime")

另外,如果我尝试用elif(val!=0)删除else语句,则没有输出。我想在所有的
I
都用过之后,你就需要你的else了。可以在
for
循环之后使用
else
语句

val=int(输入(“在此输入数字”))
如果(val%2==0):
打印(“非素数”)
elif(值%2!=0):
对于范围内的i(3,val,2):
如果(val%i==0):
打印(“非素数”)
打破
else:#如果使用上述中断,则不需要此else
打印(“素数”)

解决逻辑问题的一种方法是将结果存储在变量中,并在最后检查该变量:

val = int(input("Enter Number here: "))
prime = True
if val % 2 == 0:
  prime = False
else:
  for i in range(3, val, 2):
    if val % i == 0:
      prime = False
      break

if prime:
  print("Prime")
else:
  print("Not prime")

还值得注意的是,您只需要检查数值的平方根,而不是检查数值是否为素数。这将使您的代码更加高效

一些答案在val=1、2和其他类似情况下也失败

下面是一个正确的解决方案:

val=int(输入(“在此处输入数字:”)
素数=真
如果val==1:
素数=假
elif val%2==0和val=2:
素数=假
其他:
对于范围(3,int(val**(1/2))+1,2)内的i:
如果val%i==0:
素数=假
打破
如果为素数:
打印(“素数”)
其他:
打印(“非素数”)

如果您遇到错误,请提供完整的错误回溯,否则将无法在错误所在的位置使用。余数为0或1,前两个将覆盖您将得到的错误,因为
val%2==0
val%2!=0
。所以你永远也到不了别的地方。因此,删除else。因此,当我用elif替换else时,我得到了一个无效的语法错误。因此,在这种情况下@buckeye14guy该怎么办?我无法编辑少于6个字符的内容,但else块应进一步缩进以与if对齐。假设根据您对原始问题的评论,这是预期的答案,只是一点点misformatted@ekmcd如果它是缩进的,那么在第一次迭代之后,数字将显示为“素数”,这实际上不是原始问题所问的。以25为例。在for循环中,
25%3
不是0,但这并不意味着25是素数。OP的代码应该经过从3到输入的所有奇数,然后才得出结论,它是素数,因为它不能被itI下面的任何数字整除!你完全正确。我以前从来没有见过其他人的缩进,所以它把我甩了,我(错误地)认为这只是一个缩进错误。作为一个数学书呆子,我很尴尬,我没有想到问题的背景!谢谢