プログラミング演習・14章版 第4章 条件分岐とテスト
教材コード

条件分岐

これまでのプログラムは,書いた命令を上から下へ順番に実行するだけでした. これを順次といいます.しかし,わたしたちの毎日は,いつも同じことの くり返しではありません.「雨が降っていたら,かさを持つ」,「テストが60点以上なら, 合格にする」,「体温が37.5度以上なら,念のため休む」.このように,わたしたちは その場の状況(条件)によって,やることを変えている.

プログラムでも同じことができます.条件によって処理を変えるしくみを 条件分岐といい,Python では if(イフ)という命令で 書きます.この章では,if・elif・else を使って, 「もし〜なら,こうする」というプログラムを書けるようになることをめざします.

もし〜なら:if の基本

朝,出かける前のことを考えてみましょう.

もし雨が降っているなら,かさを持つ.

雨が降っていなければ,かさは持ちません.つまり「かさを持つ」という行動は, 条件が成り立ったときだけ行われます.これがまさに条件分岐です.

Python では,この「もし〜なら,〜する」を次のように書きます.点数が60点以上の ときだけ「合格です」と表示するプログラムを見てみましょう.

chapter-04_code_1.py
tensuu = 75                # 点数を変数に入れる

if tensuu >= 60:           # もし点数が60以上なら
    print("合格です")      # この行を実行する

print("判定おわり")        # if とは関係なく必ず実行される

これを実行すると,次のように表示されます.

実行結果の例
合格です
判定おわり

1行ずつ読んでみる

1行目

tensuu = 75 で,点数を表す変数 tensuu に75を代入して います.

3行目

if tensuu >= 60: が条件分岐の中心です.「もし tensuu が60以上なら」という意味で,>= は「以上」を表す記号です.行の おわりにコロン : が必要です.

4行目

print("合格です") が,条件が成り立ったときに実行される命令です.行の先頭が半角スペース4つ分,右にずれていることに注目して ください.

6行目

print("判定おわり") は字下げされていません.これは if の外なので,条件に関係なくいつも実行されます.

このように,if は「条件」「コロン」「字下げ された命令」の3つがセットになっている(図4.1).字下げ (インデント)された部分をブロックといい,「条件が成り立ったとき にまとめて実行する命令のかたまり」を表します.

条件によって流れが分かれる(if-else のイメージ)

条件式が True になるまでを追う

「if は点数を見る」とだけ覚えず,tensuu >= 60 の左右へ実際の値を代入し,式全体の結果を確かめます。

tensuu値を入れた条件式判定字下げした行画面に出る行
7575 >= 60True実行する合格です
判定おわり
5050 >= 60False飛ばす判定おわり
75は60以上なのでTrueとなって合格の行へ進みます。50は60未満なのでFalseとなって合格の行を飛ばします。
同じ if 文でも,値を代入した結果で通る道が変わります。

境界の59,60,61でも順に確かめます。>= は60を含むため,60から True になります。

もし tensuu が50だったらどうなるでしょうか.条件 tensuu >= 60 は 成り立たないので,4行目はとばされ,「合格です」は表示されません.6行目の 「判定おわり」だけが表示されます.

if の行のおわりのコロン : を忘れる間違いがとても多いです. if tensuu >= 60(コロンなし)と書くとエラーになります.「もし〜なら  ,」の読点のつもりで,必ずコロンをつけるとよいでしょう.コロンも半角です.

字下げ(インデント)は半角スペース4つで統一します.if の次の行を 字下げし忘れると「字下げが必要です」というエラー(IndentationError)に なります.逆に,字下げの数がそろっていないのもエラーのもとです.

  • if 条件: と書き,次の行を字下げすると「条件が成り立つときだけ実行」 になります.

  • 行のおわりのコロン : と,半角スペース4つの字下げを忘れません.

  • 字下げされた命令のかたまりをブロックといいます.

ブロックには命令を何行でも書ける

if のブロックは,1行だけとはかぎりません.字下げをそろえて書けば,条件が 成り立ったときにまとめて実行したい命令を,何行でも並べられます.買い物の 場面で考えてみましょう.持っているお金が値段以上のときだけ,「買えます」と表示し, おつりも計算して表示するプログラムです.

chapter-04_code_3.py
shoji = 1000               # 持っているお金
nedan = 700                # 商品の値段

if shoji >= nedan:         # もしお金が足りるなら
    print("買えます")      # この2行をまとめて実行する
    otsuri = shoji - nedan # おつりを計算
    print(otsuri)          # おつりを表示
実行結果の例
買えます
300

4行目から6行目までが,すべて同じ深さに字下げされている点に注目して ください.この3行がひとかたまりのブロックであり,条件 shoji >= nedan が 成り立ったときに,上から順にまとめて実行されます.もし shoji が500なら, 条件が成り立たないので,この3行はすべてとばされ,何も表示されません.

ブロックの中の行は,字下げの数をきっちりそろえる.3行のうち1行だけ スペースが5つや3つになっていると,「字下げがそろっていない」というエラーに なります.エディタの設定で,字下げを半角スペース4つに統一しておくとよいでしょう.

条件の評価とブロックの実行

知識

ifは条件がTrueのときだけ、字下げされたブロックを実行します。ブロックの外は条件にかかわらず実行します。

tensuu = 75
if tensuu >= 60:
    print("合格です")
print("判定おわり")
そのまま演習条件の評価とブロックの実行

実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。

出力例
合格です
判定おわり
ヒントを見る

条件の左側へ点数を当てはめて真偽を求めます。字下げされた行と、字下げのない最後の行がそれぞれ実行されるか予想します。

演習の解説

75>=60はTrueなので合格ですを表示します。その後、字下げのないprintへ進んで判定おわりを表示します。

虫食い条件の評価とブロックの実行

___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。

tensuu = 75
if tensuu ___ 60:
    print("合格です")
print("判定おわり")
ヒントを見る

合格点と同じ値も合格に含める比較を選びます。字下げのない最後の行も追ってください。

虫食いの解説
tensuu = 75
if tensuu >= 60:
    print("合格です")
print("判定おわり")

空欄には >= が入ります。75>=60はTrueなので合格ですを表示します。その後、字下げのないprintへ進んで判定おわりを表示します。

比較演算子:条件の書き方

if の条件には,「2つの値をくらべる」式をよく書きます.値をくらべるための 記号を比較演算子といいます.Python では次の6つを使う (数学の記号と少し書き方が違うので注意する).

記号 意味 例
== 等しい tensuu == 100
!= 等しくない namae != "山田"
< より小さい(未満) kion < 10
> より大きい tensuu > 80
<= 以下 taion <= 36
>= 以上 tensuu >= 60

これらの式は,成り立つときは True(真),成り立たないときは False(偽)という値になります.この True と False の2つだけを とる値を真偽値といいます.if は,条件が True のとき だけブロックを実行するしくみなのです.

実際に,くらべた結果を表示してみましょう.

chapter-04_code_5.py
tensuu = 58                  # 点数

print(tensuu >= 60)          # 60以上か?
print(tensuu == 58)          # ちょうど58か?
print(tensuu != 60)          # 60ではないか?
実行結果の例
False
True
True

tensuu は58なので,「60以上?」は False,「58と等しい?」 は True,「60ではない?」は True になりました.比較演算子は,このように 条件が正しいかどうかを真偽値で答える記号です.

6つの記号を1つずつ確かめる

6つの比較演算子を,それぞれ短いプログラムで確かめておこう.まず,「等しい ==」と「等しくない !=」です.出席を取る場面で,名前が 「山田」かどうかをくらべてみる.

chapter-04_code_7.py
namae = "佐藤"               # 名前

print(namae == "山田")       # 山田と等しいか?
print(namae != "山田")       # 山田と等しくないか?
実行結果の例
False
True

namae は「佐藤」なので,「山田と等しい?」は False, 「山田と等しくない?」は True になります.== と != は, このようにちょうど反対の答えを返します.文字列どうしも,このように くらべられます.

次に,大小をくらべる4つ <\ >\ <=\ >= を,気温の値で確かめる.

chapter-04_code_9.py
kion = 10                    # 気温

print(kion < 10)             # 10より小さいか?
print(kion > 10)             # 10より大きいか?
print(kion <= 10)            # 10以下か?
print(kion >= 10)            # 10以上か?
実行結果の例
False
False
True
True

kion はちょうど10です.<(より小さい)と >(より大きい)は,ちょうど同じ値のときは成り立たないので, どちらも False になります.いっぽう <=(以下)と >=(以上)は 同じ値もふくむので,どちらも True になります.「ちょうどの値を ふくむかどうか」が,< と <= のいちばんの違いです.

<= と >= は,かならず不等号を先,イコールをあとの順に 書く(=< や => と書くとエラーになる).数学の「≤」を 左から読むと「小なりイコール」なので,< = の順と覚えるとよいでしょう. また,2つの記号のあいだにスペースを入れない(< = はエラー).

この章でいちばん大事な注意です.「等しい」をくらべる記号は,イコールを 2つ重ねた == です.1つだけの = は代入(変数に 値を入れる)の記号で,まったく意味がちがう.

  • tensuu = 60…… に60を入れる(代入)

  • tensuu == 60…… が60と等しいかくらべる

if tensuu = 60: のように代入の = を条件に書くとエラーになります. 「くらべるときはイコール2つ」と声に出して覚えるとよいでしょう.

= と == を並べて見くらべる

=(代入)と ==(等しいか)の違いは,この章でいちばん大事な ところなので,1つのプログラムで並べて見くらべておこう.

chapter-04_code_11.py
tensuu = 60                  # 代入:tensuu に60を入れる
print(tensuu)                # いま tensuu は何点か?

print(tensuu == 60)          # 比較:tensuu は60と等しいか?
print(tensuu == 80)          # 比較:tensuu は80と等しいか?
実行結果の例
60
True
False

1行目の = は代入で,tensuu に60という値を 入れています.この行は何かを表示するわけではなく,画面には何も出ません.いっぽう 4行目と5行目の == は比較で,「等しいか?」の答えを True/False で返します.tensuu は60なので,「60と等しい?」は True,「80と等しい?」は False になります.同じイコールでも, 1つと2つでまったく別の働きをすることを,しっかり区別します.

= は「右の値を左に入れる」働きなので,60 = tensuu のように 左右を入れかえるとエラーになる(値のほうに入れることはできない). いっぽう == は「左右が等しいか」をくらべるだけなので,60 == tensuu と書いても同じ意味になります.代入は向きが大事,比較は向きを気にしなくてよい,と 覚えておくとよいでしょう.

  • 比較演算子は ==(等しい)!=(等しくない)<\ >\ <=\ >= の6つ.

  • くらべた結果は True(真)か False(偽)の真偽値になります.

  • くらべるのは ==(イコール2つ),代入は =(イコール1つ).

等しい値で境界を調べる

知識

比較演算子は2つの値の大小や一致を調べます。境界が含まれるかを確かめるには、等しい値で比べます。

print(60 > 60)
print(60 >= 60)
print(60 == 60)
そのまま演習等しい値で境界を調べる

実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。

出力例
False
True
True
ヒントを見る

左右が等しい3つの比較です。厳密な大小、等号を含む大小、一致を区別して、各行の真偽を予想してください。

演習の解説

60は60より大きくないため最初はFalseです。>=は等しい場合を含むためTrue、==もTrueです。

虫食い等しい値で境界を調べる

___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。

print(60 > 60)
print(60 ___ 60)
print(60 == 60)
ヒントを見る

真ん中の比較では、等しい値も条件を満たす必要があります。厳密な大小との違いに注目します。

虫食いの解説
print(60 > 60)
print(60 >= 60)
print(60 == 60)

空欄には >= が入ります。60は60より大きくないため最初はFalseです。>=は等しい場合を含むためTrue、==もTrueです。

if-else:二択にする

さきほどの合否判定では,合格のときだけメッセージを出しました.しかしふつうは, 合格でないときには「不合格」と伝えたい.「もし〜なら A,そうでなければ B」という二択は,if と else(エルス)を組み合わせて書きます.

chapter-04_code_13.py
tensuu = 45                   # 点数

if tensuu >= 60:              # もし60以上なら
    print("合格です")        # こちらを実行
else:                         # そうでなければ
    print("不合格です")      # こちらを実行
実行結果の例
不合格です

1行ずつ読んでみる

3行目

条件 tensuu >= 60 を調べます.tensuu は45なので, この条件は False です.

4行目

条件が True のときに実行される枝です.今回はとばされます.

5行目

else: は「そうでなければ」という意味です.条件のあとには 何も書かず,コロンだけをつける.

6行目

条件が False のときに実行される枝です.今回はこちらが 実行され,「不合格です」が表示されます.

if と else のどちらか一方だけが必ず実行されます.両方が 実行されることも,どちらも実行されないこともない(図4.1). これで,点数が何点であっても,合格か不合格のどちらかを必ず表示できるように なりました.

else は,それだけで単独には使えません.必ず対応する if と セットで使います.また,else の行の字下げは if とそろえ,その次の行 (実行する命令)はさらに字下げします.if と else の字下げがずれて いると,どこからどこまでがひとまとまりか分からず,エラーになります.

そのまま演習1行ずつ読んでみる · そのまま演習

上のプログラムの tensuu の値を60や100に変えて実行してみましょう.表示が 「合格です」に変わることを確かめるとよいでしょう.さらに,ちょうど60点のときどちらが 表示されるかも試してみよう(>= は「以上」なので,60点も合格になる).

正誤診断では tensuu を60に変えた結果を判定します。100の結果も実行して確かめてください。

ヒントを見る

このコードでは tensuu の値を追ってください。比較する左右の値と、等しい場合を含むかを確認します。条件が偽のときにも実行する行は、条件のブロックの外へ置きます。

  • if 条件: と else: で「成り立つとき/そうでないとき」の 二択になります.

  • else: には条件を書かず,コロンだけをつける.

  • if と else のどちらか一方だけが必ず実行されます.

もう1つの二択:気温で服装を決める

二択はいろいろな場面で使えます.今度は,気温が25度以上なら「暑い」,そうでなければ 「すずしい」と表示するプログラムを書いてみましょう.題材はちがっても,if と else の形はまったく同じです.

chapter-04_code_15.py
kion = 28                     # 気温

if kion >= 25:                # もし25度以上なら
    print("暑いです")        # こちらを実行
else:                         # そうでなければ
    print("すずしいです")    # こちらを実行
実行結果の例
暑いです

kion は28なので,条件 kion >= 25 は True になり, if の枝の「暑いです」が表示されます.kion を20に変えれば,条件は False になり,else の枝の「すずしいです」が表示されます.このように, くらべる値と表示する言葉を入れかえるだけで,さまざまな二択のプログラムが作れます.

  • 題材がちがっても,二択は「if 条件:」と「else:」の同じ形で 書けます.

  • くらべる値・基準・表示する言葉を変えるだけで,いろいろな判定に使い回せる.

二択の片方だけを実行する

知識

if-elseの二択ではどちらか一方だけ実行します。条件がFalseならelse側へ進みます。

tensuu = 50
if tensuu >= 60:
    print("合格")
else:
    print("不合格")
そのまま演習二択の片方だけを実行する

実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。

出力例
不合格
ヒントを見る

点数が条件を満たすかを先に判定します。その結果で一方の枝だけへ進み、表示しない側の行も確認してください。

演習の解説

50>=60はFalseなので「合格」を飛ばし、elseの「不合格」を1行表示します。

虫食い二択の片方だけを実行する

___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。

tensuu = 50
if tensuu >= 60:
    print("合格")
___:
    print("不合格")
ヒントを見る

条件を満たさないときに進む枝を指定します。2つの表示を両方実行する形にはしません。

虫食いの解説
tensuu = 50
if tensuu >= 60:
    print("合格")
else:
    print("不合格")

空欄には else が入ります。50>=60はFalseなので「合格」を飛ばし、elseの「不合格」を1行表示します。

elif:三択以上に分ける

二択では足りない場面もあります.たとえばテストの点数を,80点以上なら「A」,60点 以上なら「B」,それ未満なら「C」のように,3段階以上の評価に分けたい ときです.このような複数の枝分かれには,elif(エルイフ)を使います. elif は「else if(そうでなくて,もし〜なら)」を縮めた言葉です.

chapter-04_code_17.py
tensuu = 72                   # 点数

if tensuu >= 80:              # 80以上なら
    print("評価はA")
elif tensuu >= 60:            # そうでなくて60以上なら
    print("評価はB")
else:                         # どちらでもなければ
    print("評価はC")
実行結果の例
評価はB

どう動くのか

if・elif・else は,上から順に条件を調べる (図4.2).そして,最初に成り立った枝だけを実行し,残りは すべてとばす.

  1. まず tensuu >= 80 を調べます.tensuu は72なので False.

  2. 次に tensuu >= 60 を調べます.72は60以上なので True.ここで 「評価はB」を実行します.

  3. ひとつ実行したら,もう下の else は調べずに終わります.

elif による三択(点数から評価 A/B/C を決める)

多重分岐を図で追います

if が False のときだけ elif を調べます。先に True になった枝を実行したら,下の条件は調べません。

点数が80以上ならAです。そうでなければ60以上かを調べ,TrueならBです。両方FalseならCです。
条件は上から順に調べ,最初に True となった枝だけを実行します。
点数80以上60以上通る枝
90True調べませんA
75FalseTrueB
45FalseFalseC

たとえば75点は,最初の 75 >= 80 が False です。次の 75 >= 60 が True なので B の枝へ進み,else は実行しません。

elif は,必要なだけいくつでも並べられます.たとえば「A・B・C・D」の4段階に したいなら,elif をもう1つ増やせばよいでしょう.

条件を書く順番に注意します.上の例で,もし tensuu >= 60 を tensuu >= 80 より先に書いてしまうと,90点の人も「60以上」に 先に当てはまり,「評価はB」になってしまう.elif は上から順に調べるので, きびしい条件(数の大きいほう)から先に書くのがコツです.

elif は else のように,それだけでは使えません.必ず先に if があり,その後に続けて書きます.また,elif のうしろには条件が必要で,コロンも 忘れずにつける(else には条件を書かない点と区別する).

もう1つの三択:体温で区分する

elif は,いくつでも並べられます.今度は,体温を「37.5度以上なら発熱」, 「37.0度以上なら微熱」,「それ未満なら平熱」の3区分に分けてみましょう.elif を1つ使った三択です.

chapter-04_code_19.py
taion = 37.2                  # 体温

if taion >= 37.5:             # 37.5度以上なら
    print("発熱です")
elif taion >= 37.0:           # そうでなくて37.0度以上なら
    print("微熱です")
else:                         # どちらでもなければ
    print("平熱です")
実行結果の例
微熱です

ここでも,上から順に調べるしくみは同じです.taion は37.2なので, まず taion >= 37.5 を調べると False.次の taion >= 37.0 は True になるので,「微熱です」を表示して終わります.小数(37.5や37.0)でも, 整数とまったく同じようにくらべられる点に注目してください.

ここでも条件を書く順番が大事です.taion >= 37.0 を先に書くと, 38度の人も「37.0以上」に先に当てはまり,「微熱です」になってしまう.elif は上から順に調べるので,値の大きいほう(きびしいほう)から先に書きます.

  • elif 条件: を使うと,三択以上の分岐ができます.

  • if→elif→else は上から順に調べ,最初に成り立った 枝だけを実行します.

  • きびしい条件(範囲のせまいほう)から先に書きます.

  • 小数でも整数と同じように比較・分岐できます.

最初に当てはまる枝を選ぶ

知識

elifは前の条件がFalseだった場合にだけ調べます。最初にTrueとなった枝を実行したら、その後の枝は調べません。

tensuu = 70
if tensuu >= 80:
    print("A")
elif tensuu >= 60:
    print("B")
else:
    print("C")
そのまま演習最初に当てはまる枝を選ぶ

実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。

出力例
B
ヒントを見る

上の条件から順に真偽を調べます。最初に当てはまった枝の後も、残りの枝を実行するのか考えてください。

演習の解説

70>=80はFalse、次の70>=60はTrueなのでBです。Cを表示するelseへは進みません。

虫食い最初に当てはまる枝を選ぶ

___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。

tensuu = 70
if tensuu >= 80:
    print("A")
___ tensuu >= 60:
    print("B")
else:
    print("C")
ヒントを見る

最初の条件が偽だったときだけ、次の条件を調べる文を考えてください。

虫食いの解説
tensuu = 70
if tensuu >= 80:
    print("A")
elif tensuu >= 60:
    print("B")
else:
    print("C")

空欄には elif が入ります。70>=80はFalse、次の70>=60はTrueなのでBです。Cを表示するelseへは進みません。

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

ときには,条件を1つではなくいくつか組み合わせて判断したいことがあります. たとえば健康チェックで「体温が37.5度以上,かつせきがあるなら受診を すすめる」,あるいは服装を決めるのに「気温が10度未満,または雨なら 上着を持つ」といった場合です.

このような「かつ」「または」「〜でない」を表すのが,論理演算 の and(アンド)・or(オア)・not(ノット)です.

and

「かつ」.両方とも成り立つときだけ True.

or

「または」.どちらか一方でも成り立てば True.

not

「〜でない」.True と False を反対にします.

気温を例に,上着が必要かどうかを判定してみましょう.「気温が10度未満,または雨が 降っているなら,上着を持つ」という条件です.

chapter-04_code_21.py
kion = 15                            # 気温
ame = True                           # 雨が降っているか(真偽値)

if kion < 10 or ame == True:         # 10度未満、または雨なら
    print("上着を持ちましょう")
else:
    print("上着はいりません")
実行結果の例
上着を持ちましょう
解説を見る

解説

4行目の条件は kion < 10 or ame == True です.kion は15なので 「10度未満」は False だが,ame が True なので「または」の うしろが成り立つ.or はどちらか一方でも成り立てば全体が True になるので,「上着を持ちましょう」が表示されました.

もしこれを and に変えたら,「10度未満かつ雨」の両方がそろわない かぎり True になりません.and と or の違いは,つまずきやすい ところなのでしっかり区別します.

なお,ame == True は ame と書くだけでも同じ意味になる (ame 自身がすでに真偽値だからである).ここでは分かりやすさのために == True をつけています.

and:両方そろってはじめて成り立つ

今度は and(かつ)を使ってみましょう.ある授業の最終評価で,「テストが60点 以上,かつ出席回数が10回以上なら合格」という条件を考えます.両方の条件が そろわないかぎり,合格にはなりません.

chapter-04_code_23.py
tensuu = 80                          # テストの点数
kaisuu = 8                           # 出席回数

if tensuu >= 60 and kaisuu >= 10:    # 60点以上 かつ 10回以上
    print("合格です")
else:
    print("もう少しです")
実行結果の例
もう少しです

4行目の条件は tensuu >= 60 and kaisuu >= 10 です. tensuu は80なので「60点以上」は True だが,kaisuu は8で 「10回以上」は False です.and は両方とも成り立たないと 全体が True にならないので,今回は else の枝が実行されました.点数が よくても,出席が足りなければ合格にならない,というわけです.kaisuu を 12に変えれば,両方が True になり「合格です」が表示されます.

not:成り立たないときに動かす

not(ノット)は,真偽を反対にする演算です.「出席していない人 だけに知らせる」のように,「〜でないとき」に動かしたいときに使います.

chapter-04_code_25.py
shusseki = False                     # 出席したか(真偽値)

if not shusseki:                     # 出席していないなら
    print("欠席の連絡をしてください")
実行結果の例
欠席の連絡をしてください

shusseki は False(出席していない)です. not shusseki は,その False を反対にして True にするので, if のブロックが実行されます.not は「False のときに動かしたい」 という場面で役に立つ.

「tensuu が60以上80未満」のような範囲を書くとき,数学では 60 ≤ tensuu < 80 のように書けるが,プログラムでは条件を 2つに分けて and でつなぐのが基本です.

if tensuu >= 60 and tensuu < 80:

if 60 <= tensuu < 80: という書き方も Python では動くが,まずは and でつなぐ書き方をしっかり身につけるとよいでしょう.

and や or の両側には,それぞれ完成した条件を書きます. 「tensuuが60以上または80」のつもりで tensuu >= 60 or 80 と書くのは 間違いのもとです.正しくは tensuu >= 60 or tensuu == 80 のように,両側を きちんと「tensuuが〜」の形で書きます.

  • and(かつ)は両方成り立てば True,or(または)は 片方でも成り立てば True.

  • not は真偽を反対にします.

  • 範囲の条件は2つに分け,and でつなぐ.両側はそれぞれ完成した条件に します.

2つの条件を組み合わせる

知識

andは両方True、orは少なくとも一方True、notは真偽を反転させます。比較を先に評価してから組み合わせます。

tensuu = 70
print(tensuu >= 60 and tensuu < 80)
print(tensuu < 60 or tensuu >= 80)
print(not (tensuu >= 60))
そのまま演習2つの条件を組み合わせる

実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。

出力例
True
False
False
ヒントを見る

各比較の真偽を先に求めてから組み合わせます。両方を満たす場合、片方でも満たす場合、真偽の反転を分けて追ってください。

演習の解説

最初はTrue and TrueなのでTrueです。次はFalse or FalseでFalse、最後はnot TrueでFalseになります。

虫食い2つの条件を組み合わせる

___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。

tensuu = 70
print(tensuu >= 60 ___ tensuu < 80)
print(tensuu < 60 or tensuu >= 80)
print(not (tensuu >= 60))
ヒントを見る

最初の式では、下限と上限の両方を満たす必要があります。一方だけ満たす場合とは区別します。

虫食いの解説
tensuu = 70
print(tensuu >= 60 and tensuu < 80)
print(tensuu < 60 or tensuu >= 80)
print(not (tensuu >= 60))

空欄には and が入ります。最初はTrue and TrueなのでTrueです。次はFalse or FalseでFalse、最後はnot TrueでFalseになります。

入れ子(ネスト):条件の中の条件

if のブロックの中に,さらに別の if を書くこともできます.このように, ブロックの中にブロックが入った構造を入れ子(ネスト)といいます.

例として,まず「合格かどうか」を判定し,合格した人の中だけでさらに「90点以上 なら特に優秀」と知らせるプログラムを考えます.

chapter-04_code_27.py
tensuu = 95                       # 点数

if tensuu >= 60:                  # まず合格かどうか
    print("合格です")
    if tensuu >= 90:              # 合格者の中でさらに判定
        print("とても優秀です")
else:
    print("不合格です")
実行結果の例
合格です
とても優秀です

字下げで深さを表す

このプログラムの大事なところは,字下げの深さです.

外側の if(3行目)

tensuu >= 60 を調べます.95は60以上なので True.中のブロックに進みます.

4行目

字下げ1段(スペース4つ).「合格です」を表示します.

5行目

内側の if tensuu >= 90:.これも字下げ1段で,外側の if のブロックの中にあります.

6行目

字下げ2段(スペース8つ).内側の if が成り立ったときだけ 実行され,「とても優秀です」を表示します.

このように,字下げを1段深くするたびに「ひとつ内側の条件」に入っていく.内側の if は,外側の条件が成り立ったときにはじめて調べられます.今回は 95点なので,合格かつ90点以上となり,両方のメッセージが表示されました.

入れ子は便利だが,深くしすぎると読みにくくなります.多くの場合,elif や and を使えば,入れ子にしなくても同じことが書けます.たとえば「60点以上かつ 90点未満ならB」のような判定なら,入れ子より tensuu >= 60 and tensuu < 90 と書くほうがすっきりします.

else の中にも if を書ける

入れ子は,if の中だけでなく else の中にも作れます.アンケートの 集計を例にしましょう.「参加するか」をまず判定し,参加しない人にだけ,さらに「理由を 書いたか」を確かめるプログラムです.

chapter-04_code_29.py
sanka = False                     # 参加するか(真偽値)
riyuu = ""                        # 理由(空なら未記入)

if sanka == True:                 # 参加するなら
    print("参加ありがとうございます")
else:                             # 参加しないなら
    if riyuu == "":               # その中で、理由が空かどうか
        print("理由を書いてください")
    else:
        print("理由を受け付けました")
実行結果の例
理由を書いてください

1行ずつ読んでみる

4行目

sanka == True を調べます.sanka は False なので この条件は成り立たず,else の枝へ進みます.

6行目

else: の枝に入ります.この中に,さらに if があります.

7行目

内側の if riyuu == "":.riyuu は空の文字列 "" なので,この条件は True です.

8行目

字下げ2段(スペース8つ).内側の条件が成り立ったので, 「理由を書いてください」を表示します.

このように,外側で else に入ったあと,内側でさらに二択に分かれています. 空の文字列 "" は「まだ何も書かれていない」状態を表すのによく使われます. riyuu に何か文字を入れれば,内側の else に進み,「理由を 受け付けました」が表示されます.

  • if のブロックの中に if を書くことを入れ子(ネスト)といいます.

  • else の中にも if を書けます.字下げを1段深くするごとに, ひとつ内側の条件に入ります.

  • 入れ子が深くなりそうなときは,elif や and で書けないか 考えます.

外側から内側へ条件を追う

知識

入れ子のifでは、外側の条件がTrueの場合にだけ内側の条件を調べます。字下げがどの条件に属するかを表します。

tensuu = 85
shusseki = 90
if tensuu >= 80:
    if shusseki >= 80:
        print("優秀")
そのまま演習外側から内側へ条件を追う

実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。

出力例
優秀
ヒントを見る

外側の条件を調べた後、内側へ進めるかを判断します。内側の条件を、最初から無条件に実行するものとして扱わないでください。

演習の解説

点数85が80以上なので内側へ進み、出席90も80以上なので優秀と表示します。内側のprintは二重に字下げします。

虫食い外側から内側へ条件を追う

___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。

tensuu = 85
shusseki = 90
___ tensuu >= 80:
    if shusseki >= 80:
        print("優秀")
ヒントを見る

字下げの深さで条件の所属を確認します。外側が成り立つときにだけ内側へ進みます。

虫食いの解説
tensuu = 85
shusseki = 90
if tensuu >= 80:
    if shusseki >= 80:
        print("優秀")

空欄には if が入ります。点数85が80以上なので内側へ進み、出席90も80以上なので優秀と表示します。内側のprintは二重に字下げします。

まとめ

この章では,条件によって処理を変える条件分岐を学んだ.

  • if 条件: で「もし〜なら」を表し,字下げしたブロックを条件が 成り立つときだけ実行します.コロンと字下げ(半角スペース4つ)を忘れません.

  • くらべる比較演算子は ==\ !=\ <\ >\ <=\ >= の6つ.くらべた結果は True/False の真偽値になります.

  • くらべるのは ==(イコール2つ),代入は =(イコール1つ). ここが最大のつまずきどころです.

  • else で二択,elif で三択以上の分岐ができます.上から順に 調べ,最初に成り立った枝だけが実行されます.

  • and・or・not で複数の条件を組み合わせられます.

  • if の中に if を書く入れ子(ネスト)もできるが,深く しすぎません.

条件分岐ができるようになると,プログラムは「状況に応じて賢くふるまう」ことが できます.次の章では,もう1つの基本である「繰り返し」を学び,同じ処理を何度も 自動でくり返せるようになります.

合格点そのもので境界を確かめる

知識

境界値で条件を試すと、合格点を含むかという間違いを見つけられます。

tensuu = 60
if tensuu >= 60:
    print("合格")
else:
    print("不合格")
そのまま演習合格点そのもので境界を確かめる

実行前に、表示される行数と各行の値を予想してください。上のコードを編集欄へ開き、変更せずに実行します。その後「出力例」を開き、予想と実行結果を比べてください。入力操作はありません。各表示行の末尾には改行があります。

出力例
合格
ヒントを見る

ちょうど境界の点数を、比較の左側へ当てはめてください。合格側と不合格側のどちらを実行するかを予想します。

演習の解説

合格点そのものの60は>=60を満たすので合格です。>60へ変えると境界の60が不合格になってしまいます。

虫食い合格点そのもので境界を確かめる

___の1か所だけを補い、上と同じ結果が出るコードにしてください。他の行は変えません。

tensuu = 60
if tensuu ___ 60:
    print("合格")
else:
    print("不合格")
ヒントを見る

境界の点数を合格側へ含める必要があります。「より大きい」と「以上」を区別してください。

虫食いの解説
tensuu = 60
if tensuu >= 60:
    print("合格")
else:
    print("不合格")

空欄には >= が入ります。合格点そのものの60は>=60を満たすので合格です。>60へ変えると境界の60が不合格になってしまいます。

図で理解する

if / else の分岐
if / else の分岐
テストして直す
テストして直す

練習して確かめる

境界値を含む if の判定

知識

比較式 score >= 60 は,score が60のときも True です。条件が True の場合だけ字下げした行を実行します。

chapter-04_code_31.py
score = 60
if score >= 60:
    print('合格')
print('判定終了')
そのまま演習境界値を含む if の判定 · そのまま演習

score を59に変え,何行表示されるか予想してから実行し,正誤診断で確かめてください。60と61の結果は解説と比べてください。

ヒントを見る

このコードでは score の値を追ってください。比較する左右の値と、等しい場合を含むかを確認します。条件が偽のときにも実行する行は、条件のブロックの外へ置きます。

演習の解説

59では『判定終了』だけ,60と61では『合格』『判定終了』の2行を表示します。60は >= の境界値に含まれます。

虫食い境界値を含む if の判定 · 虫食い

空欄を埋め、コードを実行してください。

chapter-04_code_32.py
score = 60
if score ___ 60:
    print('合格')
print('判定終了')
ヒントを見る

このコードでは score の値を追ってください。比較する左右の値と、等しい場合を含むかを確認します。条件が偽のときにも実行する行は、条件のブロックの外へ置きます。

虫食いの解説
chapter-04_code_33.py
score = 60
if score >= 60:
    print('合格')
print('判定終了')

>= を補います。60ちょうどでも合格に進むことを確かめてください。

代入と等価演算子を区別する

知識

= は右辺の値を変数へ入れる代入です。== は左右の値が等しいか調べ,True または False を返します。if の条件には比較式を書きます。

chapter-04_code_34.py
score = 80
print(score == 80)
print(score == 60)
そのまま演習代入と等価演算子を区別する · そのまま演習

score を60に変え,2行の真偽値がどう入れ替わるか予想してから実行してください。

ヒントを見る

このコードでは score の値を追ってください。比較する左右の値と、等しい場合を含むかを確認します。条件が偽のときにも実行する行は、条件のブロックの外へ置きます。

演習の解説

score が60なら,80との比較は False,60との比較は True です。= は値を入れ,== は値を比べます。

虫食い代入と等価演算子を区別する · 虫食い

空欄を埋め、コードを実行してください。

chapter-04_code_35.py
score = 80
if score ___ 80:
    print('80点です')
ヒントを見る

このコードでは score の値を追ってください。比較する左右の値と、等しい場合を含むかを確認します。条件が偽のときにも実行する行は、条件のブロックの外へ置きます。

虫食いの解説
chapter-04_code_36.py
score = 80
if score == 80:
    print('80点です')

== を補います。if score = 80: と書くと構文エラーになります。

elif の多重分岐を上から追う

知識

if が False の場合だけ次の elif を調べます。最初に True になった枝を実行し,後続の枝は調べません。

chapter-04_code_37.py
score = 75
if score >= 80:
    print('A')
elif score >= 60:
    print('B')
else:
    print('C')
そのまま演習elif の多重分岐を上から追う · そのまま演習

score を90に変え,80以上と60以上の判定を順に紙へ書いてから実行し,正誤診断で確かめてください。75と45の結果も解説で追ってください。

ヒントを見る

このコードでは score の値を追ってください。比較する左右の値と、等しい場合を含むかを確認します。条件が偽のときにも実行する行は、条件のブロックの外へ置きます。

演習の解説

90は最初の条件が True でA,75は最初が False で次が True なのでB,45は両方 False なのでCです。

虫食いelif の多重分岐を上から追う · 虫食い

空欄を埋め、コードを実行してください。

chapter-04_code_38.py
score = 75
if score >= 80:
    print('A')
elif score ___ 60:
    print('B')
else:
    print('C')
ヒントを見る

このコードでは score の値を追ってください。比較する左右の値と、等しい場合を含むかを確認します。条件が偽のときにも実行する行は、条件のブロックの外へ置きます。

虫食いの解説
chapter-04_code_39.py
score = 75
if score >= 80:
    print('A')
elif score >= 60:
    print('B')
else:
    print('C')

>= を補います。elif は if が False の場合にだけ判定されます。

入れ子の if と字下げ

知識

内側の if は外側の条件が True のときにだけ調べます。字下げを1段増やすと,その処理が外側のブロックに入ります。

chapter-04_code_40.py
score = 95
attendance = 12
if score >= 60:
    if attendance >= 10:
        print('合格')
    else:
        print('出席不足')
そのまま演習入れ子の if と字下げ · そのまま演習

attendance を9に変え,内側のどの枝が実行されるか予想してから実行してください。

ヒントを見る

このコードでは score、attendance の値を追ってください。比較する左右の値と、等しい場合を含むかを確認します。条件が偽のときにも実行する行は、条件のブロックの外へ置きます。

演習の解説

score は95なので外側を通ります。attendance が9なら10以上は False となり,内側の else で『出席不足』を表示します。

虫食い入れ子の if と字下げ · 虫食い

空欄を埋め、コードを実行してください。

chapter-04_code_41.py
score = 95
attendance = 12
if score >= 60:
    if attendance ___ 10:
        print('合格')
    else:
        print('出席不足')
ヒントを見る

このコードでは score、attendance の値を追ってください。比較する左右の値と、等しい場合を含むかを確認します。条件が偽のときにも実行する行は、条件のブロックの外へ置きます。

虫食いの解説
chapter-04_code_42.py
score = 95
attendance = 12
if score >= 60:
    if attendance >= 10:
        print('合格')
    else:
        print('出席不足')

>= を補います。内側の else は attendance の if と同じ深さにそろえます。

章末演習(10問)

ここには解答を載せていません。

  1. 章末演習章末演習 1

    期末試験の得点を読み取り,60点以上のときだけ合格と表示するプログラムを書きます。

    入力

    キーボードから0以上100以下の整数を1つ,1行で入力します。input() の括弧内に案内文を書きません。

    処理条件

    • 入力を int() で整数に変換し,変数 score に代入します。
    • if 文を1つだけ使って判定します。else と elif は使いません。
    • 60点ちょうどは合格に含める。

    出力

    • score が60以上なら,全角文字で 合格 と1行表示します。
    • 60未満なら何も表示しない(空行も出さない)。
    • 入力した値は再表示しない(入力欄に表示される値は出力に数えない)。見出し・前後の空白・余分な空行を付けません。

    実行例

    例1 入力:

    75
    

    出力:

    合格
    

    例2 入力:

    60
    

    出力:

    合格
    

    例3 入力:

    59
    

    出力:(何も表示されない)

    ヒントを見る

    まず入力を整数に変換して変数に入れます。次に,60点ちょうどの人が合格の側に入るように比較演算子を選びます。不合格のときは何もしないので,条件が成り立つ場合の処理だけを書けば足ります。

  2. 章末演習章末演習 2

    本日の気温を読み取り,30度以上のときだけ注意文を2行表示し,その後は気温に関係なく締めの1行を表示するプログラムを書きます。if のブロックがどこで終わるかを字下げで表すことが目標です。

    入力

    キーボードから-20以上45以下の整数を1つ,1行で入力します。input() の括弧内に案内文を書きません。

    処理条件

    • 入力を int() で整数に変換し,変数 temp に代入します。
    • if 文を1つ使い,else と elif は使いません。
    • 注意文2行は if のブロックの中に,締めの1行は if のブロックの外に書きます。
    • 30度ちょうどは注意文を表示する側に含める。

    出力

    • temp が30以上なら,1行目に 熱中症に注意,2行目に 水分補給をしっかりしましょう を表示します。
    • 最後に,気温に関係なく 今日も一日がんばりましょう を1行表示します。
    • 文字はすべて全角とし,句読点は付けません。
    • 入力した値は再表示しない(入力欄に表示される値は出力に数えない)。見出し・前後の空白・余分な空行を付けません。

    実行例

    例1 入力:

    32
    

    出力:

    熱中症に注意
    水分補給をしっかりしましょう
    今日も一日がんばりましょう
    

    例2 入力:

    30
    

    出力:

    熱中症に注意
    水分補給をしっかりしましょう
    今日も一日がんばりましょう
    

    例3 入力:

    29
    

    出力:

    今日も一日がんばりましょう
    
    ヒントを見る

    表示する3行を,条件が成り立つときだけ実行する行と,いつも実行する行とに分けて考えます。Pythonでは,ある行を条件の中に含めるかどうかを行頭の字下げで決めます。字下げをそろえた行がひとまとまりになることを確かめてから書きましょう。

  3. 章末演習章末演習 3

    気温を読み取り,25度以上なら氷水を出す,そうでなければ熱いお茶を出すと表示するプログラムを書きます。2つの処理のうち必ず一方だけを実行する if〜else が目標です。

    入力

    キーボードから-20以上45以下の整数を1つ,1行で入力します。input() の括弧内に案内文を書きません。

    処理条件

    • 入力を int() で整数に変換し,変数 kion に代入します。
    • if と else を1組使います。if 文を2つ並べる書き方,elif,1行で書く条件式(A if 条件 else B の形)は使いません。
    • 25度ちょうどは氷水の側に含める。

    出力

    • kion が25以上なら 氷水を出す,それ以外なら 熱いお茶を出す を1行だけ表示します。
    • 文字はすべて全角とします。
    • 入力した値は再表示しない(入力欄に表示される値は出力に数えない)。見出し・前後の空白・余分な空行を付けません。

    実行例

    例1 入力:

    30
    

    出力:

    氷水を出す
    

    例2 入力:

    25
    

    出力:

    氷水を出す
    

    例3 入力:

    24
    

    出力:

    熱いお茶を出す
    
    ヒントを見る

    まず,どちらの飲み物を出すかを分ける境目の値と,その値自体がどちらに入るかを確認します。次に,条件が成り立たなかったときの処理をどこに書けばよいかを考えます。`else` の後ろには条件を書かないことにも注意しましょう。

  4. 章末演習章末演習 4

    センサーの値を読み取り,0でなければ異常,0なら正常と表示するプログラムを書きます。「等しくない」を表す比較演算子を使うことが目標です。

    入力

    キーボードから整数を1つ,1行で入力します。負の数を入力してもよいでしょう。input() の括弧内に案内文を書きません。

    処理条件

    • 入力を int() で整数に変換し,変数 a に代入します。
    • if と else を1組使います。
    • if の条件式には「等しくない」を表す比較演算子を使います。== で判定して表示を入れ替える書き方や not は使いません。

    出力

    • a が0でなければ 異常,0なら 正常 を1行だけ表示します。負の数も0ではないので 異常 とします。
    • 文字はすべて全角とします。
    • 入力した値は再表示しない(入力欄に表示される値は出力に数えない)。見出し・前後の空白・余分な空行を付けません。

    実行例

    例1 入力:

    10
    

    出力:

    異常
    

    例2 入力:

    0
    

    出力:

    正常
    

    例3 入力:

    -3
    

    出力:

    異常
    
    ヒントを見る

    「0でない」という条件を,1つの比較としてそのまま書く方法を考えます。教科書の比較演算子の表から,「等しい」の反対を表す記号を探しましょう。負の数を入れたときにどちらへ進むかも確かめます。

  5. 章末演習章末演習 5

    整数を読み取り,偶数か奇数かを判定して表示するプログラムを書きます。余りを求める演算子を条件式に使うことが目標です。

    入力

    キーボードから整数を1つ,1行で入力します。0や負の数を入力してもよいでしょう。input() の括弧内に案内文を書きません。

    処理条件

    • 入力を int() で整数に変換し,変数 num に代入します。
    • if と else を1組使います。
    • 判定には余りを求める演算子 % を使います。ビット演算(& など)や外部ライブラリは使いません。
    • 0は偶数として扱う。

    出力

    • 偶数なら 偶数です,奇数なら 奇数です を1行だけ表示します。
    • 文字はすべて全角とし,句点は付けません。
    • 入力した値は再表示しない(入力欄に表示される値は出力に数えない)。見出し・前後の空白・余分な空行を付けません。

    実行例

    例1 入力:

    7
    

    出力:

    奇数です
    

    例2 入力:

    0
    

    出力:

    偶数です
    

    例3 入力:

    -4
    

    出力:

    偶数です
    
    ヒントを見る

    偶数とは何で割り切れる数かを思い出し,「割り切れる」を余りの値で言い換えます。その言い換えを比較の式にすれば条件になります。0や負の数を入れたときにも期待どおりに分かれるかを実行して確かめましょう。

  6. 章末演習章末演習 6

    0〜10点の評価点を読み取り,優秀・合格・不合格の3段階に分けて表示するプログラムを書きます。if〜elif〜else で3つ以上に分岐することが目標です。

    入力

    キーボードから0以上10以下の整数を1つ,1行で入力します。input() の括弧内に案内文を書きません。

    処理条件

    • 入力を int() で整数に変換し,変数 a に代入します。
    • if,elif,else を1つずつ使います。if の中に if を書く入れ子や,if 文を3つ並べる書き方は使いません。
    • 5以上は優秀,3以上5未満は合格,それ以外(0〜2)は不合格とします。

    出力

    • 判定結果に応じて 優秀,合格,不合格 のいずれか1つを1行で表示します。
    • 文字はすべて全角とします。
    • 入力した値は再表示しない(入力欄に表示される値は出力に数えない)。見出し・前後の空白・余分な空行を付けません。

    実行例

    例1 入力:

    5
    

    出力:

    優秀
    

    例2 入力:

    4
    

    出力:

    合格
    

    例3 入力:

    3
    

    出力:

    合格
    

    例4 入力:

    2
    

    出力:

    不合格
    
    ヒントを見る

    条件は上から順に調べられ,最初に成り立った1つだけが実行されます。そのため,どの段階から先に調べると後の条件を簡単に書けるかを考えます。境目の値(5と3)を入れたときにどの段階に入るかを実行して確かめましょう。

  7. 章末演習章末演習 7

    年齢と身分証の有無を読み取り,18歳以上かつ身分証を持っている場合だけ入場できると表示するプログラムを書きます。2つの条件を and で結ぶことが目標です。

    入力

    キーボードから2行を入力します。1行目は0以上120以下の整数(年齢),2行目は半角小文字の yes または no(身分証の有無)です。input() の括弧内に案内文を書きません。

    処理条件

    • 1行目を int() で整数に変換して変数 age に,2行目を文字列のまま変数 has_id に代入します。
    • if と else を1組使い,if の条件式の中で and を使って2つの条件を結ぶ。if の入れ子は使いません。
    • 18歳ちょうどは条件を満たす側に含める。

    出力

    • 両方の条件を満たすときは 入場できます,それ以外は 入場できません を1行だけ表示します。
    • 文字はすべて全角とします。
    • 入力した値は再表示しない(入力欄に表示される値は出力に数えない)。見出し・前後の空白・余分な空行を付けません。

    実行例

    例1 入力:

    20
    yes
    

    出力:

    入場できます
    

    例2 入力:

    17
    yes
    

    出力:

    入場できません
    

    例3 入力:

    18
    no
    

    出力:

    入場できません
    
    ヒントを見る

    まず,年齢の条件と身分証の条件を,別々の比較の式として考えます。身分証の有無は数値ではなく文字列として比べることに注意します。そのうえで,両方が成り立つときだけ全体が成り立つように2つの式をつなぎます。

  8. 章末演習章末演習 8

    曜日を読み取り,土曜または日曜なら週末,それ以外なら平日と表示するプログラムを書きます。2つの条件を or で結ぶことが目標です。

    入力

    キーボードから 月曜 火曜 水曜 木曜 金曜 土曜 日曜 のいずれか1つを,全角の漢字2文字で1行入力します。input() の括弧内に案内文を書きません。

    処理条件

    • 入力を文字列のまま変数 day に代入します。
    • if と else を1組使い,if の条件式の中で or を使って2つの比較を結ぶ。
    • in 演算子,リストやタプル,elif は使いません。

    出力

    • 土曜か日曜なら 週末です,それ以外なら 平日です を1行だけ表示します。
    • 文字はすべて全角とし,句点は付けません。
    • 入力した値は再表示しない(入力欄に表示される値は出力に数えない)。見出し・前後の空白・余分な空行を付けません。

    実行例

    例1 入力:

    土曜
    

    出力:

    週末です
    

    例2 入力:

    日曜
    

    出力:

    週末です
    

    例3 入力:

    金曜
    

    出力:

    平日です
    
    ヒントを見る

    「土曜である」と「日曜である」を,それぞれ完全な比較の式として書き出してから,どちらか一方が成り立てばよいようにつなぎます。つなぐ演算子の右側にも変数名と比較演算子が必要かどうかを確かめましょう。

  9. 章末演習章末演習 9

    年齢を読み取り,大人かどうかの判定結果(真偽値)を表示した後,大人でなければ入店できないと表示するプログラムを書きます。比較の結果を真偽値として変数に保存し,not で反転して使うことが目標です。

    入力

    キーボードから0以上120以下の整数を1つ,1行で入力します。input() の括弧内に案内文を書きません。

    処理条件

    • 入力を int() で整数に変換し,変数 age に代入します。
    • 「18歳以上である」という比較の結果を変数 is_adult に代入する(18歳ちょうどは大人に含める)。
    • if と else を1組使い,if の条件式は not と is_adult を使って「大人でない」を表します。if の条件の中で年齢を比較し直しません。

    出力

    • 1行目に is_adult の値をそのまま表示します。表示は半角英字で先頭だけ大文字の True または False になります。
    • 2行目に,大人でなければ 入店できません,大人なら 入店できます を全角で表示します。
    • 出力は必ず2行とします。入力した値は再表示しない(入力欄に表示される値は出力に数えない)。見出し・前後の空白・余分な空行を付けません。

    実行例

    例1 入力:

    20
    

    出力:

    True
    入店できます
    

    例2 入力:

    18
    

    出力:

    True
    入店できます
    

    例3 入力:

    17
    

    出力:

    False
    入店できません
    
    ヒントを見る

    比較の式は,それ自体が「正しい/正しくない」を表す値になります。まずその値を変数に入れて表示し,どのような値になるかを確かめましょう。次に,その値を反転したものが成り立つときに先頭の分岐が実行されるよう,2つのメッセージの順番に注意して組み立てます。

  10. 章末演習章末演習 10

    試験の得点を読み取り,範囲外の値を除いたうえで4段階の評価を英語で表示するプログラムを書きます。範囲を表す条件を and で組み立て,elif と組み合わせて,どの入力にも必ず1つの結果を対応させることが目標です。

    入力

    キーボードから整数を1つ,1行で入力します。0〜100の範囲外の値(負の数や101以上)が入力されることもあります。input() の括弧内に案内文を書きません。

    処理条件

    • 入力を int() で整数に変換し,変数 a に代入します。
    • if〜elif〜else の1つの連なりで判定し,if の入れ子は使いません。
    • 「〜以上かつ〜以下(未満)」の範囲条件は,and で2つの比較を結んで書きます。60 <= a < 80 のような比較の連結は使いません。
    • 区分は次のとおりとします。0未満または100より大きい:範囲外,80以上100以下:Excellent,60以上80未満:Good,0以上60未満:Try again。

    出力

    • 区分に応じて Out of range,Excellent,Good,Try again のいずれか1つを1行で表示します。
    • 半角英字とし,大文字・小文字と,単語の間の半角空白1つは上の表記どおりにします。
    • 入力した値は再表示しない(入力欄に表示される値は出力に数えない)。見出し・前後の空白・余分な空行を付けません。

    実行例

    例1 入力:

    90
    

    出力:

    Excellent
    

    例2 入力:

    80
    

    出力:

    Excellent
    

    例3 入力:

    79
    

    出力:

    Good
    

    例4 入力:

    0
    

    出力:

    Try again
    

    例5 入力:

    101
    

    出力:

    Out of range
    

    例6 入力:

    -1
    

    出力:

    Out of range
    
    ヒントを見る

    まず数直線を描き,4つの区分の境目と,境目の値それぞれがどの区分に入るかを決めます。次に,どの区分から先に調べると残りの条件が書きやすいかを考えます。最後に,境目の値と範囲外の値を1つずつ入力し,必ず1行だけ表示されるかを確かめましょう。