理解 for 循环中的 if-else 时出错

问题描述 投票:0回答:3

我正在尝试制作一个程序,在不使用递归或类似的东西的情况下检查数字是否为素数或不仅仅是基本数。现在的问题是,当我将“else”语句放在用于 if then 的相同 ident 块下方时当输入像(1047,2457)这样的大数字时,这两个条件都会满足,但是当我将“else”放在下面给出的“if”语句块之前时,它就可以正常工作。这是为什么

try:
    num = int(input("Enter Any Num To See If It Is A Prime Number: "))

    for i in range(2, (num//2)+1):
        if(num%i ==0):
            print(f"{num} Is Not A Prime Number")
            break
    else:
        print(f"{num} Is A Prime Number")

except ValueError:
    print("Invalid Input")
python for-loop if-statement
3个回答
2
投票

如果我正确解释你的问题,你会发现

for i in range(2, (num//2)+1):
    if(num%i ==0):
       print(f"{num} Is Not A Prime Number")
       break
else:
    print(f"{num} Is A Prime Number")

有效,但不行

for i in range(2, (num//2)+1):
    if(num%i ==0):
       print(f"{num} Is Not A Prime Number")
    else:
       print(f"{num} Is A Prime Number")

有关

for... else...
构造的语义,请参阅 this 答案。简而言之,如果
for
循环不执行
break
,那么它将执行
else
循环下方的
for
块。在你的例子中,它将遍历 2 和
num//2 + 1
之间的所有数字,并且如果这些数字都不能整除
num
,则仅打印“{num} 是素数”。

相反,如果

else
if
处于相同的缩进级别,则它自然属于
if
情况,并且只要条件不成立就会运行。这意味着,对于每个除
i
num
,它将打印“{num} 是素数”。因此,您将得到混合输出。


0
投票

For 循环可以有一个

else
子句,仅当 for 循环运行完成而没有执行
break
语句时才会执行该子句。

编写的代码检查输入数字的一半以内的每个数字是否有余数。 如果存在余数,则打印

f"{num} Is Not A Prime Number"
并且
break
为循环。

但是,如果不执行

break
,则循环将转到
else
子句。


-1
投票

像 if 一样缩进 else 并在 else 上添加一个中断:

try:
    num = int(input("Enter Any Num To See If It Is A Prime Number: "))

    for i in range(2, (num//2)+1):
        if(num%i ==0):
            print(f"{num} Is Not A Prime Number")
            break
        else:
            print(f"{num} Is A Prime Number")
            break

except ValueError:
    print("Invalid Input")
© www.soinside.com 2019 - 2024. All rights reserved.