Python | if / elif / else & 複雑な条件 演習セット

Python
スポンサーリンク

if / elif / else 応用演習

では 応用編 Q21〜Q30(複雑条件の組み合わせ) の各問題について、
解答例(実行可能な Python コード)+ステップごとの詳しい解説 を紹介します。


✅ Q21

問題
3科目(a, b, c)の平均が 80 以上、かつどの科目も 60 以上 → 「合格」
平均が 80 未満または 1 科目でも 60 未満 → 「不合格」

💡 解答例

a = 85
b = 70
c = 90

average = (a + b + c) / 3

if average >= 80 and a >= 60 and b >= 60 and c >= 60:
    print("合格")
else:
    print("不合格")
Python

🪜 ステップ解説

  1. a,b,c に各科目の点数を格納する。
  2. average = (a+b+c)/3 で平均を計算する(小数になる可能性あり)。
  3. if の条件は 両方満たす必要があるaverage >= 80 かつ 各科目が60以上a >= 60 and b >= 60 and c >= 60)。
  4. 両方満たせば "合格" を出力。条件のどれかが満たされない(平均不足 or 科目不足)なら else"不合格"
  5. ※評価の優先度は明確なので and を使って一つの複合条件にしている。

✅ Q22

問題
3つの数 a, b, c のうち最大の値を表示。

💡 解答例

a = 12
b = 7
c = 19

# 方法1: 組み込み関数を使う
print("最大値:", max(a, b, c))

# 方法2: if/elif を使って自力で求める
if a >= b and a >= c:
    print("最大値:", a)
elif b >= a and b >= c:
    print("最大値:", b)
else:
    print("最大値:", c)
Python

🪜 ステップ解説

  1. 最も簡単なのは max(a,b,c) を使う(組み込みで高速・簡潔)。
  2. 自力でやる場合は順に比較する:まず a が他2つ以上か確かめ、そうでなければ b、最後に c
  3. >= を使うと複数が同じ値でも正しく処理される(同値のケースでもどれか一つを出す)。

✅ Q23

問題
整数 n

  • 2 の倍数かつ 3 の倍数 → 「2と3の倍数」
  • 2 の倍数のみ → 「2の倍数」
  • 3 の倍数のみ → 「3の倍数」
  • どちらでもない → 「その他」

💡 解答例

n = 12

if n % 2 == 0 and n % 3 == 0:
    print("2と3の倍数")
elif n % 2 == 0:
    print("2の倍数")
elif n % 3 == 0:
    print("3の倍数")
else:
    print("その他")
Python

🪜 ステップ解説

  1. 最初に 最も限定的な条件(両方の倍数)をチェックする。これは重要:両方を後回しにすると誤分類する。
  2. 次に 2 の倍数のみ(n % 2 == 0)。
  3. 次に 3 の倍数のみ。
  4. 最後にどちらでもない場合を else で処理する。
  5. %(剰余)を使って割り切れるかを判定する。

✅ Q24

問題
文字列が

  • 空文字 → 「未入力」
  • 空白のみ → 「空白」
  • それ以外 → 「OK」

💡 解答例

s = "   "  # テストケース

if s == "":
    print("未入力")
elif s.strip() == "":
    # strip() で両端の空白を削除して空文字になれば「空白のみ」
    print("空白")
else:
    print("OK")
Python

🪜 ステップ解説

  1. s == "" で完全に何も入力されていないかを確認(長さ 0)。
  2. s.strip() は文字列の両端の空白を取り除く。s.strip() == "" なら中身は空白か改行などだけで構成されている。
  3. それ以外は実際の文字が含まれているので "OK"
  4. strip() を使うことで全角空白やタブ・改行を含むケースにも対応可能(ただし全角スペースは strip() で取り除けるが注意点あり)。

✅ Q25

問題
agehas_ticket(True/False)で映画の入場判定:

  • 18歳以上かつチケットあり → 「入場OK」
  • 18歳未満 → 「年齢制限」
  • チケットなし → 「チケットが必要」

💡 解答例

age = 17
has_ticket = False

if age < 18:
    print("年齢制限")
elif not has_ticket:
    print("チケットが必要")
else:
    print("入場OK")
Python

🪜 ステップ解説

  1. 優先順位の設計が重要:年齢制限がある場合はまず年齢未満チェックを行い、年齢で弾かれる人はチケットの有無に関わらず入場不可(年齢制限)とする。
  2. 次に年齢クリア者についてチケット有無を確認:not has_ticket(チケットがない)なら "チケットが必要"
  3. 最後に年齢クリアかつチケットありなら "入場OK"
  4. 別の仕様で「チケットがない場合を先に判定する」など順序を変えると異なる結果になるので注意。

✅ Q26

