3秒でわかる
上から順に進む処理の流れを、条件分岐と繰り返しで組み替えるための構文。状況に応じた振る舞いを、短いコードにまとめられます。
もう少し詳しく
どういうものか
プログラムは何も書かなければ上から下へ一度だけ流れます。この流れを操作するための構文が制御構造で、大きく3つに分かれます。順次 (書いた順に実行)、分岐 (条件で進む先を変える)、反復 (条件が続く間くり返す) です。
具体的には if else switch が分岐、for while が反復にあたります。break continue return は、その流れの途中から抜けたり次の周回へ飛ばしたりする補助です。
なぜ必要か
分岐が無ければ、会員と非会員で表示を変えることも、在庫切れのときだけ注意書きを出すこともできません。反復が無ければ、100件のデータを処理するのに100行を書き並べることになり、件数が変わるたびに書き直しになります。
言語が違っても、この3つの組み合わせで手続きが表現できるという点は変わりません。書き方の違いを覚えるだけで、他の言語へ移りやすいのはそのためです。
具体例
scores = [82, 45, 91, 67, 30]
passed = 0
for score in scores:
if score >= 80:
print(f"{score} 点 優秀")
passed += 1
elif score >= 60:
print(f"{score} 点 合格")
passed += 1
else:
print(f"{score} 点 再試験")
print(f"合格 {passed} 人 / {len(scores)} 人中")
# while は終了条件を自分で動かす
count = 3
while count > 0:
print(count)
count -= 1つまずきやすいところ
境界の条件を1つずらす誤りが最も多く、>= と > の取り違えや、range(1, 10) が10を含まないことに気づかない形で現れます。境界そのものの値を入力にして動かすと、その場で判明します。
while の条件を更新し忘れると無限ループになります。カウンタを減らす行がループの中にあるか、if の内側に入り込んでいないかを見ます。
反復の途中でその対象そのものを書き換えるのも事故のもとです。リストを回しながら要素を削除すると、位置がずれて飛ばされる要素が出ます。新しいリストを作って入れ替える形にすると安全です。
分岐が5段6段と続くときは、条件の並べ方を見直す合図です。値と処理の対応表 (辞書やマップ) に置き換えると、条件が増えても行が増えません。
覚え方
「順次・分岐・反復」の3語で足ります。どんな複雑な処理も、この3つの入れ子として読み解けます。