この単位では、Pythonの条件判定、繰り返し、比較の基本を扱う。
if / elif / elseforwhilebreakcontinuerange- 比較演算子
- 論理演算子
- truthy / falsy
isと==
この単位の主な論点は次の通り。
- Pythonではインデントでブロックを表す
elifは Java のelse ifに近い役割を持つforは反復可能な値から順番に要素を取り出すrange()は数値の連続を扱うときによく使うwhileは条件がTrueの間だけ繰り返すbreakはループを途中で終了するcontinueは現在の回をスキップして次の回へ進む- 比較演算子は
TrueまたはFalseを返す and/or/notで条件を組み合わせられる- Pythonでは空文字、空リスト、
0、Noneなどが falsy になる ==は値の等しさ、isは同じオブジェクトかどうかを見る
この単位のファイル構成は次の通り。
src/02_control_flow_and_comparisons/
main.py
conditionals.py
loops_and_range.py
break_continue_examples.py
comparisons_and_logic.py
truthy_falsy_and_identity.py
各ファイルの役割は次の通り。
main.py- Unit 02 の実行入口
- 各テーマ別ファイルの関数を順番に呼び出す
conditionals.pyif / elif / elseの基本を扱う
loops_and_range.pyfor、while、rangeの基本を扱う
break_continue_examples.pybreakとcontinueによるループ制御を扱う
comparisons_and_logic.py- 比較演算子と論理演算子を扱う
truthy_falsy_and_identity.py- truthy / falsy、
isと==の違いを扱う
- truthy / falsy、
リポジトリ直下で仮想環境を有効化してから実行する。
PowerShell の場合:
.venv\Scripts\Activate.ps1
python src/02_control_flow_and_comparisons/main.pyGit Bash の場合:
source .venv/Scripts/activate
python src/02_control_flow_and_comparisons/main.pyRuff の確認は次のコマンドで行う。
python -m ruff check .
python -m ruff format --check .必要に応じてフォーマットを実行する。
python -m ruff format .次の順番で読むと、内容を追いやすい。
main.pyconditionals.pyloops_and_range.pybreak_continue_examples.pycomparisons_and_logic.pytruthy_falsy_and_identity.py
最初に main.py を読むことで、この単位全体の実行順序を把握できる。
その後、各テーマ別ファイルを読んで、条件分岐、繰り返し、比較の基本を確認する。
Unit 02 全体の処理の流れは次の通り。
main.pyが実行されるmain()が呼び出される- 表示用の見出しを出す
if / elif / elseのサンプルを実行するfor、while、rangeのサンプルを実行するbreakとcontinueのサンプルを実行する- 比較演算子と論理演算子のサンプルを実行する
- truthy / falsy、
isと==のサンプルを実行する - 各ファイル内の
assertにより、軽い期待値確認を行う
この単位では、関数設計そのものを主題にはしていない。
各ファイルの run_...() 関数は、テーマ別サンプルをまとめて実行するための入口として使う。
conditionals.py の describe_temperature() では、if / elif / else を使って気温を分類する。
if temperature >= 30:
result = "hot"
elif temperature >= 20:
result = "warm"
elif temperature >= 10:
result = "cool"
else:
result = "cold"複数の条件に当てはまりそうな値でも、最初に True になった分岐だけが実行される。
たとえば 35 は temperature >= 30 に当てはまるため、その下の elif は評価されない。
Pythonでは {} ではなく、インデントで処理のまとまりを表す。
if、for、while の後にあるインデントされた行が、その制御構文の中身となる。
if has_ticket:
print("チケットがあるため入場できる")インデントがずれると、処理の所属先が変わったり、構文エラーになったりする。
loops_and_range.py では、range(1, 6) を使って 1 から 5 までを作る。
for number in range(1, 6):
one_to_five.append(number)range(start, stop) の stop は含まれない。
そのため、range(1, 6) の結果は [1, 2, 3, 4, 5] となる。
break_continue_examples.py では、最初に見つかった偶数を記録した時点で break している。
for number in numbers:
if number % 2 == 0:
first_even = number
breakbreak はループ全体を終了する。
一方で continue は、その回の残りの処理をスキップして次の回へ進む。
comparisons_and_logic.py では、比較結果を変数に入れている。
is_adult = age >= minimum_age
is_not_thirty = age != 30比較演算子の結果は True または False となる。
そのため、比較結果をそのまま if の条件として使うこともできる。
truthy_falsy_and_identity.py では、bool() を使って値の真偽値評価を確認する。
values = ["Python", "", [1, 2], [], 1, 0, None]
for value in values:
print(f"value={value!r}, bool(value)={bool(value)}")空文字、空リスト、0、None は falsy な値として扱われる。
そのため、if items: のように「要素があるか」を直接表す書き方がよく使われる。
truthy_falsy_and_identity.py では、同じ値を持つ別リストを比較している。
left = [1, 2, 3]
right = [1, 2, 3]
same_reference = left
left == right
left is right
left is same_reference== は値として等しいかを比較する。
is は同じオブジェクトそのものを参照しているかを比較する。
複数条件から一つだけを選びたい場合は、if / elif / else が自然な形となる。
return で早期終了する書き方もあるが、最初の学習では分岐構造が見える形の方が読みやすい。
if temperature >= 30:
result = "hot"
elif temperature >= 20:
result = "warm"
else:
result = "cold"この単位では、elif の説明とコードの形が一致するようにしている。
range(1, 6) は 1 から 6 までではなく、1 から 5 までとなる。
この「終了値を含まない」という考え方は、スライスにもつながる重要な感覚となる。
while count < 3: のような形では、ループ内で count を更新する必要がある。
while count < 3:
counted_values.append(count)
count += 1count += 1 を忘れると、条件がずっと True のままになり、ループが終わらない。
continue が実行されると、その回の残りの処理はスキップされる。
次の例では、負の値の場合は valid_scores.append(score) まで進まない。
for score in raw_scores:
if score < 0:
continue
valid_scores.append(score)if items: は「items に要素があるか」を表す定番の書き方。
ただし、初見では items 自体が真偽値に見えないため、慣れるまでは読み取りに注意する。
if items:
print("items には要素がある")is は同じオブジェクトを参照しているかを確認するための演算子。
通常の値の比較では == を使う。
left == right # 値が等しいか
left is right # 同じオブジェクトかNone との比較では、例外的に is None が定番の書き方となる。
この単位を読んだ後、次の内容を確認する。
if / elif / elseの基本形を読める- Pythonではインデントでブロックを表すことを理解できる
forでリストやrange()の値を順番に処理できることを読めるrange()の終了値が含まれないことを理解できるwhileの条件と更新処理の関係を読めるbreakとcontinueの違いを説明できる- 比較演算子の結果が
True/Falseになることを理解できる and/or/notの基本的な意味を読める- truthy / falsy の基本例を説明できる
==とisの違いを説明できるNone判定ではis Noneを使うことを理解できる