Py初めてのPython

Day 2条件分岐・ループ(判断と繰り返し)

比較演算子と論理演算子(and/or/not)

条件式そのものの書き方を学び、複数条件を and / or / not で組み合わせる。

条件は「比べた結果」でできている

if の後ろに書く条件は、実は「2つの値を比べて True か False を返す式」です。この比べるための記号を比較演算子と呼びます。数学とほぼ同じですが、いくつか記号が違うので最初に確認します。

  • == : 等しい(イコール2つ。1つの = は「代入」なので意味が全く違う)
  • != : 等しくない
  • > : より大きい / < : より小さい
  • >= : 以上 / <= : 以下

間違い: = は代入

PYTHON
if age = 18:  # エラー。これは「代入」の記号
    print("18歳")

正しい: == は比較

PYTHON
if age == 18:  # 「等しいか?」を比べる
    print("18歳")

= と == の取り違えは最頻出

= は「右の値を左に入れる(代入)」、== は「左右が等しいか比べる」です。if の中で = を1つだけ書くと、Pythonは文法エラーで止めてくれます。エラーメッセージに SyntaxError と出たら、まず == の書き忘れを疑ってください。

複数の条件を組み合わせる: and / or / not

「18歳以上、かつ、会員である」のように条件を2つ以上つなげたいときは、論理演算子を使います。and(アンド)は「両方とも成り立つ」、or(オア)は「どちらか一方でも成り立つ」、not(ノット)は「成り立たないことを反転する」という意味です。

PYTHON
age = 20
is_member = True

if age >= 18 and is_member:
    print("割引を適用します")

if age < 18 or not is_member:
    print("割引の対象外です")
andは両方True、orはどちらかTrue、notは真偽を反転する

なぜ and と or を区別するのか

条件を「かつ」でつなぐか「または」でつなぐかで、対象になる範囲が正反対になることがあります。たとえば『18歳以上 and 会員』は両方満たす人だけ。『18歳以上 or 会員』はどちらか一方でも満たす広い範囲。要件を読み違えるとバグになるので、日本語の仕様を『かつ/または』のどちらなのか必ず確認してから書きます。

Pythonでは 0 <= age <= 120 のように、比較を鎖のようにつなげて「範囲チェック」も書けます。これは age が 0 以上「かつ」120 以下、という意味で、and で書くより読みやすい書き方です。

PYTHON
age = 30
if 0 <= age <= 120:
    print("ありえる年齢です")
else:
    print("入力ミスの可能性があります")
範囲は数学と同じように鎖でつなげて書ける

AIにはこう聞く

複雑な条件は自分で書く前に、日本語の仕様をそのままAIに渡して『この条件をPythonの if 文にしてください。and と or のどちらを使ったか理由も添えて』と頼むと、根拠付きの式が返ります。返ってきた式は必ず『かつ/または』が仕様通りか自分で読み直してから採用してください。

読んでも腑に落ちない所は、AIに噛み砕いてもらいましょう。

理解度チェック

答えられれば、面接で説明できる状態に一歩近づきます。

Q1

「等しいかどうか」を比べる正しい演算子はどれですか。

Q2

age = 16, is_member = True のとき、次の式の結果はどれですか。 age >= 18 and is_member

Q3

and と or の違いを、具体例を1つ挙げて説明してください。

記述式です。まず自分の言葉で答えを考えてから、模範解答を開いて自己採点してください。