ステップ12:論理演算子と複雑な条件

🔗 ステップ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 >= 18age < 18 と同じ意味です。

notを使うより、比較演算子を変える方が読みやすいことが多いです:

not x >= 10x < 10

not x == "hello"x != "hello"

not x < 5x >= 5

📝 notの実用的な使い方

notは、ブール型の変数(True/False)を反転させる時に特に便利です。

コード:ログイン状態のチェック

# ログイン状態
is_logged_in = False

# ログインしていない場合
if not is_logged_in:
    print("ログインしてください")
else:
    print("ようこそ!")

実行結果

ログインしてください

📝 not inで「含まれていない」をチェック

notinを組み合わせると「含まれていない」をチェックできます。

コード:リストに含まれていないかチェック

# 許可されたユーザーのリスト
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

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE