情報Ⅰ プログラミング演習

第3章 選択構造 ― if文

この章で学べること
この章のゴール:「条件によって動きが変わるプログラム」を読めて、書けるようになること。選択構造は共通テストのプログラミング問題に毎回必ず登場する、最重要の文法です。
目次

    STEP 1もし〜なら ― if文

    「テストが80点以上ならほめる」のように、条件によってやることを変えるのが選択構造です。

    Pythonでは if 条件: と書き、条件が成り立ったときだけ実行したい行を、字下げ(インデント)して書きます。行の頭の空白2つが「if の中身ですよ」という印になっています。最初はわかりにくいですが、重要なポイントです。

    tenki = '晴れ'いつも実行される
    if tenki == '晴れ':条件。ここから分かれ道
    print('せんたく日和です')ifの中
    print('ふとんも干せます')ifの中(ここまで)
    print('今日も1日がんばりましょう')字下げが終わったら、ifの外
    図1 色のついた部分(字下げした行)だけが「ifの中」。条件が成り立つときだけ実行される
    score = 85 80以上? はい 合格です! と表示 いいえ 次の行へ進む
    図2 if文は「はい」のときだけ寄り道して、また合流する

    条件のところでは比較演算子を使います。特に「等しい」は = ではなく == と書くことに注意してください(= は代入の記号でしたね)。

    書き方意味書き方意味
    a == b等しいa != b等しくない
    a > baが大きいa >= ba以上
    a < baが小さいa <= ba以下
    たしかめてみよう

    実行して、どの行が表示されるかを確かめましょう。そのあと、1行目を tenki = '雨' に変えて再実行し、字下げした行だけがスキップされることを確かめましょう。

    確認ポイントを見る(実行してから開くこと)
    '晴れ' のときは2行とも表示され、'雨' に変えると字下げした行だけが飛ばされて「今日も1日がんばりましょう」だけが表示されます。字下げされた行がif文の中身である——この感覚に早く慣れましょう!

    例題 1

    点数によってメッセージが変わるプログラムです。score の値をいろいろ変えて実行してみましょう。

    アラン先生
    字下げは、ただの見た目の問題ではなくプログラミングのルールそのものなんです。共通テストの問題文でも字下げは正確に印刷されています。「どこまでがifの中か」を読み取ることがプログラミングの読解にはとても重要です。
    やってみよう 3-1

    kion が30以上なら「真夏日です」と表示されるように、if文の行を書き加えなさい。

    <実行結果例>真夏日です
    解答例を見る(まず自分で書いてから開くこと)
    kion = 32
    if kion >= 30:
      print('真夏日です')
    if kion >= 30: の行を書けたら正解です。行の最後の :(コロン)を忘れやすいので注意しましょう。また、kionを30よりも小さい数字に変えて実行するとどうなるか確かめてみましょう。

    STEP 2そうでなければ ― else

    「80点以上ならほめる、そうでなければはげます」のように、条件が成り立たなかったときのやることも決めたいときは、else: を使います。ifとelseは必ずどちらか一方だけが実行されます。

    if num % 2 == 0:条件
    print('偶数です')ifの範囲:成り立つとき
    else:そうでなければ
    print('奇数です')elseの範囲:成り立たないとき
    図3 青の範囲と赤の範囲は、どちらか一方だけが実行される
    条件は成り立つ? はい ifの中を実行 いいえ elseの中を実行 どちらか一方だけが実行される
    図4 if と else は、二又の分かれ道
    たしかめてみよう

    第2章で学んだ「% 2 のあまりで偶数・奇数がわかる」を、if-elseと組み合わせた定番プログラムです。num の値を変えて、両方の道を通してみましょう。

    確認ポイントを見る(実行してから開くこと)
    あまりが0かどうかを == で判定しています。この「% 2 == 0 なら偶数」は共通テストでもそのまま登場する、いちばん有名な条件式です。また、「% 2 == 1 なら奇数」もおさえておきましょう。

    例題 2

    入力と組み合わせた例です。パスワードが合っているかを判定します。

    やってみよう 3-2

    合計点が450点以上なら「目標達成!」、そうでなければ「あと少し!」と表示されるように、elseの部分(2行)を書き加えなさい。

    <実行結果例>あと少し!
    解答例を見る(まず自分で書いてから開くこと)
    gokei = 430
    if gokei >= 450:
      print('目標達成!')
    else:
      print('あと少し!')
    else: の行と、字下げした print() の2行です。elseには条件を書かない(「それ以外ぜんぶ」だから)のがポイントです。
    ⏱ ここまでで1時間くらいが目安です。つづきは次の時間でもOK(クリアの記録は残っています)。

    STEP 33つ以上に分ける ― elif

    分かれ道を3つ以上にしたいときは、ifとelseの間に elif 条件:(そうでなくもし)をはさみます。上から順に条件を調べて、最初に成り立ったところだけが実行されます。elifは共通テストでの出題は少なめなので、「読めればOK」くらいの気持ちで大丈夫です。

    例題 3

    点数を成績(A・B・C・F)に変えるプログラムです。score を90、85、72、20などに変えて、どの道を通るか確かめましょう。

    アラン先生
    85点のとき、Aの条件(90以上)はダメで、次のBの条件(80以上)で成り立つのでBと表示されます。一度どれかが成り立ったら、残りはもう調べない」というように実行されるルールとなっています。
    やってみよう 3-3

    ねだんが500円以上なら「高い」、そうでなくもし300円以上なら「ふつう」、それ以外は「安い」。elifの行を書き加えなさい。

    <実行結果例>ふつう
    解答例を見る(まず自分で書いてから開くこと)
    nedan = 350
    if nedan >= 500:
      print('高い')
    elif nedan >= 300:
      print('ふつう')
    else:
      print('安い')
    elif nedan >= 300: が書けたら正解です。elifの行は字下げしない(ifと同じ高さに書く)ことにも注目してください。

    STEP 4条件を組み合わせる ― and・or

    「国語数学70点以上」のように条件を2つ組み合わせたいときは and(両方成り立つとき)、「土曜または日曜」なら or(どちらか一方でも成り立つとき)を使います。

    書き方の例成り立つのは
    a >= 70 and b >= 70aもbも70以上のとき(両方)
    day == '土' or day == '日'dayが'土'か'日'のとき(どちらかでOK)
    たしかめてみよう

    kokugosugaku の値を70より小さくすると表示が消えることを確かめましょう。andは「両方」が条件です。

    ノイマン先生
    いいかね、andor は2026年の共通テストで本試・追試の両方に出た。「(条件A)and(条件B)」の空欄にどちらを入れるかを選ばせる形式だ。「andは両方、orはどちらか」自分でプログラムを書いてみて、しっかり理解したまえ。
    やってみよう 3-4

    day'土' または '日' なら「休みです」と表示されるように、if文の行を書き加えなさい。

    <実行結果例>休みです
    解答例を見る(まず自分で書いてから開くこと)
    day = '日'
    if day == '土' or day == '日':
      print('休みです')
    よくあるまちがいは if day == '土' or '日': と書いてしまうことです。orの右側にも day == をきちんと書く必要があります。day = '土' や day = '日' というミスも慣れていないうちはやってしまいがちです。注意しましょう。

    エラー例 ― よくあるエラーを知ろう!

    if文は複雑なのでエラーをしやすいです。よくある3つのエラーを、わざと起こして読み方に慣れましょう。読み方はいつも同じ、いちばん最後の行からです。

    エラー例 1 コロン(:)のつけ忘れ

    if の行の最後の : が抜けています。

    エラーの読み方を見る(実行してから開くこと)
    SyntaxError: expected ':' と出ます。「: があるはずだよ」と場所まで教えてくれる、とても親切なエラーです。ifの行の最後に : をつければ直ります。

    エラー例 2 字下げのし忘れ

    if の次の行が字下げされていません。

    エラーの読み方を見る(実行してから開くこと)
    IndentationError: expected an indented block と出ます。IndentationError(インデンテーションエラー)は「字下げがおかしい」という意味の、Python特有のエラーです。ifの中身の行の頭にスペース2つを入れれば直ります。

    エラー例 3 = と == のとりちがえ

    条件のところに、比較の == ではなく代入の = を書いてしまっています。

    エラーの読み方を見る(実行してから開くこと)
    SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='? と出ます。「== のまちがいでは?」とPythonが推理までしてくれています。= は代入、== は比較。この区別は共通テストでも問われる急所です。

    演習問題

    問 3-1

    入力した整数が偶数か奇数かを判定するプログラムを完成させなさい。以下の実行結果を参考にしなさい。

    <実行結果例1>整数を入力してください:122 あなたが入力したのは偶数です
    <実行結果例2>整数を入力してください:357 あなたが入力したのは奇数です
    解答例を見る(まず自分で書いてから開くこと)
    num = input('整数を入力してください:')
    num = int(num)
    if num % 2 == 0:
      print('あなたが入力したのは偶数です')
    else:
      print('あなたが入力したのは奇数です')
    「たしかめてみよう」で見た % 2 == 0 を、入力と組み合わせた問題でした。
    問 3-2

    「3+5」の解を入力させ、まちがっていた場合だけ「不正解です」と表示するプログラムを作りなさい。ただし、演算子 == 以外の比較演算子を使うこと。以下の実行結果を参考にしなさい。

    <実行結果例1>3+5の解を入力してください:8
    <実行結果例2>3+5の解を入力してください:2 不正解です
    解答例を見る(まず自分で書いてから開くこと)
    num = input('3+5の解を入力してください:')
    num = int(num)
    if num != 8:
      print('不正解です')
    「等しくない」の != を使うと、elseなしの1つのifだけで書けます。正解のときに何も表示されないのは、それで正しい動きです。
    問 3-3

    テストの点数を入力させて、90以上なら「A」、80以上なら「B」、30未満なら「F」、それ以外は「C」と表示するプログラムを自分で考えて作りなさい。以下の実行結果を参考にしなさい。

    <実行結果例1>テストの点数を入力してください:90 A
    <実行結果例2>テストの点数を入力してください:72 C
    解答例を見る(まず自分で書いてから開くこと)
    num = input('テストの点数を入力してください:')
    num = int(num)
    if num >= 90:
      print('A')
    elif num >= 80:
      print('B')
    elif num < 30:
      print('F')
    else:
      print('C')
    例題3とほぼ同じ構造を、今度はゼロから組み立てる問題でした。elifの順番を変えると結果が変わることも、余裕があれば試してみてください。
    問 3-4(発展)

    映画館の入場料を計算するプログラムを自分で考えて作りなさい。年齢を入力させて、12歳以下なら500円、65歳以上なら600円、それ以外は1000円と表示すること。

    <実行結果例>年齢:16 入場料は 1000 円です
    解答例を見る(まず自分で書いてから開くこと)
    nenrei = input('年齢:')
    nenrei = int(nenrei)
    if nenrei <= 12:
      print('入場料は 500 円です')
    elif nenrei >= 65:
      print('入場料は 600 円です')
    else:
      print('入場料は 1000 円です')
    12以下・65以上のような「はしっこの条件」を先に片づけて、残りをelseでまとめるのがきれいな書き方です。いろいろな年齢でクリア判定を試してみてください。

    自由実行スペース

    思いついたことを自由に試すための場所です。学んだif文で、自分だけの「診断プログラム」を作ってみるのもおすすめです。

    ノイマン先生
    ちなみに共通テストの表記では、if文は「もし〜ならば:」、elseは「そうでなければ:」と日本語で書かれるんだ。字下げの意味はPythonとまったく同じ。ここで身についた読み方が、そのまま試験で通用する。

    たとえば、この章の「真夏日プログラム」は、共通テストの紙面ではこう書かれます。

    (1) もし kion >= 30 ならば: (2)   表示する("真夏日です") (3) そうでなければ: (4)   表示する("真夏日ではありません")

    日本語になっただけで、形はPythonとそっくりだとわかるはずです。読み替えの練習は、第7章「共通テスト表記との対応」でたっぷりやります。

    実行環境を準備中…