30までにある素数を判定するプログラムです

```

    for i in range(2,30):
        for s in range(2,i):
            if i%s == 0:
                break
    
        else:
            print(i)
    
```

どうしてif と elseのインデント数が違ってもいいのかが分かりません。  
elseがifと同じインデントだったら結果が間違うのは分かります。
CC BY-SA 4.0
2019-07-12T15:52:14.807
56603
2019-07-12T16:25:10.243
35091
question
python
for文でのif,elseの挙動について
その`else`は、`if`文に対応するものの「インデント数が違って」いるのではなく、`for`文に対応するものです。Pythonの`for`文(や`while`文などのループ文)は`else`節を持つことができ、「`break`せずにループが最後まで実行された場合」に`else`節が実行されます。

[4.4. break and continue Statements, and else Clauses on
Loops](https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-
statements-and-else-clauses-on-loops)

その観点で、ご掲載のコードの挙動を再度チェックすれば、すぐにその通りの動作になっていることが確かめられると思います。

* * *

英語込みで検索すると、「なんで`else`なんだ」とか言う議論の方がたくさん見つかりましたが、概ね「慣れれば自然に思える」的に締めくくられているようです。
CC BY-SA 4.0
2019-07-12T16:25:10.243
56607
2019-07-12T16:25:10.243
13972
56603
answer