Python 我做了这个算法,告诉你一个数字是否是素数,但我不知道';我不明白为什么';if-else语句';在不同的缩进级别上工作

Python 我做了这个算法,告诉你一个数字是否是素数,但我不知道';我不明白为什么';if-else语句';在不同的缩进级别上工作,python,if-statement,primes,Python,If Statement,Primes,代码如下: def is_prime(p): for i in range(2, p): if p % i == 0: break else: print("Prime") def main(): p = int(input()) is_prime(p) main() 我的问题是,如果'else语句'位于'if'之外的另一个缩进级别上,为什么它会工作?我的猜测是,因为'for循环

代码如下:

def is_prime(p):
    for i in range(2, p):
        if p % i == 0:
            break
    else:
        print("Prime")


def main():
    p = int(input())
    is_prime(p)


main()

我的问题是,如果'else语句'位于'if'之外的另一个缩进级别上,为什么它会工作?我的猜测是,因为'for循环'与'else'位于相同的缩进级别上,所以'break语句'使'else'附加到'if',但我不知道。

代码使用的是for else子句,而不是if else子句

for blah:
    do stuff
else:
    do more
当且仅当您正常退出for循环时(即不引发错误或使用break语句),才会执行do more子句。

来自文档:“break语句与C中的语句一样,从最内层的for或while循环中中断

Loop语句可能有else子句;当循环因iterable耗尽而终止时(使用for)或当条件变为false时(使用while),会执行else子句,但当循环因break语句终止时,则不会执行。”


你读过吗?它告诉你什么?这不是缩进。您的代码现在没有
if else
。您拥有的是else的
,这是一个有效的Python构造。看,这回答了你的问题吗?顺便说一句,“这是我做的……但我不明白……”这意味着你不知道自己在做什么,你只是在猜测和期待最好的结果。这不是一个学习编程的好方法。不要听这些批评,它很容易被别人的错误所迷惑。这是一个不寻常的构造,在许多其他语言中都不存在,而且在python中也很少使用。它也可能出现在while循环中。