問題
変数 x, y の座標で象限判定:

  • x>0 かつ y>0 → 「第1象限」
  • x<0 かつ y>0 → 「第2象限」
  • x<0 かつ y<0 → 「第3象限」
  • x>0 かつ y<0 → 「第4象限」
  • その他(どちらか 0)→ 「軸上」

💡 解答例

x = 0
y = 5

if x == 0 or y == 0:
    print("軸上")
elif x > 0 and y > 0:
    print("第1象限")
elif x < 0 and y > 0:
    print("第2象限")
elif x < 0 and y < 0:
    print("第3象限")
elif x > 0 and y < 0:
    print("第4象限")
Python

🪜 ステップ解説

  1. まず x == 0 or y == 0 を最初にチェックすると簡潔に「軸上」ケースを早めに処理できる(0 を含むケースは象限ではない)。
  2. elif を用いて順に各象限条件を確認する。
  3. andxy の符号を同時にチェックする。
  4. 最後の elif まで到達しなければどこにも当てはまらないが、上の網羅で全ケースをカバーしている。

✅ Q27

問題
入力文字列が

  • 数字のみなら「数値です」
  • 英字のみなら「英字です」
  • 英数字混在なら「英数字です」
  • その他なら「特殊文字を含みます」

💡 解答例

s = "abc123"

if s.isdigit():
    print("数値です")
elif s.isalpha():
    print("英字です")
elif s.isalnum():
    # isalnum() は英字か数字のみで構成されていれば True
    print("英数字です")
else:
    print("特殊文字を含みます")
Python

🪜 ステップ解説

  1. str.isdigit():文字列が数字のみ(Unicode の数字含む)かを判定。
  2. str.isalpha():英字のみ(Unicode の文字を含む)かを判定。
  3. str.isalnum():英字か数字のみ(混在含む)かを判定。isalnum()isdigit() / isalpha() のどちらでもない混在ケースを捕らえるのに便利。
  4. それ以外(スペースや記号が含まれる、空文字など)は else
  5. 補足:空文字 "" に対しては上のどれも False なので else に入る。空文字は未入力として扱いたければ先に if s == “”:` を入れると良い。

✅ Q28

問題
整数 x が 0〜100 の範囲外なら「範囲外」、範囲内なら「OK」。

💡 解答例

x = 101

if 0 <= x <= 100:
    print("OK")
else:
    print("範囲外")
Python

🪜 ステップ解説

  1. Python の連鎖比較 0 <= x <= 100 を使うと簡潔に範囲チェックできる。
  2. 条件が真なら "OK"、偽なら "範囲外"
  3. 負の値や 100 を超える値は "範囲外"。境界(0 と 100)は含まれる仕様になっている。

✅ Q29

問題
day"土" または "日" → 「休日」
それ以外で "金" → 「もうすぐ休日」
それ以外 → 「平日」

💡 解答例

day = "金"

if day == "土" or day == "日":
    print("休日")
elif day == "金":
    print("もうすぐ休日")
else:
    print("平日")
Python

🪜 ステップ解説

  1. まず day == "土" or day == "日" で週末かどうか判定(どちらか一方でも True)。
  2. 週末でなければ次に day == "金" を確認し "もうすぐ休日" を出す。
  3. それ以外の平日に対しては else
  4. 入力の表記ゆれ(”金曜日” など)があるとマッチしないので、実用では正規化(短縮形に揃える)する。

✅ Q30

問題
入力した年齢が

  • 0 未満 → 「入力エラー」
  • 0〜2 → 「乳児」
  • 3〜12 → 「子ども」
  • 13〜19 → 「ティーン」
  • 20〜64 → 「大人」
  • 65 以上 → 「シニア」

💡 解答例

age = 70

if age < 0:
    print("入力エラー")
elif age <= 2:
    print("乳児")
elif age <= 12:
    print("子ども")
elif age <= 19:
    print("ティーン")
elif age <= 64:
    print("大人")
else:
    print("シニア")
Python

🪜 ステップ解説

  1. 最初に不正値(負の年齢)を弾く:age < 0"入力エラー"
  2. その次から上限条件を順に <= でチェックすると見落としがなく安全に範囲振り分けできる。
    • <=2 → 0〜2
    • <=12 → 3〜12(前の条件が False であることを利用)
    • <=19 → 13〜19
    • <=64 → 20〜64
  3. 最後に else は 65 以上を扱う。

補足(全体の設計方針)

  • 最も限定的(特異)な条件 は先にチェックする(例:両方満たす場合、エラーケース)。
  • and / or の優先度と括弧を意識する(andor より優先)。必要なら括弧で明示する。
  • 条件が複雑なときは途中の判定を変数に切り出すと可読性が上がる(例:is_adult = age >= 18 など)。
  • 入力の前処理(strip(), lower(), 型変換と例外処理)は現実のプログラムでは必須。
Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました