はじめに
はじめての条件分岐って、ちょっとした日本語の読み取りゲームに似ています。「〜かつ〜」「〜または〜」「〜ではない」を正しく組み合わせられると、プログラムはグッと思い通りに動きます。肩の力を抜いて、動く例を触りながら感覚で覚えていきましょう。
ブール値と基本の3兄弟(and / or / not)
Pythonの条件は「True(真)」か「False(偽)」の2択です。論理演算子はその真偽を組み合わせる道具です。
- ブール値:
True と False の2つ。比較演算(>,==,<=など)の結果は必ずこのどちらかになります。 - and(かつ):
両方が True のときだけ True。どちらかが False なら False。 - or(または):
どちらかが True なら True。両方 False のときだけ False。 - not(否定):
True を False に、False を True にひっくり返します。
a = 7
b = 0
print(a > 5 and b == 0) # True(a>5 は True、b==0 も True、両方Trueだから True)
print(a < 5 or b == 0) # True(a<5 は False、b==0 は True、どちらかTrueなら True)
print(not (a == 7)) # False(a==7 は True、その否定は False)
Pythonよくある場面別の書き方
数値の範囲チェック
- 両端を含む範囲:
例えば「0〜100点なら有効」。
score = 85
if 0 <= score and score <= 100:
print("有効な点数です")
Python- Pythonらしい書き方:
連鎖比較が使えると読みやすくなります。
if 0 <= score <= 100:
print("有効な点数です")
Python複数条件の合格判定
- 両方合格(and):
2科目とも80点以上なら合格。
math = 82
english = 80
if math >= 80 and english >= 80:
print("合格!")
Python- 片方でも合格(or):
どちらかが90点以上なら特別合格。
if math >= 90 or english >= 90:
print("特別合格!")
Python入力のチェック(否定を使う)
- 空文字禁止(not):
入力が空でないことを確認。
name = ""
if not name:
print("名前を入力してください") # 空文字や None は「偽」とみなされる
Pythonショートサーキット(途中で判断を打ち切る性質)
論理演算子は「結論が決まったら、残りを見ない」最適化をします。これを知っておくと安全で効率的なコードが書けます。
- and の打ち切り:
左が False なら、右を見なくても結果は False。
user = None
# user が None のとき、右の user["name"] は評価されないのでエラーにならない
if user is not None and user.get("name") == "Alice":
print("ようこそ")
Python- or の打ち切り:
左が True なら、右を見なくても結果は True。
is_admin = True
is_owner = False
if is_admin or is_owner:
print("権限あり") # 左が True なので右は評価されない
Python- 使いどころ:
エラーになりそうな処理を「安全な前提条件」とセットで並べると、事故を防げます。
初心者がハマりがちな落とし穴
- 比較と代入の混同:
=は代入、==は比較。条件では必ず==を使う。
x = 3
# if x = 3: # これはエラー! 比較は == を使う
if x == 3:
print("3です")
Python- or の乱用で条件が緩すぎる:
「どちらかOK」なのか「両方必要」なのかを整理してから書く。
age = 17
has_parent = True
# 18歳以上 or 保護者同伴ならOK
if age >= 18 or has_parent:
print("入場OK")
Python- not のかけすぎで読みづらい:
二重否定は避け、肯定形に言い換えると読みやすい。
# 悪い例:
if not (status != "ready"):
pass
# 良い例:
if status == "ready":
pass
Python小さな例題で体感しよう
例題1:3の倍数かつ5の倍数
- 条件:
入力が3の倍数「かつ」5の倍数なら「FizzBuzz」、それ以外はそのまま表示。
n = 15
if n % 3 == 0 and n % 5 == 0:
print("FizzBuzz")
else:
print(n)
Python例題2:ログイン判定
- 条件:
ユーザー名が空でない「かつ」パスワードが8文字以上ならOK。
username = "mika"
password = "pass1234"
if username and len(password) >= 8:
print("ログイン成功")
else:
print("ユーザー名またはパスワードが不正です")
Python例題3:営業時間チェック
- 条件:
10〜19時は営業。「ただし、祝日は休業」。曜日と祝日フラグを使う。
hour = 18
is_holiday = False
if 10 <= hour <= 19 and not is_holiday:
print("営業中")
else:
print("休業")
Python例題4:安全にアクセス(ショートサーキット)
- 条件:
user が存在し、さらに active が True のときだけ歓迎メッセージ。
user = {"name": "Ryo", "active": True}
if user and user.get("active"):
print(f"ようこそ、{user['name']}さん")
else:
print("アクセス不可")
Python練習問題(自分で書いて動かす)
- 問題1:
整数 n が「偶数」または「7の倍数」なら「OK」、それ以外は「NG」と表示する。 - 問題2:
文字列 msg が「空でない」かつ「先頭が ‘!’ ではない」なら、そのまま表示。そうでなければ「無効なメッセージ」と表示。 - 問題3:
年齢 age と会員フラグ is_member に対し、「20歳以上 かつ 会員」または「65歳以上」の場合に「割引適用」と表示。それ以外は「通常料金」。
# 例の解答コード(自分の値に変えて試してみてください)
# 問題1
n = 14
if n % 2 == 0 or n % 7 == 0:
print("OK")
else:
print("NG")
# 問題2
msg = "Hello"
if msg and not msg.startswith("!"):
print(msg)
else:
print("無効なメッセージ")
# 問題3
age = 64
is_member = True
if (age >= 20 and is_member) or age >= 65:
print("割引適用")
else:
print("通常料金")
Pythonうまくなるコツ
- 自然言語に言い換える:
まず日本語で「〜なら」「かつ」「または」を短く書き、それをコードに移す。 - 条件を分解する:
長い if 条件は変数に切り出すと読みやすい。
age_ok = age >= 20
member_ok = is_member
discount_ok = (age_ok and member_ok) or age >= 65
if discount_ok:
print("割引適用")
Python- テストして確かめる:
True/False がどう変わるか、値を入れ替えて結果を見る。間違いに気づく速度が上がります。
