🔗 ステップ12: 論理演算子と複雑な条件
複数の条件を組み合わせて、もっと賢い判定をしよう!
前のステップでは、if文で「1つの条件」を判定する方法を学びました。今回は、「複数の条件を組み合わせる」方法を学びます。これにより、より複雑で実用的な判定ができるようになります。
📖 このステップで学ぶこと
・論理演算子とは何か、なぜ必要か
・and演算子(かつ)の使い方
・or演算子(または)の使い方
・not演算子(否定)の使い方
・複数の論理演算子を組み合わせる方法
・in演算子でリストや文字列をチェックする方法
・実践的なプログラム例
📝 1. 論理演算子とは何か?
まず、論理演算子とは何か、なぜ必要なのかを理解しましょう。
🔰 なぜ論理演算子が必要?
💡 1つの条件だけでは足りない場面
前のステップでは、1つの条件だけで判定していました。
例:「年齢が18歳以上なら成人」
でも実際のプログラムでは、複数の条件を組み合わせたいことがたくさんあります。
・「年齢が18歳以上かつ免許を持っている」→ 運転できる
・「雨または雪が降っている」→ 傘が必要
・「合格していない」→ 再試験
🔰 日常生活での論理演算子
📌 日常の「かつ」「または」「ではない」
論理演算子は日常生活でもよく使っています:
・「お金があるかつ時間がある」→ 旅行に行ける
・「電車またはバス」で行ける
・「雨が降っていない」→ 洗濯物を干せる
プログラムでも同じ考え方で複数の条件を組み合わせます。
📘 3つの論理演算子
📌 Pythonの論理演算子
| 演算子 | 意味 | 説明 |
| and | かつ(AND) | 両方ともTrueの時だけTrue |
| or | または(OR) | どちらか一方でもTrueならTrue |
| not | ではない(NOT) | TrueとFalseを反転させる |
🔗 2. and演算子(かつ)
andは「かつ」という意味で、両方の条件がTrueの時だけTrueになります。
📘 andの真理値表
📌 andの結果一覧
| 条件A | 条件B | A and B |
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
ポイント:両方Trueの時だけTrueになります!
📝 andの基本例
コード:運転できるかの判定
# 年齢と免許の状態を設定
age = 20
has_license = True
# 18歳以上「かつ」免許を持っている場合
if age >= 18 and has_license:
print("車を運転できます")
else:
print("車を運転できません")
実行結果
車を運転できます
💡 コードの解説
1. age >= 18 → 20 >= 18 なので True
2. has_license → True
3. True and True → True
4. 条件がTrueなので「車を運転できます」が表示される
📝 andで片方がFalseの場合
コード:免許がない場合
age = 20
has_license = False # ← 免許を持っていない
if age >= 18 and has_license:
print("車を運転できます")
else:
print("車を運転できません")
実行結果
車を運転できません
年齢は18歳以上ですが、免許がないので運転できません。
True and False → False
📝 範囲の判定でandを使う
「〇〇以上かつ△△以下」のような範囲の判定によく使います。
コード:点数が範囲内かチェック
score = 75
# 60点以上「かつ」80点未満の場合(評価B)
if score >= 60 and score < 80:
print("評価B:合格です")
実行結果
評価B:合格です
💡 Pythonの便利な書き方
範囲の判定は、数学的な書き方もできます:
・if score >= 60 and score < 80: (通常の書き方)
・if 60 <= score < 80: (数学的な書き方)
どちらも同じ意味です。数学的な書き方の方が短くて読みやすいこともあります。
📝 3つ以上の条件を組み合わせる
andは2つだけでなく、3つ以上の条件も組み合わせられます。
コード:ドライブに行ける条件
# 3つの条件を設定
age = 25
has_license = True
has_car = True
# 3つの条件をすべて満たす場合
if age >= 18 and has_license and has_car:
print("ドライブに行けます!")
else:
print("ドライブに行けません...")
実行結果
ドライブに行けます!
💡 3つ以上のandの動作
・True and True and True → True
・True and True and False → False
・True and False and True → False
1つでもFalseがあると、結果はFalseになります。
📝 実用例:ユーザー入力と組み合わせる
コード:入場資格の判定
# ユーザーに入力してもらう
age = int(input("年齢を入力してください: "))
height = int(input("身長(cm)を入力してください: "))
# 年齢10歳以上「かつ」身長120cm以上の場合
if age >= 10 and height >= 120:
print("このアトラクションに乗れます!")
else:
print("このアトラクションには乗れません")
実行結果(年齢12、身長130と入力した場合)
年齢を入力してください: 12 身長(cm)を入力してください: 130 このアトラクションに乗れます!
実行結果(年齢12、身長115と入力した場合)
年齢を入力してください: 12 身長(cm)を入力してください: 115 このアトラクションには乗れません
年齢は10歳以上ですが、身長が120cm未満なので乗れません。
🔗 3. or演算子(または)
orは「または」という意味で、どちらか一方でもTrueならTrueになります。
📘 orの真理値表
📌 orの結果一覧
| 条件A | 条件B | A or B |
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
ポイント:どちらか1つでもTrueならTrueになります!両方Falseの時だけFalse。
📝 orの基本例
コード:傘が必要かの判定
# 天気を設定
weather = "雨"
# 雨「または」雪の場合
if weather == "雨" or weather == "雪":
print("傘を持っていきましょう")
else:
print("傘は不要です")
実行結果
傘を持っていきましょう
💡 コードの解説
1. weather == "雨" → "雨" == "雨" なので True
2. weather == "雪" → "雨" == "雪" なので False
3. True or False → True
4. 条件がTrueなので「傘を持っていきましょう」が表示される
📝 orでどちらもFalseの場合
コード:晴れの場合
weather = "晴れ" # ← 晴れに変更
if weather == "雨" or weather == "雪":
print("傘を持っていきましょう")
else:
print("傘は不要です")
実行結果
傘は不要です
"晴れ" は "雨" でも "雪" でもないので、両方Falseになりelseが実行されます。
False or False → False
📝 休日判定
コード:週末かどうかの判定
# 曜日を入力
day = input("今日の曜日を入力してください: ")
# 土曜日「または」日曜日の場合
if day == "土曜日" or day == "日曜日":
print("今日は休日です!ゆっくり休みましょう")
else:
print("今日は平日です。頑張りましょう")
実行結果(土曜日と入力した場合)
今日の曜日を入力してください: 土曜日 今日は休日です!ゆっくり休みましょう
📝 3つ以上の条件をorで繋ぐ
コード:割引対象者の判定
# 年齢と学生かどうかを入力
age = int(input("年齢: "))
is_student = input("学生ですか?(はい/いいえ): ") == "はい"
# 12歳以下「または」65歳以上「または」学生の場合
if age <= 12 or age >= 65 or is_student:
print("割引が適用されます!")
else:
print("通常価格です")
実行結果(年齢25、学生「はい」と入力した場合)
年齢: 25 学生ですか?(はい/いいえ): はい 割引が適用されます!
25歳は12歳以下でも65歳以上でもありませんが、学生なので割引が適用されます。
💡 3つ以上のorの動作
・False or False or True → True
・True or False or False → True
・False or False or False → False
1つでもTrueがあると、結果はTrueになります。
🔗 4. not演算子(否定)
notは条件の結果を反転させます。TrueをFalseに、FalseをTrueに変えます。
📘 notの真理値表
📌 notの結果一覧
| 条件A | not A |
| True | False |
| False | True |
ポイント:条件の結果を反対にします!
📝 notの基本例
コード:雨が降っていない場合
# 雨が降っているかどうか
is_raining = False
# 雨が降っていない場合
if not is_raining:
print("雨は降っていません。洗濯物を干せます!")
実行結果
雨は降っていません。洗濯物を干せます!
💡 コードの解説
1. is_raining → False
2. not False → True
3. 条件がTrueなので、print文が実行される
📝 notで比較演算子を反転
コード:18歳未満の判定
age = 15
# 「18歳以上ではない」= 18歳未満
if not age >= 18:
print("未成年です")
実行結果
未成年です
💡 より分かりやすい書き方
not age >= 18 は age < 18 と同じ意味です。
notを使うより、比較演算子を変える方が読みやすいことが多いです:
・not x >= 10 → x < 10
・not x == "hello" → x != "hello"
・not x < 5 → x >= 5
📝 notの実用的な使い方
notは、ブール型の変数(True/False)を反転させる時に特に便利です。
コード:ログイン状態のチェック
# ログイン状態
is_logged_in = False
# ログインしていない場合
if not is_logged_in:
print("ログインしてください")
else:
print("ようこそ!")
実行結果
ログインしてください
📝 not inで「含まれていない」をチェック
notとinを組み合わせると「含まれていない」をチェックできます。
コード:リストに含まれていないかチェック
# 許可されたユーザーのリスト
allowed_users = ["admin", "user1", "user2"]
# ユーザー名を入力
username = input("ユーザー名: ")
# リストに含まれていない場合
if username not in allowed_users:
print("アクセス権限がありません")
else:
print("ようこそ!")
実行結果(guestと入力した場合)
ユーザー名: guest アクセス権限がありません
💡 not in の解説
・username in allowed_users → usernameがリストに含まれるか
・username not in allowed_users → usernameがリストに含まれないか
not in は1つの演算子として使えます。
🔗 5. andとorの組み合わせ
andとorを組み合わせると、もっと複雑な条件を表現できます。ただし、優先順位に注意が必要です。
⚠️ 演算子の優先順位
🔑 超重要!優先順位
論理演算子には優先順位があります:
not > and > or(notが最も優先)
つまり、andはorより先に評価されます。
複雑な条件では、カッコ()を使って優先順位を明確にしましょう!
📝 優先順位の例
コード:優先順位の確認
# カッコなしの場合
result1 = True or False and False
print(f"True or False and False = {result1}")
# カッコありの場合
result2 = (True or False) and False
print(f"(True or False) and False = {result2}")
実行結果
True or False and False = True (True or False) and False = False
💡 なぜ結果が違う?
カッコなし:True or False and False
1. andが先に評価される → False and False = False
2. 次にor → True or False = True
カッコあり:(True or False) and False
1. カッコ内が先 → True or False = True
2. 次にand → True and False = False
📝 実用例:映画の年齢制限
コード:映画を見られるかの判定
# 年齢と保護者の同伴を入力
age = int(input("年齢: "))
has_permission = input("保護者の許可がありますか?(はい/いいえ): ") == "はい"
# 18歳以上「または」(16歳以上「かつ」保護者の許可あり)の場合
if age >= 18 or (age >= 16 and has_permission):
print("この映画を見られます")
else:
print("この映画は見られません")
実行結果(年齢16、許可「はい」と入力した場合)
年齢: 16 保護者の許可がありますか?(はい/いいえ): はい この映画を見られます
💡 条件の解説
映画を見られる条件:
1. 18歳以上 → OK
2. 16歳以上で保護者の許可がある → OK
どちらかを満たせばOKなので、orで繋いでいます。
2番目の条件は「16歳以上かつ許可あり」なので、andで繋いでカッコで囲んでいます。
📝 複雑な条件を分かりやすくする方法
条件が複雑になったら、一度変数に入れると分かりやすくなります。
コード:条件を変数に入れる
age = 16
has_permission = True
# 条件を分かりやすい名前の変数に入れる
is_adult = age >= 18
is_teen_with_permission = age >= 16 and has_permission
# 変数を使って条件を書く
if is_adult or is_teen_with_permission:
print("この映画を見られます")
else:
print("この映画は見られません")
💡 この書き方のメリット
・条件の意味が分かりやすくなる
・後からコードを読んでも理解しやすい
・条件を修正する時に間違いにくい
🔍 6. in演算子
in演算子を使うと、値がリストや文字列に含まれているかを簡単にチェックできます。
📘 in演算子の基本
📌 in演算子の書き方
値 in リスト → 値がリストに含まれていればTrue
値 in 文字列 → 値が文字列に含まれていればTrue
値 not in リスト → 値がリストに含まれていなければTrue
📝 リストに含まれているかチェック
コード:果物リストのチェック
# 果物のリスト
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]
# ユーザーに入力してもらう
fruit = input("果物の名前を入力: ")
# リストに含まれているかチェック
if fruit in fruits:
print(f"{fruit}はリストに含まれています")
else:
print(f"{fruit}はリストに含まれていません")
実行結果(バナナと入力した場合)
果物の名前を入力: バナナ バナナはリストに含まれています
実行結果(いちごと入力した場合)
果物の名前を入力: いちご いちごはリストに含まれていません
📝 文字列に含まれているかチェック
コード:文字列内の検索
# 文章
text = "こんにちは、世界!Pythonは楽しい!"
# 「世界」が含まれているかチェック
if "世界" in text:
print("「世界」という文字が含まれています")
# 「Python」が含まれているかチェック
if "Python" in text:
print("「Python」という文字が含まれています")
実行結果
「世界」という文字が含まれています 「Python」という文字が含まれています
📝 in演算子で条件をシンプルに
in演算子を使うと、複数のorをシンプルに書き換えられます。
コード:休日判定(orを使った場合)
day = "土曜日"
# orで繋ぐ書き方(長い)
if day == "土曜日" or day == "日曜日":
print("休日です")
コード:休日判定(inを使った場合)
day = "土曜日"
# inを使う書き方(シンプル)
if day in ["土曜日", "日曜日"]:
print("休日です")
💡 in演算子のメリット
・orで繋ぐより短く書ける
・条件が増えてもリストに追加するだけ
・読みやすくて間違いにくい
📝 季節の判定
コード:月から季節を判定
# 月を入力
month = int(input("月(1-12)を入力: "))
# 季節を判定
if month in [3, 4, 5]:
print("春です🌸")
elif month in [6, 7, 8]:
print("夏です🌻")
elif month in [9, 10, 11]:
print("秋です🍁")
elif month in [12, 1, 2]:
print("冬です⛄")
else:
print("1〜12の数字を入力してください")
実行結果(7と入力した場合)
月(1-12)を入力: 7 夏です🌻
📝 母音のチェック
コード:入力した文字が母音かチェック
# 1文字を入力
char = input("1文字を入力: ").lower() # 小文字に変換
# 母音のリスト(文字列として定義)
vowels = "aiueo"
# 母音かどうかチェック
if char in vowels:
print(f"{char}は母音です")
else:
print(f"{char}は母音ではありません")
実行結果(aと入力した場合)
1文字を入力: a aは母音です
💡 文字列でもリストでも使える
・"a" in "aiueo" → True(文字列内を検索)
・"a" in ["a", "i", "u", "e", "o"] → True(リスト内を検索)
どちらでも同じ結果になります。
🎯 7. 実践的な例
ここまで学んだ論理演算子を使って、実用的なプログラムを作ってみましょう。
例1: ログインシステム
コード:ログインシステム
# 正しいユーザー名とパスワードを設定
correct_username = "admin"
correct_password = "pass123"
# ユーザーに入力してもらう
username = input("ユーザー名: ")
password = input("パスワード: ")
# 両方正しいかチェック(andを使用)
if username == correct_username and password == correct_password:
print("ログイン成功!")
print("ようこそ!")
elif username == correct_username:
# ユーザー名は正しいがパスワードが間違い
print("パスワードが間違っています")
elif password == correct_password:
# パスワードは正しいがユーザー名が間違い
print("ユーザー名が間違っています")
else:
# 両方間違い
print("ユーザー名とパスワードが間違っています")
実行結果(admin、pass123と入力した場合)
ユーザー名: admin パスワード: pass123 ログイン成功! ようこそ!
実行結果(admin、wrongと入力した場合)
ユーザー名: admin パスワード: wrong パスワードが間違っています
例2: 試験の合否判定(複数科目)
コード:複数科目の合否判定
# 3科目の点数を入力
math = int(input("数学の点数: "))
english = int(input("英語の点数: "))
japanese = int(input("国語の点数: "))
# 平均点を計算
average = (math + english + japanese) / 3
print(f"\n平均点: {average:.1f}点")
# 判定
if math >= 60 and english >= 60 and japanese >= 60:
# 全科目60点以上
print("判定: 全科目合格!素晴らしい!")
elif average >= 60:
# 平均60点以上(科目によっては不合格あり)
print("判定: 平均合格")
# どの科目が不合格かを表示
if math < 60:
print(f" 数学({math}点)は要復習")
if english < 60:
print(f" 英語({english}点)は要復習")
if japanese < 60:
print(f" 国語({japanese}点)は要復習")
else:
# 平均60点未満
print("判定: 不合格...頑張りましょう")
実行結果(数学80、英語45、国語70と入力した場合)
数学の点数: 80 英語の点数: 45 国語の点数: 70 平均点: 65.0点 判定: 平均合格 英語(45点)は要復習
例3: 割引計算(複数条件)
コード:年齢と金額による割引
# 商品の値段と年齢を入力
price = int(input("商品の値段(円): "))
age = int(input("年齢: "))
# 割引率を決定
if age <= 12 and price >= 1000:
# 12歳以下で1000円以上 → 30%割引
discount = 0.3
print("子ども特別割引(30%OFF)が適用されました!")
elif age <= 12:
# 12歳以下 → 20%割引
discount = 0.2
print("子ども割引(20%OFF)が適用されました!")
elif age >= 65:
# 65歳以上 → 15%割引
discount = 0.15
print("シニア割引(15%OFF)が適用されました!")
else:
# 割引なし
discount = 0
print("割引はありません")
# 最終価格を計算
final_price = price * (1 - discount)
print(f"元の価格: {price}円")
print(f"お支払い金額: {int(final_price)}円")
実行結果(値段1500、年齢10と入力した場合)
商品の値段(円): 1500 年齢: 10 子ども特別割引(30%OFF)が適用されました! 元の価格: 1500円 お支払い金額: 1050円
例4: 三角形の成立判定
コード:三角形が成立するか判定
# 3辺の長さを入力
print("三角形の3辺の長さを入力してください")
a = int(input("1辺目: "))
b = int(input("2辺目: "))
c = int(input("3辺目: "))
# 三角形の成立条件:どの2辺の和も残りの1辺より大きい
# 3つの条件をすべて満たす必要がある(and)
if (a + b > c) and (b + c > a) and (c + a > b):
print(f"辺の長さ{a}, {b}, {c}で三角形が成立します")
else:
print(f"辺の長さ{a}, {b}, {c}では三角形が成立しません")
実行結果(3, 4, 5と入力した場合)
三角形の3辺の長さを入力してください 1辺目: 3 2辺目: 4 3辺目: 5 辺の長さ3, 4, 5で三角形が成立します
実行結果(1, 2, 10と入力した場合)
三角形の3辺の長さを入力してください 1辺目: 1 2辺目: 2 3辺目: 10 辺の長さ1, 2, 10では三角形が成立しません
例5: じゃんけんゲーム(完全版)
コード:じゃんけんゲーム
import random # ランダムな値を生成するためのモジュール
print("じゃんけんゲーム!")
print("=" * 30)
# 選択肢のリスト
hands = ["グー", "チョキ", "パー"]
# ユーザーの手を入力
user = input("グー、チョキ、パーのどれか入力: ")
# 入力が正しいかチェック(in演算子を使用)
if user not in hands:
print("正しく入力してください")
else:
# コンピューターの手をランダムに選択
computer = random.choice(hands)
print(f"あなた: {user}")
print(f"コンピューター: {computer}")
print("-" * 20)
# 勝敗判定
if user == computer:
# 同じ手はあいこ
print("あいこ!")
elif (user == "グー" and computer == "チョキ") or \
(user == "チョキ" and computer == "パー") or \
(user == "パー" and computer == "グー"):
# ユーザーの勝ちパターン(orで繋ぐ)
print("あなたの勝ち!🎉")
else:
# 上記以外はユーザーの負け
print("あなたの負け...😢")
実行結果の例
じゃんけんゲーム! ============================== グー、チョキ、パーのどれか入力: グー あなた: グー コンピューター: チョキ -------------------- あなたの勝ち!🎉
💡 コードの解説
・import random → ランダムな値を使うためのモジュールを読み込む
・random.choice(hands) → リストからランダムに1つ選ぶ
・user not in hands → 入力が正しくないかチェック
・勝ちパターンは3つあるので、orで繋いでいる
・\ は長い行を次の行に続けるための記号
例6: うるう年の判定(論理演算子を活用)
コード:うるう年の判定
# 年を入力
year = int(input("年を入力してください: "))
# うるう年の条件を変数に入れる
# 条件1: 4で割り切れて、100で割り切れない
# 条件2: 400で割り切れる
# どちらかを満たせばうるう年
divisible_by_4 = year % 4 == 0
divisible_by_100 = year % 100 == 0
divisible_by_400 = year % 400 == 0
# うるう年の判定
is_leap = (divisible_by_4 and not divisible_by_100) or divisible_by_400
if is_leap:
print(f"{year}年はうるう年です")
else:
print(f"{year}年はうるう年ではありません")
実行結果(2000と入力した場合)
年を入力してください: 2000 2000年はうるう年です
実行結果(1900と入力した場合)
年を入力してください: 1900 1900年はうるう年ではありません
💡 条件の解説
うるう年の条件:
・4で割り切れる年はうるう年
・ただし、100で割り切れる年はうるう年ではない
・ただし、400で割り切れる年はうるう年
論理式に変換すると:
(4で割り切れる and 100で割り切れない) or 400で割り切れる
📝 練習問題(12問)
ここまで学んだことを実際に手を動かして確認しましょう。
問題1:範囲の判定(初級)
📋 問題
数字を入力してもらい、10以上20以下なら「範囲内です」と表示しましょう。
解答を見る
コード
# 数字を入力
number = int(input("数字を入力: "))
# 10以上「かつ」20以下かチェック
if number >= 10 and number <= 20:
print("範囲内です")
else:
print("範囲外です")
💡 別解(数学的な書き方)
if 10 <= number <= 20:
print("範囲内です")
問題2:休日判定(初級)
📋 問題
曜日を入力してもらい、「土曜日」または「日曜日」なら「休日です」と表示しましょう。
解答を見る
コード(orを使用)
# 曜日を入力
day = input("曜日を入力: ")
# 土曜日「または」日曜日かチェック
if day == "土曜日" or day == "日曜日":
print("休日です")
else:
print("平日です")
💡 別解(inを使用)
if day in ["土曜日", "日曜日"]:
print("休日です")
問題3:範囲外の判定(初級)
📋 問題
数字を入力してもらい、0未満または100より大きい場合は「範囲外です」と表示しましょう。
解答を見る
コード
# 数字を入力
number = int(input("数字を入力: "))
# 0未満「または」100より大きいかチェック
if number < 0 or number > 100:
print("範囲外です")
else:
print("範囲内です")
問題4:映画の年齢制限(中級)
📋 問題
年齢を入力してもらい、以下のように表示しましょう:
・15歳未満 → 「保護者同伴が必要」
・15歳以上18歳未満 → 「PG15指定」
・18歳以上 → 「視聴可能」
解答を見る
コード
# 年齢を入力
age = int(input("年齢: "))
# 年齢に応じた判定
if age < 15:
print("保護者同伴が必要")
elif age < 18:
print("PG15指定")
else:
print("視聴可能")
問題5:3つの数の最大値(中級)
📋 問題
3つの数字を入力してもらい、その中の最大値を表示しましょう。(if文とandを使って)
解答を見る
コード
# 3つの数字を入力
a = int(input("1つ目の数字: "))
b = int(input("2つ目の数字: "))
c = int(input("3つ目の数字: "))
# 最大値を判定
if a >= b and a >= c:
print(f"最大値: {a}")
elif b >= a and b >= c:
print(f"最大値: {b}")
else:
print(f"最大値: {c}")
💡 別解(max関数を使用)
# Pythonには最大値を求めるmax()関数がある
print(f"最大値: {max(a, b, c)}")
問題6:母音チェック(中級)
📋 問題
1文字を入力してもらい、それが母音(a, i, u, e, o)なら「母音です」と表示しましょう。
解答を見る
コード
# 1文字を入力
char = input("1文字を入力: ").lower() # 小文字に変換
# 母音かどうかチェック(in演算子を使用)
if char in "aiueo":
print("母音です")
else:
print("母音ではありません")
実行結果
1文字を入力: A 母音です
.lower()で小文字に変換しているので、大文字でも判定できます。
問題7:うるう年の判定(中級)
📋 問題
年を入力してもらい、うるう年かどうかを判定しましょう。
うるう年の条件:
・4で割り切れて、100で割り切れない年
・または、400で割り切れる年
解答を見る
コード
# 年を入力
year = int(input("年を入力: "))
# うるう年の判定
# (4で割り切れる かつ 100で割り切れない) または 400で割り切れる
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print(f"{year}年はうるう年です")
else:
print(f"{year}年はうるう年ではありません")
実行結果
年を入力: 2024 2024年はうるう年です
問題8:パスワードの強度チェック(中級)
📋 問題
パスワードを入力してもらい、8文字以上で数字が含まれていれば「強いパスワードです」と表示しましょう。
解答を見る
コード
# パスワードを入力
password = input("パスワードを入力: ")
# 数字が含まれているかチェック
has_number = False
for char in password:
if char in "0123456789":
has_number = True
break # 1つ見つかったらループを抜ける
# 8文字以上「かつ」数字が含まれているかチェック
if len(password) >= 8 and has_number:
print("強いパスワードです")
else:
print("弱いパスワードです")
if len(password) < 8:
print(" → 8文字以上にしてください")
if not has_number:
print(" → 数字を含めてください")
実行結果
パスワードを入力: mypass123 強いパスワードです
問題9:三角形の成立条件(上級)
📋 問題
3辺の長さを入力してもらい、三角形が成立するかどうかを判定しましょう。
三角形の条件:どの2辺の和も、残りの1辺より大きい
解答を見る
コード
# 3辺の長さを入力
a = int(input("1辺目: "))
b = int(input("2辺目: "))
c = int(input("3辺目: "))
# 3つの条件をすべて満たすかチェック(and)
if (a + b > c) and (b + c > a) and (c + a > b):
print("三角形が成立します")
else:
print("三角形が成立しません")
実行結果
1辺目: 3 2辺目: 4 3辺目: 5 三角形が成立します
問題10:複数科目の成績判定(上級)
📋 問題
数学、英語、国語の3科目の点数を入力してもらい、以下の条件で判定しましょう。
・全て60点以上: 「全科目合格」
・平均60点以上: 「平均合格」
・それ以外: 「不合格」
解答を見る
コード
# 3科目の点数を入力
math = int(input("数学: "))
english = int(input("英語: "))
japanese = int(input("国語: "))
# 平均点を計算
average = (math + english + japanese) / 3
# 判定
if math >= 60 and english >= 60 and japanese >= 60:
print("全科目合格")
elif average >= 60:
print("平均合格")
else:
print("不合格")
実行結果
数学: 80 英語: 50 国語: 70 平均合格
問題11:割引計算(複数条件)(上級)
📋 問題
商品の値段と年齢を入力してもらい、以下のルールで割引を適用しましょう。
・12歳以下かつ1000円以上: 30%割引
・12歳以下: 20%割引
・65歳以上: 15%割引
・それ以外: 割引なし
解答を見る
コード
# 商品の値段と年齢を入力
price = int(input("商品の値段: "))
age = int(input("年齢: "))
# 割引率を決定
if age <= 12 and price >= 1000:
discount = 0.3
print("30%割引!")
elif age <= 12:
discount = 0.2
print("20%割引!")
elif age >= 65:
discount = 0.15
print("15%割引!")
else:
discount = 0
print("割引なし")
# 最終価格を計算
final_price = price * (1 - discount)
print(f"お支払い金額: {int(final_price)}円")
実行結果
商品の値段: 1500 年齢: 10 30%割引! お支払い金額: 1050円
問題12:じゃんけんゲーム(上級)
📋 問題
ユーザーとコンピューター(ランダム)でじゃんけんをして、勝敗を判定しましょう。
解答を見る
コード
import random
# 選択肢のリスト
hands = ["グー", "チョキ", "パー"]
# ユーザーとコンピューターの手
user = input("グー、チョキ、パー: ")
computer = random.choice(hands)
print(f"コンピューター: {computer}")
# 勝敗判定
if user not in hands:
print("正しく入力してください")
elif user == computer:
print("あいこ!")
elif (user == "グー" and computer == "チョキ") or \
(user == "チョキ" and computer == "パー") or \
(user == "パー" and computer == "グー"):
print("あなたの勝ち!")
else:
print("あなたの負け...")
実行結果の例
グー、チョキ、パー: パー コンピューター: グー あなたの勝ち!
❓ よくある質問
Q1: andとorはどう使い分ける?
andは「両方とも正しい時」に使います。
orは「どちらか1つでも正しい時」に使います。
日本語で「AかつB」ならand、「AまたはB」ならorです。
Q2: andとorを一緒に使う時の優先順位は?
andの方がorより先に評価されます。
優先順位:not > and > or
複雑な条件では、カッコ()を使って優先順位を明確にするのがおすすめです。
Q3: in演算子はいつ使うべき?
複数の値のどれかに一致するかをチェックする時に便利です。
orで繋ぐより、コードが短く読みやすくなります。
例:if x in ["A", "B", "C"]:
Q4: not演算子はどんな時に使う?
条件の結果を反対にしたい時に使います。
ただし、notを使うより比較演算子を変える方が分かりやすいことも多いです。
例:not x >= 10 より x < 10 の方が読みやすい
Q5: 条件が複雑すぎて分かりにくい時は?
条件を一度変数に入れると分かりやすくなります。
例:is_adult = age >= 18
名前を付けることで、条件の意味が明確になります。
🎉 ステップ12のまとめ
✅ このステップで学んだこと
✓ andは「かつ」→ 両方Trueの時だけTrue
✓ orは「または」→ どちらか1つでもTrueならTrue
✓ notは「否定」→ TrueとFalseを反転
✓ 優先順位:not > and > or
✓ 複雑な条件ではカッコ()を使って優先順位を明確にする
✓ in演算子でリストや文字列に含まれるかをチェック
✓ not inで「含まれていない」をチェック
✓ 条件を変数に入れると読みやすくなる
💪 次のステップへ
論理演算子をマスターしました!
これで、複雑な条件を自由に組み合わせられるようになりました。
次のステップでは、for文(繰り返し処理)を学びます。
同じ処理を何度も繰り返すプログラムが書けるようになりますよ!
学習メモ
Pythonプログラミング基礎 - Step 12