ステップ13:for文で繰り返し処理

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

複数の条件を組み合わせて、もっと賢い判定をしよう!

前のステップでは、if文で「1つの条件」を判定する方法を学びました。今回は、「複数の条件を組み合わせる」方法を学びます。これができると、より複雑で実用的な判定ができるようになります。

📖 このステップで学ぶこと

・論理演算子とは何か、なぜ必要か

・and演算子(かつ)の使い方

・or演算子(または)の使い方

・not演算子(否定)の使い方

・複数の論理演算子を組み合わせる方法

・in演算子でリストや文字列をチェックする方法

・実践的なプログラム例

📝 1. 論理演算子とは何か?

まず、論理演算子とは何か、なぜ必要なのかを理解しましょう。

🔰 なぜ論理演算子が必要?

前のステップでは、1つの条件だけで判定していました。

例えば「年齢が18歳以上なら成人」という判定は、こう書きました。

コード:1つの条件だけの判定

※スマートフォンでは横スクロールできます

if age >= 18:
    print("成人です")

でも実際の生活では、1つの条件だけでは判断できないことがたくさんあります。

📌 複数の条件が必要な場面の例

・「年齢が18歳以上」かつ「免許を持っている」→ 車を運転できる

・「雨が降っている」または「雪が降っている」→ 傘が必要

・「テストに合格していない」→ 再試験を受ける

これらの判定には、複数の条件を組み合わせる「論理演算子」が必要です。

🔰 日常生活での論理演算子

論理演算子は、実は日常会話でも無意識に使っています。

「お金があるかつ時間がある」なら旅行に行ける、というのは「両方の条件を満たす必要がある」という意味です。

「電車またはバスで行ける」というのは「どちらか1つでも使えればOK」という意味です。

「雨が降っていない」というのは「雨が降っている」の反対の状態を表しています。

Pythonでは、これらを以下のように書きます。

📌 日常の言葉とPythonの対応

日常の言い方 意味 Pythonでは
AかつB 両方必要 and
AまたはB どちらかあればOK or
Aではない 条件を反対にする not

📘 3つの論理演算子

Pythonには3つの論理演算子があります。それぞれの特徴を覚えましょう。

📌 Pythonの論理演算子一覧

演算子 読み方 意味 結果がTrueになる条件
and アンド かつ(AND) 両方ともTrueの時だけ
or オア または(OR) どちらか一方でもTrueなら
not ノット ではない(NOT) FalseをTrueに反転

⚠️ 注意!英語で書く

論理演算子はすべて小文字の英語で書きます。

and ○(正しい)

AND ✗(大文字はダメ)

&& ✗(他の言語の書き方、Pythonでは使えない)

🔗 2. and演算子(かつ)

andは「かつ」という意味で、両方の条件がTrueの時だけTrueになります。

🔰 andのイメージ

andは「AとBの両方が必要」という時に使います。

例えば、車を運転するには「18歳以上」かつ「免許を持っている」という2つの条件を両方満たす必要があります。どちらか1つでも欠けていたら運転できません。

他にも以下のような場面で使います。

💡 andが使われる場面

・ログインするには「ユーザー名が正しい」かつ「パスワードが正しい」が両方必要

・このアトラクションに乗るには「身長120cm以上」かつ「年齢10歳以上」が両方必要

・割引を受けるには「会員である」かつ「購入金額が5000円以上」が両方必要

📘 andの真理値表

andの結果を一覧表で確認しましょう。

「真理値表」とは、条件の組み合わせと結果を整理した表のことです。

📌 andの結果一覧

条件A 条件B A and B 説明
True True True 両方OK → OK
True False False 片方ダメ → ダメ
False True False 片方ダメ → ダメ
False False False 両方ダメ → ダメ

ポイント:両方Trueの時だけTrueになります!1つでもFalseがあるとFalseになります。

📝 andの基本的な書き方

📝 andの書き方

andの左右に条件を書きます。

両方の条件がTrueの時だけ、if文の中の処理が実行されます。

※スマートフォンでは横スクロールできます

if 条件A and 条件B:
    両方Trueの時に実行する処理

📝 andの基本例:運転できるかの判定

「18歳以上かつ免許を持っている」場合に運転できるプログラムを作ってみましょう。

まず、使う変数を準備します。

コード:変数の準備

※スマートフォンでは横スクロールできます

# age = 20 は「年齢を20歳に設定する」という意味
# age という名前の変数に 20 という整数を代入している
age = 20

# has_license = True は「免許を持っている状態に設定する」という意味
# has_license という名前の変数に True を代入している
# True は「はい」「持っている」という意味のブール値
has_license = True

次に、andを使って2つの条件を判定します。

コード:andで2つの条件を判定

※スマートフォンでは横スクロールできます

# if age >= 18 and has_license: の意味
# age >= 18 → 「年齢が18歳以上か」をチェック(条件A)
# and → 「かつ」を意味する論理演算子
# has_license → 「免許を持っているか」をチェック(条件B)
# この2つの条件が両方Trueなら、if文の中が実行される

if age >= 18 and has_license:
    print("車を運転できます")

elseを追加して、運転できない場合の処理も書きましょう。

完成コード:運転できるかの判定

※スマートフォンでは横スクロールできます

# 年齢と免許の状態を設定
age = 20           # 年齢(20歳)
has_license = True  # 免許を持っているか(True = 持っている)

# 18歳以上「かつ」免許を持っている場合
if age >= 18 and has_license:
    print("車を運転できます")
else:
    print("車を運転できません")

実行結果

車を運転できます

💡 条件の評価の流れ

このコードがどう評価されるか、順番に見てみましょう。

1. age >= 18 → 20 >= 18 なので True

2. has_licenseTrue

3. True and TrueTrue

4. 条件全体がTrueなので「車を運転できます」が表示される

📝 andで片方がFalseの場合

免許を持っていない場合はどうなるでしょうか?

コード:免許がない場合

※スマートフォンでは横スクロールできます

# 年齢と免許の状態を設定
age = 20            # 年齢(20歳)
has_license = False  # 免許を持っていない(False = 持っていない)

# 18歳以上「かつ」免許を持っている場合
if age >= 18 and has_license:
    print("車を運転できます")
else:
    print("車を運転できません")

実行結果

車を運転できません

💡 条件の評価の流れ

1. age >= 18 → 20 >= 18 なので True

2. has_licenseFalse

3. True and FalseFalse

4. 条件全体がFalseなのでelse側の「車を運転できません」が表示される

ポイント:年齢は18歳以上ですが、免許がないので運転できません。andは両方Trueでないとダメなのです。

📝 範囲の判定でandを使う

「〇〇以上かつ△△以下」のような範囲の判定は、andがよく使われる場面です。

例えば「60点以上80点未満なら評価B」という判定を考えてみましょう。

この条件を日本語で分解すると、「60点以上」かつ「80点未満」という2つの条件になります。

コード:点数が範囲内かチェック

※スマートフォンでは横スクロールできます

# score = 75 は「点数を75点に設定する」という意味
score = 75

# score >= 60 → 60点以上かをチェック
# score < 80 → 80点未満かをチェック
# 両方Trueなら「評価B:合格です」と表示される
if score >= 60 and score < 80:
    print("評価B:合格です")

実行結果

評価B:合格です

75点は「60以上」かつ「80未満」なので、条件を満たします。

💡 Pythonの便利な書き方

範囲の判定は、数学的な書き方もできます。

if score >= 60 and score < 80: (通常の書き方)

if 60 <= score < 80: (数学的な書き方)

どちらも同じ意味です。数学的な書き方は「60以上80未満」と読めて分かりやすいですね。

他の多くのプログラミング言語ではこの書き方はできませんが、Pythonでは使えます。

📝 3つ以上の条件を組み合わせる

andは2つだけでなく、3つ以上の条件も組み合わせられます。

例えば「ドライブに行ける条件」を考えてみましょう。

ドライブに行くには「18歳以上」かつ「免許を持っている」かつ「車を持っている」という3つの条件をすべて満たす必要があります。

コード:3つの条件を使う例

※スマートフォンでは横スクロールできます

# 3つの条件を設定
age = 25           # 年齢(25歳)
has_license = True  # 免許を持っている
has_car = True      # 車を持っている

# age >= 18 → 18歳以上かをチェック
# has_license → 免許を持っているかをチェック
# has_car → 車を持っているかをチェック
# 3つすべてTrueなら「ドライブに行けます!」と表示される
if age >= 18 and has_license and has_car:
    print("ドライブに行けます!")
else:
    print("ドライブに行けません...")

実行結果

ドライブに行けます!

💡 3つ以上のandの動作

andは「すべてがTrueの時だけTrue」になります。

True and True and True → True(すべてOK)

True and True and False → False(1つでもダメならダメ)

True and False and True → False(1つでもダメならダメ)

False and True and True → False(1つでもダメならダメ)

1つでもFalseがあると結果はFalseです。

📝 実用例:ユーザー入力と組み合わせる

input()で入力を受け取って、andで判定する例を見てみましょう。

まず、入力を受け取る部分を見てみます。

コード:入力を受け取る

※スマートフォンでは横スクロールできます

# int(input("...")) は、ユーザーに入力を求めて、それを整数に変換する
# input() は文字列を返すので、int() で数値に変換する必要がある
age = int(input("年齢を入力してください: "))
height = int(input("身長(cm)を入力してください: "))

次に、2つの条件で判定します。

完成コード:アトラクションに乗れるかの判定

※スマートフォンでは横スクロールできます

# ユーザーに年齢と身長を入力してもらう
age = int(input("年齢を入力してください: "))
height = int(input("身長(cm)を入力してください: "))

# 年齢10歳以上「かつ」身長120cm以上の場合
if age >= 10 and height >= 120:
    print("このアトラクションに乗れます!")
else:
    print("このアトラクションには乗れません")
    # どちらの条件を満たしていないか詳しく表示
    if age < 10:
        print("  → 10歳以上になってから来てね")
    if height < 120:
        print("  → 身長120cm以上になってから来てね")

実行結果(年齢12、身長130と入力した場合)

年齢を入力してください: 12
身長(cm)を入力してください: 130
このアトラクションに乗れます!

実行結果(年齢12、身長115と入力した場合)

年齢を入力してください: 12
身長(cm)を入力してください: 115
このアトラクションには乗れません
  → 身長120cm以上になってから来てね

年齢は10歳以上ですが、身長が120cm未満なので乗れません。

📌 andのまとめ

andは「かつ」という意味

両方の条件がTrueの時だけTrueになる

・1つでもFalseがあると結果はFalse

・3つ以上の条件もandで繋げられる

・範囲の判定(〇〇以上かつ△△以下)でよく使う

パート1はここまでです。パート2ではor演算子について学びます。

🔗 3. or演算子(または)

orは「または」という意味で、どちらか一方でもTrueならTrueになります。

🔰 orのイメージ

orは「AかBのどちらか1つでもあればOK」という時に使います。

例えば、傘が必要かどうかを考えてみましょう。「雨が降っている」または「雪が降っている」なら傘が必要です。両方降っている必要はなく、どちらか1つでも降っていれば傘を持っていきます。

💡 orが使われる場面

・「土曜日」または「日曜日」→ 休日

・「12歳以下」または「65歳以上」→ 割引対象

・「現金」または「クレジットカード」で支払い可能

どれも「どちらか1つでも当てはまればOK」という条件です。

📘 orの真理値表

orの結果を一覧表で確認しましょう。andとは逆の動きをします。

📌 orの結果一覧

条件A 条件B A or B 説明
True True True 両方OK → OK
True False True 片方OK → OK
False True True 片方OK → OK
False False False 両方ダメ → ダメ

ポイント:どちらか1つでもTrueならTrueになります!両方Falseの時だけFalseです。

💡 andとorの違い

and:両方Trueの時だけTrue(厳しい条件)

or:どちらか1つでもTrueならTrue(ゆるい条件)

andは「両方必要」、orは「どちらかあればOK」と覚えましょう。

📝 orの基本的な書き方

📝 orの書き方

orの左右に条件を書きます。

どちらか一方でもTrueなら、if文の中の処理が実行されます。

※スマートフォンでは横スクロールできます

if 条件A or 条件B:
    どちらかがTrueの時に実行する処理

📝 orの基本例:傘が必要かの判定

「雨または雪が降っている」場合に傘が必要というプログラムを作ってみましょう。

まず、天気を変数に設定します。

コード:変数の準備

※スマートフォンでは横スクロールできます

# weather = "雨" は「天気を雨に設定する」という意味
# weather という名前の変数に "雨" という文字列を代入している
weather = "雨"

次に、orを使って2つの条件を判定します。

コード:orで2つの条件を判定

※スマートフォンでは横スクロールできます

# if weather == "雨" or weather == "雪": の意味
# weather == "雨" → 「天気が雨か」をチェック(条件A)
# or → 「または」を意味する論理演算子
# weather == "雪" → 「天気が雪か」をチェック(条件B)
# どちらかがTrueなら、if文の中が実行される

if weather == "雨" or weather == "雪":
    print("傘を持っていきましょう")

elseを追加して完成させましょう。

完成コード:傘が必要かの判定

※スマートフォンでは横スクロールできます

# 今日の天気を設定
weather = "雨"

# 雨「または」雪の場合
if weather == "雨" or weather == "雪":
    print("傘を持っていきましょう")
else:
    print("傘は不要です")

実行結果

傘を持っていきましょう

💡 条件の評価の流れ

1. weather == "雨" → “雨” == “雨” なので True

2. weather == "雪" → “雨” == “雪” なので False

3. True or FalseTrue

4. 条件全体がTrueなので「傘を持っていきましょう」が表示される

ポイント:orは片方がTrueなら結果もTrueになります。

📝 orでどちらもFalseの場合

晴れの場合はどうなるでしょうか?

コード:晴れの場合

※スマートフォンでは横スクロールできます

# 今日の天気を設定
weather = "晴れ"  # 晴れに変更

# 雨「または」雪の場合
if weather == "雨" or weather == "雪":
    print("傘を持っていきましょう")
else:
    print("傘は不要です")

実行結果

傘は不要です

💡 条件の評価の流れ

1. weather == "雨" → “晴れ” == “雨” なので False

2. weather == "雪" → “晴れ” == “雪” なので False

3. False or FalseFalse

4. 条件全体がFalseなのでelse側の「傘は不要です」が表示される

ポイント:orでも両方Falseなら結果はFalseになります。

📝 休日判定

曜日を入力してもらって、週末かどうかを判定してみましょう。

完成コード:休日判定

※スマートフォンでは横スクロールできます

# input() でユーザーに曜日を入力してもらう
# 入力された文字列がそのまま day に代入される
day = input("今日の曜日を入力してください: ")

# day == "土曜日" → 入力が「土曜日」かをチェック
# day == "日曜日" → 入力が「日曜日」かをチェック
# どちらかがTrueなら「休日です」と表示される
if day == "土曜日" or day == "日曜日":
    print("今日は休日です!ゆっくり休みましょう")
else:
    print("今日は平日です。頑張りましょう")

実行結果(土曜日と入力した場合)

今日の曜日を入力してください: 土曜日
今日は休日です!ゆっくり休みましょう

実行結果(月曜日と入力した場合)

今日の曜日を入力してください: 月曜日
今日は平日です。頑張りましょう

📝 3つ以上の条件をorで繋ぐ

orも3つ以上の条件を繋げられます。

例えば、「12歳以下」「65歳以上」「学生」のどれか1つでも当てはまれば割引が適用されるプログラムを作ってみましょう。

まず、入力を受け取る部分を見てみます。

コード:入力を受け取る

※スマートフォンでは横スクロールできます

# 年齢を入力してもらう
age = int(input("年齢を入力してください: "))

# 学生かどうかを入力してもらう
# input("...") == "はい" は、入力が「はい」と等しいかを比較する
# 結果はTrueまたはFalseになる
# 「はい」と入力すればTrue、それ以外はFalseになる
is_student = input("学生ですか?(はい/いいえ): ") == "はい"

💡 is_student = input(“…”) == “はい” の解説

この1行で何をしているか分解すると:

1. input("...") → ユーザーの入力を受け取る(例:「はい」)

2. == "はい" → 入力が「はい」と等しいかを比較

3. 比較の結果(TrueまたはFalse)をis_studentに保存

「はい」と入力すればTrue、それ以外はFalseになります。

完成コード:割引対象者の判定

※スマートフォンでは横スクロールできます

# 年齢を入力してもらう
age = int(input("年齢を入力してください: "))

# 学生かどうかを入力してもらう
is_student = input("学生ですか?(はい/いいえ): ") == "はい"

# age <= 12 → 12歳以下かをチェック(子ども)
# age >= 65 → 65歳以上かをチェック(シニア)
# is_student → 学生かをチェック
# どれか1つでもTrueなら割引が適用される
if age <= 12 or age >= 65 or is_student:
    print("割引が適用されます!")
else:
    print("通常価格です")

実行結果(年齢25、学生「はい」と入力した場合)

年齢を入力してください: 25
学生ですか?(はい/いいえ): はい
割引が適用されます!

25歳は12歳以下でも65歳以上でもありませんが、学生なので割引が適用されます。

💡 3つ以上のorの動作

orは「1つでもTrueがあればTrue」になります。

False or False or True → True(1つでもOKならOK)

True or False or False → True(1つでもOKならOK)

False or True or False → True(1つでもOKならOK)

False or False or False → False(全部ダメならダメ)

📌 orのまとめ

orは「または」という意味

どちらか1つでもTrueならTrueになる

・両方Falseの時だけFalseになる

・3つ以上の条件もorで繋げられる

・「〇〇または△△または□□」のような判定でよく使う

🔗 4. not演算子(否定)

notは条件の結果を反転させます。TrueをFalseに、FalseをTrueに変えます。

🔰 notのイメージ

notは「条件の逆」を表現したい時に使います。

例えば「雨が降っていない」という条件を考えてみましょう。「雨が降っている」がFalseの時、「雨が降っていない」はTrueです。notは、このように条件を反対にします。

💡 notが使われる場面

・「雨が降っていない」→ 洗濯物を干せる

・「ログインしていない」→ ログイン画面を表示

・「リストに含まれていない」→ アクセス拒否

📘 notの真理値表

notの結果を確認しましょう。notはとてもシンプルです。

📌 notの結果一覧

条件A not A 説明
True False TrueをFalseに反転
False True FalseをTrueに反転

ポイント:notは条件の結果をそのまま反対にします!

📝 notの基本的な書き方

📝 notの書き方

notの後ろに条件を書きます。

条件がFalseの時に、if文の中の処理が実行されます。

(Falseがnotで反転してTrueになるため)

※スマートフォンでは横スクロールできます

if not 条件:
    条件がFalseの時に実行する処理

📝 notの基本例:雨が降っていない場合

「雨が降っていない」場合に洗濯物を干せるというプログラムを作ってみましょう。

まず、雨が降っているかどうかを変数に設定します。

コード:変数の準備

※スマートフォンでは横スクロールできます

# is_raining = False は「雨が降っていない状態に設定する」という意味
# is_raining という名前の変数に False を代入している
# False は「いいえ」「降っていない」という意味のブール値
is_raining = False

💡 変数名の工夫

ブール型(True/False)の変数名は「is_〇〇」「has_〇〇」「can_〇〇」などにすると、True/Falseの意味が分かりやすくなります。

is_raining → 雨が降っているか?

is_logged_in → ログインしているか?

has_license → 免許を持っているか?

can_drive → 運転できるか?

次に、notを使って「雨が降っていない」を判定します。

コード:notで条件を反転

※スマートフォンでは横スクロールできます

# if not is_raining: の意味
# is_raining → 雨が降っているかの状態(今はFalse)
# not is_raining → 雨が降っていない場合(FalseをTrueに反転)
# 結果がTrueなら、if文の中が実行される

if not is_raining:
    print("雨は降っていません。洗濯物を干せます!")

完成コード:雨が降っていない場合の判定

※スマートフォンでは横スクロールできます

# 雨が降っているかどうか
is_raining = False  # 雨が降っていない

# 雨が降っていない場合
if not is_raining:
    print("雨は降っていません。洗濯物を干せます!")
else:
    print("雨が降っています。洗濯物は部屋干しにしましょう")

実行結果

雨は降っていません。洗濯物を干せます!

💡 条件の評価の流れ

1. is_rainingFalse

2. not FalseTrue(Falseが反転してTrueになる)

3. 条件全体がTrueなので「洗濯物を干せます!」が表示される

📝 notの実用的な使い方:ログイン状態のチェック

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

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

※スマートフォンでは横スクロールできます

# ログイン状態(False = ログインしていない)
is_logged_in = False

# not is_logged_in → ログインしていない場合
# is_logged_in が False なので、not False = True
# 条件がTrueなので「ログインしてください」が表示される
if not is_logged_in:
    print("ログインしてください")
else:
    print("ようこそ!")

実行結果

ログインしてください

📝 notと比較演算子の関係

notは比較演算子と組み合わせて使うこともできますが、比較演算子を変える方が読みやすいことが多いです。

📌 notを使う書き方と同じ意味の書き方

notを使う書き方 同じ意味の書き方 おすすめ
not x >= 10 x < 10 右の方が読みやすい
not x == "hello" x != "hello" 右の方が読みやすい
not x < 5 x >= 5 右の方が読みやすい
not is_raining notを使うのが自然

ポイント:ブール型の変数(True/False)にはnotを使い、比較演算子の場合は演算子を変える方が読みやすいです。

📌 notのまとめ

notは条件の結果を反転させる

・TrueをFalseに、FalseをTrueに変える

・ブール型の変数(is_〇〇など)と一緒に使うと読みやすい

・比較演算子の場合は、notより演算子を変える方が読みやすいことが多い

パート2はここまでです。パート3ではandorの組み合わせと、in演算子について学びます。

🔗 5. andとorの組み合わせ

andとorを組み合わせると、もっと複雑な条件を表現できます。ただし、優先順位に注意が必要です。

🔰 なぜ組み合わせが必要?

実際のプログラムでは、andとorを組み合わせた複雑な条件が必要になることがあります。

例えば、映画の年齢制限を考えてみましょう。「18歳以上」なら誰でも見られます。でも「16歳以上」でも「保護者の許可」があれば見られる、という条件の場合はどうでしょうか?

これを日本語で書くと「18歳以上」または「16歳以上かつ保護者の許可あり」となります。

💡 andとorを組み合わせる場面

・「18歳以上」または「16歳以上かつ保護者の許可あり」→ 映画を見られる

・「会員」かつ「5000円以上またはポイントカードあり」→ 送料無料

⚠️ 演算子の優先順位

andとorを一緒に使う時は、優先順位に注意が必要です。

算数で「足し算より掛け算が先」というルールがあるように、論理演算子にも優先順位があります。

🔑 超重要!優先順位

論理演算子には優先順位があります:

not > and > or

(notが最も優先、orが最も後)

つまり、andはorより先に評価されます

複雑な条件では、カッコ()を使って優先順位を明確にしましょう!

📝 優先順位の例

カッコの有無で結果が変わる例を見てみましょう。

コード:カッコなしの場合

※スマートフォンでは横スクロールできます

# カッコなし
# True or False and False
# andが先に評価されるので:
# 1. False and False → False
# 2. True or False → True
result1 = True or False and False
print(f"True or False and False = {result1}")

実行結果

True or False and False = True

コード:カッコありの場合

※スマートフォンでは横スクロールできます

# カッコあり
# (True or False) and False
# カッコ内が先に評価されるので:
# 1. True or False → True
# 2. True and False → False
result2 = (True or False) and False
print(f"(True or False) and False = {result2}")

実行結果

(True or False) and False = False

💡 カッコを使う習慣をつけよう

同じTrue、False、and、orを使っていても、カッコの有無で結果が違います!

複雑な条件では、カッコを使って意図を明確にしましょう。

カッコがあると:

・読む人が条件を理解しやすい

・バグを防げる

・優先順位を覚えていなくても大丈夫

📝 実用例:映画の年齢制限

「18歳以上」または「16歳以上かつ保護者の許可あり」なら映画を見られるプログラムを作ってみましょう。

まず、条件を整理します。

📌 映画を見られる条件

条件1:18歳以上 → OK

条件2:16歳以上 かつ 保護者の許可あり → OK

条件1 または 条件2を満たせば見られます。

入力を受け取る部分を見てみます。

コード:入力を受け取る

※スマートフォンでは横スクロールできます

# int(input("...")) で年齢を整数として受け取る
age = int(input("年齢: "))

# input("...") == "はい" で、入力が「はい」かどうかを判定
# 結果(TrueまたはFalse)が has_permission に代入される
has_permission = input("保護者の許可がありますか?(はい/いいえ): ") == "はい"

次に、条件を判定します。ここがポイントです。

コード:条件の判定(カッコで優先順位を明確に)

※スマートフォンでは横スクロールできます

# age >= 18 → 18歳以上かをチェック(条件1)
# (age >= 16 and has_permission) → 16歳以上かつ許可ありかをチェック(条件2)
# 条件1 or 条件2 → どちらかを満たせばOK
# カッコで「16歳以上かつ許可あり」をグループ化している
if age >= 18 or (age >= 16 and has_permission):
    print("この映画を見られます")

完成コード:映画の年齢制限

※スマートフォンでは横スクロールできます

# 年齢と保護者の許可を入力
age = int(input("年齢: "))
has_permission = input("保護者の許可がありますか?(はい/いいえ): ") == "はい"

# 18歳以上「または」(16歳以上「かつ」保護者の許可あり)
if age >= 18 or (age >= 16 and has_permission):
    print("この映画を見られます")
else:
    print("この映画は見られません")

実行結果(年齢16、許可「はい」と入力した場合)

年齢: 16
保護者の許可がありますか?(はい/いいえ): はい
この映画を見られます

16歳で保護者の許可があるので、見られます。

実行結果(年齢16、許可「いいえ」と入力した場合)

年齢: 16
保護者の許可がありますか?(はい/いいえ): いいえ
この映画は見られません

16歳ですが保護者の許可がないので、見られません。

実行結果(年齢20、許可「いいえ」と入力した場合)

年齢: 20
保護者の許可がありますか?(はい/いいえ): いいえ
この映画を見られます

20歳(18歳以上)なので、許可がなくても見られます。

📝 複雑な条件を分かりやすくする方法

条件が複雑になったら、一度変数に入れると分かりやすくなります。

コード:条件を変数に入れる

※スマートフォンでは横スクロールできます

# 年齢と許可の状態
age = 16
has_permission = True

# 条件を分かりやすい名前の変数に入れる
# is_adult には「成人かどうか」の結果(TrueまたはFalse)が入る
is_adult = age >= 18

# is_teen_with_permission には「16歳以上で許可あり」の結果が入る
is_teen_with_permission = age >= 16 and has_permission

# 変数を使って条件を書く
# 読みやすくなった!
if is_adult or is_teen_with_permission:
    print("この映画を見られます")
else:
    print("この映画は見られません")

💡 この書き方のメリット

・条件の意味が変数名から分かる

if is_adult or is_teen_with_permission:は読みやすい

・後からコードを読んでも理解しやすい

・条件を修正する時に間違いにくい

📌 andとorの組み合わせのまとめ

・優先順位:not > and > or

・andはorより先に評価される

・カッコ()を使って優先順位を明確にしよう

・条件を変数に入れると読みやすくなる

🔍 6. in演算子

in演算子を使うと、値がリストや文字列に含まれているかを簡単にチェックできます。

🔰 in演算子とは?

in演算子は「〜の中に含まれているか?」をチェックします。

例えば、果物のリストがあって、「バナナはリストに含まれているか?」を調べたい時に使います。

💡 in演算子が使われる場面

・「バナナ」は果物リストに含まれているか?

・「Python」は文章の中に含まれているか?

・「土曜日」は週末リストに含まれているか?

📘 in演算子の基本

📌 in演算子の書き方

書き方 意味 結果
値 in リスト 値がリストに含まれている True / False
値 in 文字列 値が文字列に含まれている True / False
値 not in リスト 値がリストに含まれていない True / False

📝 リストに含まれているかチェック

リストに特定の値が含まれているかをチェックしてみましょう。

まず、リストを作ります。

コード:リストの準備

※スマートフォンでは横スクロールできます

# fruits = [...] はリストを作成している
# リストは複数の値をまとめて入れる箱のようなもの
# [ ] の中にカンマ区切りで値を入れる
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]

次に、inでリストをチェックします。

コード:inでリストをチェック

※スマートフォンでは横スクロールできます

# "バナナ" in fruits の意味
# 「バナナ」がfruitsリストに含まれているかをチェック
# 含まれている場合はTrue、含まれていない場合はFalse
if "バナナ" in fruits:
    print("バナナはリストに含まれています")

完成コード:果物リストのチェック

※スマートフォンでは横スクロールできます

# 果物のリストを作成
fruits = ["りんご", "バナナ", "オレンジ", "ぶどう"]

# ユーザーに果物の名前を入力してもらう
fruit = input("果物の名前を入力: ")

# リストに含まれているかチェック
if fruit in fruits:
    print(f"{fruit}はリストに含まれています")
else:
    print(f"{fruit}はリストに含まれていません")

実行結果(バナナと入力した場合)

果物の名前を入力: バナナ
バナナはリストに含まれています

実行結果(いちごと入力した場合)

果物の名前を入力: いちご
いちごはリストに含まれていません

「いちご」はリストに含まれていないので、Falseになります。

📝 文字列に含まれているかチェック

in演算子は文字列に対しても使えます。文字列内に特定の文字や単語が含まれているかをチェックできます。

完成コード:文字列内の検索

※スマートフォンでは横スクロールできます

# 文章を設定
text = "こんにちは、世界!Pythonは楽しい!"

# "世界" in text → textの中に「世界」が含まれているか
if "世界" in text:
    print("「世界」という文字が含まれています")

# "Python" in text → textの中に「Python」が含まれているか
if "Python" in text:
    print("「Python」という文字が含まれています")

# "Java" in text → textの中に「Java」が含まれているか
if "Java" in text:
    print("「Java」という文字が含まれています")
else:
    print("「Java」という文字は含まれていません")

実行結果

「世界」という文字が含まれています
「Python」という文字が含まれています
「Java」という文字は含まれていません

📝 in演算子でorを置き換える

in演算子を使うと、複数のorをシンプルに書き換えられます。これがin演算子の大きなメリットです。

例えば、休日かどうかを判定する時を考えてみましょう。

💡 orで書くと長くなる

条件が増えると、どんどん長くなります。

※スマートフォンでは横スクロールできます

# orで書く場合(長い)
if day == "土曜日" or day == "日曜日":
    print("休日です")

# さらに祝日を追加すると...
if day == "土曜日" or day == "日曜日" or day == "祝日":
    print("休みです")

💡 inで書くとシンプル

条件が増えても、リストに追加するだけ!

※スマートフォンでは横スクロールできます

# inを使う場合(シンプル)
if day in ["土曜日", "日曜日"]:
    print("休日です")

# 祝日を追加しても読みやすい
if day in ["土曜日", "日曜日", "祝日"]:
    print("休みです")

完成コード:休日判定(in演算子版)

※スマートフォンでは横スクロールできます

# 曜日を入力
day = input("今日の曜日を入力: ")

# 週末のリストを作成
# weekend という変数に、週末の曜日のリストを代入
weekend = ["土曜日", "日曜日"]

# day in weekend → 入力した曜日が週末リストに含まれているか
if day in weekend:
    print("今日は週末です!ゆっくり休みましょう")
else:
    print("今日は平日です。頑張りましょう")

実行結果(土曜日と入力した場合)

今日の曜日を入力: 土曜日
今日は週末です!ゆっくり休みましょう

📝 季節の判定

月から季節を判定するプログラムを、in演算子を使って作ってみましょう。

完成コード:季節の判定

※スマートフォンでは横スクロールできます

# 月を入力
month = int(input("月(1-12)を入力: "))

# [3, 4, 5] → 春の月のリスト
# month in [3, 4, 5] → 入力した月が春のリストに含まれているか
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
夏です🌻

💡 orで書いた場合との比較

もしorで書いたら、このようになります:

※スマートフォンでは横スクロールできます

# orで書くと長い...
if month == 3 or month == 4 or month == 5:
    print("春です🌸")

in演算子を使った方がずっと読みやすいですね!

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

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

完成コード:アクセス権限のチェック

※スマートフォンでは横スクロールできます

# 許可されたユーザーのリスト
allowed_users = ["admin", "user1", "user2"]

# ユーザー名を入力してもらう
username = input("ユーザー名を入力: ")

# username not in allowed_users の意味
# ユーザー名がリストに含まれていないかをチェック
# 含まれていない場合はTrue、含まれている場合はFalse
if username not in allowed_users:
    print("アクセス権限がありません")
else:
    print(f"ようこそ、{username}さん!")

実行結果(adminと入力した場合)

ユーザー名を入力: admin
ようこそ、adminさん!

実行結果(guestと入力した場合)

ユーザー名を入力: guest
アクセス権限がありません

「guest」はリストに含まれていないので、アクセスが拒否されます。

💡 in と not in の違い

x in リスト → xがリストに含まれている場合True

x not in リスト → xがリストに含まれていない場合True

not inは2つの単語で1つの演算子として使えます。

📌 in演算子のまとめ

値 in リスト → 値がリストに含まれているかチェック

値 in 文字列 → 値が文字列に含まれているかチェック

値 not in リスト → 値がリストに含まれていないかチェック

・orで繋ぐより短く読みやすく書ける

・条件が増えてもリストに追加するだけ

パート3はここまでです。パート4では実践的な例を見ていきます。

🎯 7. 実践的な例

ここまで学んだ論理演算子を使って、実用的なプログラムを作ってみましょう。

例1: ログインシステム

ユーザー名とパスワードの両方が正しい場合にログインできるシステムを作ります。

📌 ログインの条件

・ユーザー名が正しい かつ パスワードが正しい → ログイン成功

・どちらか一方でも間違っている → ログイン失敗

andを使って両方の条件をチェックします。

まず、正しいユーザー名とパスワードを設定します。

コード:正解のデータを設定

※スマートフォンでは横スクロールできます

# correct_username に正しいユーザー名を設定
# correct_password に正しいパスワードを設定
correct_username = "admin"
correct_password = "pass123"

次に、ユーザーに入力してもらい、andで両方の条件をチェックします。

完成コード:ログインシステム

※スマートフォンでは横スクロールできます

# 正しいユーザー名とパスワードを設定
correct_username = "admin"
correct_password = "pass123"

# ユーザーに入力してもらう
print("=== ログイン画面 ===")
username = input("ユーザー名: ")
password = input("パスワード: ")

# username == correct_username → ユーザー名が正しいか
# password == correct_password → パスワードが正しいか
# 両方Trueなら「ログイン成功」
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
パスワード: wrong
パスワードが間違っています

例2: 試験の合否判定(複数科目)

3科目の点数を入力して、合否を判定するプログラムを作ります。

📌 合否の条件

・全科目60点以上 → 「全科目合格」

・平均60点以上 → 「平均合格」(一部科目が60点未満でもOK)

・それ以外 → 「不合格」

完成コード:複数科目の合否判定

※スマートフォンでは横スクロールできます

# 3科目の点数を入力
print("=== 試験結果入力 ===")
math = int(input("数学の点数: "))
english = int(input("英語の点数: "))
japanese = int(input("国語の点数: "))

# 平均点を計算
# (math + english + japanese) で合計を計算
# / 3 で3で割って平均を求める
average = (math + english + japanese) / 3

print(f"\n=== 結果 ===")
print(f"平均点: {average:.1f}点")

# math >= 60 and english >= 60 and japanese >= 60
# 3科目すべてが60点以上かをチェック
if math >= 60 and english >= 60 and japanese >= 60:
    print("判定: 全科目合格!素晴らしい!")
elif average >= 60:
    # 平均60点以上(科目によっては60点未満あり)
    print("判定: 平均合格")
    # どの科目が60点未満か表示
    print("復習が必要な科目:")
    if math < 60:
        print(f"  - 数学({math}点)")
    if english < 60:
        print(f"  - 英語({english}点)")
    if japanese < 60:
        print(f"  - 国語({japanese}点)")
else:
    print("判定: 不合格...次回頑張りましょう")

実行結果(数学80、英語45、国語70と入力した場合)

=== 試験結果入力 ===
数学の点数: 80
英語の点数: 45
国語の点数: 70

=== 結果 ===
平均点: 65.0点
判定: 平均合格
復習が必要な科目:
  - 英語(45点)

例3: 割引計算(複数条件)

年齢と購入金額によって割引率が変わるプログラムを作ります。

📌 割引の条件

・12歳以下 かつ 1000円以上 → 30%割引(子ども特別割引)

・12歳以下 → 20%割引(子ども割引)

・65歳以上 → 15%割引(シニア割引)

・それ以外 → 割引なし

完成コード:割引計算

※スマートフォンでは横スクロールできます

# 商品の値段と年齢を入力
print("=== お会計 ===")
price = int(input("商品の値段(円): "))
age = int(input("お客様の年齢: "))

# 割引率を決定(条件の順番が重要!)
# age <= 12 and price >= 1000 → 12歳以下で1000円以上
# より厳しい条件を先にチェックする
if age <= 12 and price >= 1000:
    discount = 0.3
    discount_name = "子ども特別割引(30%OFF)"
elif age <= 12:
    discount = 0.2
    discount_name = "子ども割引(20%OFF)"
elif age >= 65:
    discount = 0.15
    discount_name = "シニア割引(15%OFF)"
else:
    discount = 0
    discount_name = "割引なし"

# 最終価格を計算
# int(price * discount) で割引額を整数に変換
discount_amount = int(price * discount)
final_price = price - discount_amount

# 結果を表示
print(f"\n=== レシート ===")
print(f"商品価格: {price}円")
print(f"適用割引: {discount_name}")
print(f"割引額:   -{discount_amount}円")
print(f"お支払い: {final_price}円")

実行結果(値段1500、年齢10と入力した場合)

=== お会計 ===
商品の値段(円): 1500
お客様の年齢: 10

=== レシート ===
商品価格: 1500円
適用割引: 子ども特別割引(30%OFF)
割引額:   -450円
お支払い: 1050円

💡 条件の順番が重要!

このプログラムでは、条件の順番が大切です。

「12歳以下かつ1000円以上」を最初にチェックしないと、30%割引が適用されません。

if-elif文は上から順番にチェックされるので、より厳しい条件を先に書きましょう。

例4: うるう年の判定

論理演算子を組み合わせて、うるう年かどうかを判定します。

📌 うるう年の条件

以下のどちらかを満たす年がうるう年です:

1. 4で割り切れて、100で割り切れない年

2. 400で割り切れる年

論理式:(4で割り切れる and 100で割り切れない) or 400で割り切れる

完成コード:うるう年の判定

※スマートフォンでは横スクロールできます

# 年を入力
year = int(input("年を入力してください: "))

# 各条件を変数に入れる(分かりやすくするため)
# year % 4 == 0 → 4で割った余りが0かどうか(割り切れるか)
divisible_by_4 = year % 4 == 0
divisible_by_100 = year % 100 == 0
divisible_by_400 = year % 400 == 0

# うるう年の判定
# (4で割り切れる かつ 100で割り切れない) または 400で割り切れる
# not divisible_by_100 → 100で割り切れないか
is_leap = (divisible_by_4 and not divisible_by_100) or divisible_by_400

# 結果を表示
if is_leap:
    print(f"{year}年はうるう年です")
    print(f"2月は29日まであります")
else:
    print(f"{year}年はうるう年ではありません")
    print(f"2月は28日までです")

実行結果(2024と入力した場合)

年を入力してください: 2024
2024年はうるう年です
2月は29日まであります

実行結果(1900と入力した場合)

年を入力してください: 1900
1900年はうるう年ではありません
2月は28日までです

1900年は4で割り切れますが、100でも割り切れ、400では割り切れないのでうるう年ではありません。

実行結果(2000と入力した場合)

年を入力してください: 2000
2000年はうるう年です
2月は29日まであります

2000年は400で割り切れるのでうるう年です。

例5: じゃんけんゲーム

ユーザーとコンピューターでじゃんけんをするゲームを作ります。

完成コード:じゃんけんゲーム

※スマートフォンでは横スクロールできます

# import random でランダムな値を使うためのモジュールを読み込む
# モジュールは便利な機能をまとめたもの
import random

print("=== じゃんけんゲーム ===")
print()

# 選択肢のリストを作成
hands = ["グー", "チョキ", "パー"]

# ユーザーの手を入力
user = input("グー、チョキ、パーのどれか入力: ")

# user not in hands → 入力が正しくないかチェック
# 「グー」「チョキ」「パー」以外が入力されたらエラー
if user not in hands:
    print("グー、チョキ、パーのどれかを入力してください")
else:
    # random.choice(hands) でリストからランダムに1つ選ぶ
    computer = random.choice(hands)
    
    # 結果を表示
    print()
    print(f"あなた: {user}")
    print(f"コンピューター: {computer}")
    print("-" * 20)
    
    # 勝敗判定
    if user == computer:
        # 同じ手はあいこ
        print("あいこ!")
    elif (user == "グー" and computer == "チョキ") or \
         (user == "チョキ" and computer == "パー") or \
         (user == "パー" and computer == "グー"):
        # ユーザーの勝ちパターン
        # \ は長い行を次の行に続けるための記号
        print("あなたの勝ち!🎉")
    else:
        # 上記以外はユーザーの負け
        print("あなたの負け...😢")

実行結果の例

=== じゃんけんゲーム ===

グー、チョキ、パーのどれか入力: グー

あなた: グー
コンピューター: チョキ
--------------------
あなたの勝ち!🎉

💡 コードの解説ポイント

import random → ランダムな値を使うためのモジュールを読み込む

random.choice(hands) → リストからランダムに1つ選ぶ

user not in hands → 入力が正しくないかチェック

\ → 長い行を次の行に続けるための記号

パート4はここまでです。パート5では練習問題とまとめを見ていきます。

📝 練習問題(12問)

ここまで学んだことを実際に手を動かして確認しましょう。

問題1:範囲の判定(初級)

📋 問題

数字を入力してもらい、10以上20以下なら「範囲内です」と表示しましょう。

ヒント:「10以上」かつ「20以下」→ andを使う

解答を見る

コード

※スマートフォンでは横スクロールできます

# 数字を入力
# int(input("...")) で入力を整数に変換
number = int(input("数字を入力: "))

# number >= 10 → 10以上かをチェック
# number <= 20 → 20以下かをチェック
# 両方Trueなら「範囲内です」と表示される
if number >= 10 and number <= 20:
    print("範囲内です")
else:
    print("範囲外です")

実行結果(15と入力した場合)

数字を入力: 15
範囲内です

💡 別解(数学的な書き方)

※スマートフォンでは横スクロールできます

# Pythonでは数学的な範囲の書き方もできます
if 10 <= number <= 20:
    print("範囲内です")

問題2:休日判定(初級)

📋 問題

曜日を入力してもらい、「土曜日」または「日曜日」なら「休日です」と表示しましょう。

ヒント:「土曜日」または「日曜日」→ orを使う

解答を見る

コード(orを使用)

※スマートフォンでは横スクロールできます

# 曜日を入力
day = input("曜日を入力: ")

# day == "土曜日" → 土曜日かをチェック
# day == "日曜日" → 日曜日かをチェック
# どちらかTrueなら「休日です」と表示される
if day == "土曜日" or day == "日曜日":
    print("休日です")
else:
    print("平日です")

実行結果(土曜日と入力した場合)

曜日を入力: 土曜日
休日です

💡 別解(inを使用)

※スマートフォンでは横スクロールできます

# in演算子を使うとよりシンプルに書けます
if day in ["土曜日", "日曜日"]:
    print("休日です")

問題3:範囲外の判定(初級)

📋 問題

数字を入力してもらい、0未満または100より大きい場合は「範囲外です」と表示しましょう。

ヒント:「0未満」または「100より大きい」→ orを使う

解答を見る

コード

※スマートフォンでは横スクロールできます

# 数字を入力
number = int(input("数字を入力: "))

# number < 0 → 0未満かをチェック
# number > 100 → 100より大きいかをチェック
# どちらかTrueなら「範囲外です」と表示される
if number < 0 or number > 100:
    print("範囲外です")
else:
    print("範囲内です")

実行結果(-5と入力した場合)

数字を入力: -5
範囲外です

問題4:映画の年齢制限(中級)

📋 問題

年齢を入力してもらい、以下のように表示しましょう:

・15歳未満 → 「保護者同伴が必要」

・15歳以上18歳未満 → 「PG15指定」

・18歳以上 → 「視聴可能」

解答を見る

コード

※スマートフォンでは横スクロールできます

# 年齢を入力
age = int(input("年齢: "))

# 年齢に応じた判定
# if-elif-elseは上から順にチェックされる
if age < 15:
    print("保護者同伴が必要")
elif age < 18:
    # elifに来る時点で15以上が確定している
    # なので age < 18 は「15以上18未満」を意味する
    print("PG15指定")
else:
    print("視聴可能")

実行結果(16と入力した場合)

年齢: 16
PG15指定

問題5:3つの数の最大値(中級)

📋 問題

3つの数字を入力してもらい、その中の最大値を表示しましょう。

ヒント:aが最大 = 「aがb以上」かつ「aがc以上」

解答を見る

コード

※スマートフォンでは横スクロールできます

# 3つの数字を入力
a = int(input("1つ目の数字: "))
b = int(input("2つ目の数字: "))
c = int(input("3つ目の数字: "))

# 最大値を判定(andを使用)
# a >= b and a >= c → aがbとc両方以上か
if a >= b and a >= c:
    print(f"最大値: {a}")
elif b >= a and b >= c:
    # bがaとc両方以上なら、bが最大
    print(f"最大値: {b}")
else:
    # 上記以外なら、cが最大
    print(f"最大値: {c}")

実行結果(5, 9, 3と入力した場合)

1つ目の数字: 5
2つ目の数字: 9
3つ目の数字: 3
最大値: 9

💡 別解(max関数を使用)

※スマートフォンでは横スクロールできます

# Pythonには最大値を求めるmax()関数がある
print(f"最大値: {max(a, b, c)}")

問題6:母音チェック(中級)

📋 問題

1文字を入力してもらい、それが母音(a, i, u, e, o)なら「母音です」と表示しましょう。

ヒント:in演算子を使うと簡単

解答を見る

コード

※スマートフォンでは横スクロールできます

# 1文字を入力
# .lower() で入力を小文字に変換(大文字でも判定できるように)
char = input("1文字を入力: ").lower()

# char in "aiueo" → 入力した文字が母音に含まれるか
# 文字列に対してもin演算子が使える
if char in "aiueo":
    print("母音です")
else:
    print("母音ではありません")

実行結果(Aと入力した場合)

1文字を入力: A
母音です

.lower()で小文字に変換されるので、大文字のAでも判定できます。

問題7:うるう年の判定(中級)

📋 問題

年を入力してもらい、うるう年かどうかを判定しましょう。

うるう年の条件:

・4で割り切れて、100で割り切れない年

・または、400で割り切れる年

解答を見る

コード

※スマートフォンでは横スクロールできます

# 年を入力
year = int(input("年を入力: "))

# うるう年の判定
# year % 4 == 0 → 4で割り切れるか
# year % 100 != 0 → 100で割り切れないか
# year % 400 == 0 → 400で割り切れるか
# カッコで優先順位を明確にしている
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print(f"{year}年はうるう年です")
else:
    print(f"{year}年はうるう年ではありません")

実行結果(2024と入力した場合)

年を入力: 2024
2024年はうるう年です

問題8:パスワードの強度チェック(中級)

📋 問題

パスワードを入力してもらい、8文字以上数字が含まれていれば「強いパスワードです」と表示しましょう。

ヒント:8文字以上 かつ 数字が含まれている → andを使う

解答を見る

コード

※スマートフォンでは横スクロールできます

# パスワードを入力
password = input("パスワードを入力: ")

# 数字が含まれているかチェック
# has_number は最初False、数字が見つかったらTrueに変わる
has_number = False

# for char in password でパスワードを1文字ずつチェック
for char in password:
    # char in "0123456789" → その文字が数字かどうか
    if char in "0123456789":
        has_number = True
        break  # 1つ見つかったらループを抜ける

# len(password) >= 8 → パスワードが8文字以上か
# has_number → 数字が含まれているか
# 両方Trueなら「強いパスワード」
if len(password) >= 8 and has_number:
    print("強いパスワードです")
else:
    print("弱いパスワードです")
    if len(password) < 8:
        print("  → 8文字以上にしてください")
    if not has_number:
        print("  → 数字を含めてください")

実行結果(mypass123と入力した場合)

パスワードを入力: mypass123
強いパスワードです

問題9:三角形の成立条件(上級)

📋 問題

3辺の長さを入力してもらい、三角形が成立するかどうかを判定しましょう。

三角形の条件:どの2辺の和も、残りの1辺より大きい

ヒント:3つの条件をすべて満たす必要がある → andを使う

解答を見る

コード

※スマートフォンでは横スクロールできます

# 3辺の長さを入力
a = int(input("1辺目: "))
b = int(input("2辺目: "))
c = int(input("3辺目: "))

# 3つの条件をすべて満たすかチェック(and)
# (a + b > c) → a+bがcより大きいか
# (b + c > a) → b+cがaより大きいか
# (c + a > b) → c+aがbより大きいか
if (a + b > c) and (b + c > a) and (c + a > b):
    print("三角形が成立します")
else:
    print("三角形が成立しません")

実行結果(3, 4, 5と入力した場合)

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

# math >= 60 and english >= 60 and japanese >= 60
# 3科目すべてが60点以上か
if math >= 60 and english >= 60 and japanese >= 60:
    print("全科目合格")
elif average >= 60:
    print("平均合格")
else:
    print("不合格")

実行結果(80, 50, 70と入力した場合)

数学: 80
英語: 50
国語: 70
平均合格

問題11:割引計算(複数条件)(上級)

📋 問題

商品の値段と年齢を入力してもらい、以下のルールで割引を適用しましょう。

・12歳以下かつ1000円以上: 30%割引

・12歳以下: 20%割引

・65歳以上: 15%割引

・それ以外: 割引なし

解答を見る

コード

※スマートフォンでは横スクロールできます

# 商品の値段と年齢を入力
price = int(input("商品の値段: "))
age = int(input("年齢: "))

# 割引率を決定(条件の順番が重要!)
# より厳しい条件(12歳以下かつ1000円以上)を先にチェック
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("割引なし")

# 最終価格を計算
# price * (1 - discount) で割引後の価格を計算
final_price = price * (1 - discount)
print(f"お支払い金額: {int(final_price)}円")

実行結果(1500円、10歳と入力した場合)

商品の値段: 1500
年齢: 10
30%割引!
お支払い金額: 1050円

問題12:じゃんけんゲーム(上級)

📋 問題

ユーザーとコンピューター(ランダム)でじゃんけんをして、勝敗を判定しましょう。

ヒント:import randomrandom.choice(リスト)を使う

解答を見る

コード

※スマートフォンでは横スクロールできます

# random モジュールをインポート
import random

# 選択肢のリスト
hands = ["グー", "チョキ", "パー"]

# ユーザーとコンピューターの手
user = input("グー、チョキ、パー: ")
# random.choice(hands) でリストからランダムに1つ選ぶ
computer = random.choice(hands)

print(f"コンピューター: {computer}")

# user not in hands → 入力が正しくないか
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です。

例:

・「18歳以上かつ免許がある」→ age >= 18 and has_license

・「土曜日または日曜日」→ day == "土曜日" or day == "日曜日"

Q2: andとorを一緒に使う時の優先順位は?

andの方がorより先に評価されます。

優先順位:not > and > or

複雑な条件では、カッコ()を使って優先順位を明確にするのがおすすめです。

例:if age >= 18 or (age >= 16 and has_permission):

Q3: in演算子はいつ使うべき?

複数の値のどれかに一致するかをチェックする時に便利です。

orで繋ぐより、コードが短く読みやすくなります。

例:

・❌ if x == "A" or x == "B" or x == "C":

・○ if x in ["A", "B", "C"]:

Q4: not演算子はどんな時に使う?

条件の結果を反対にしたい時に使います。

特にブール型の変数(is_〇〇など)と一緒に使うと読みやすいです。

例:if not is_logged_in:(ログインしていない場合)

ただし、比較演算子の場合はnotより演算子を変える方が分かりやすいです。

例:not x >= 10 より x < 10 の方が読みやすい

Q5: 条件が複雑すぎて分かりにくい時は?

条件を一度変数に入れると分かりやすくなります。

例:

※スマートフォンでは横スクロールできます

is_adult = age >= 18
is_teen_with_permission = age >= 16 and has_permission
if is_adult or is_teen_with_permission:
    print("OK")

名前を付けることで、条件の意味が明確になります。

🎉 ステップ12のまとめ

✅ このステップで学んだこと

andは「かつ」→ 両方Trueの時だけTrue

orは「または」→ どちらか1つでもTrueならTrue

notは「否定」→ TrueとFalseを反転

✓ 優先順位:not > and > or

✓ 複雑な条件ではカッコ()を使って優先順位を明確にする

in演算子でリストや文字列に含まれるかをチェック

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

✓ 条件を変数に入れると読みやすくなる

💪 次のステップへ

論理演算子をマスターしました!

これで、複雑な条件を自由に組み合わせられるようになりました。

次のステップでは、for文(繰り返し処理)を学びます。

同じ処理を何度も繰り返すプログラムが書けるようになりますよ!

📝

学習メモ

Pythonプログラミング基礎 - Step 13

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