我做了这个算法来告诉你一个数字是否是素数,但我不明白为什么 'if-else statement' 在不同的缩进级别上有效

I made this algorithm that tells you if a number is prime, but i don't understand why the 'if-else statement' on different indentation levels works

这是代码:

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 statement' 与 'if' 处于另一个缩进级别? 'else' 是 'break statement' 使 'else' 附加到 'if',但我不知道。

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

for blah:
    do stuff
else:
    do more

do more 子句当且仅当您正常退出 for 循环时执行,即不引发错误或使用 break 语句。

来自文档:“break 语句,就像在 C 中一样,跳出最内层的封闭 for 或 while 循环。

循环语句可以有一个else子句;它在循环因可迭代对象耗尽(使用 for)或条件变为假(使用 while)而终止时执行,而不是在循环被 break 语句终止时执行。"

https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops