コンテンツ
Pythonの条件分岐とは?
もし○○だったら、△△をする。
そうでなければ、■■をする。
という条件に合わせて行動を決定する
動作のことを表しています。
具体的な例でいうと、
もし雨がふったら、傘を持って行く。
そうでなければ、傘を持って行かない。
のように、普段の日常でも
ある条件があって、それに従って行動をしています。
このような条件に従って
異なる動作を行う場合を
プログラミングするときに条件分岐を使います。
条件分岐「if」の使い方
Pythonのプログラムで条件分岐を行うときには、
“if”を使います。
文法
if 条件 :
"条件の時に行う処理"
“条件の時に行う処理”の前に、
必ず「空白のスペース/インデント」を入れます。
これは1章で説明した「インデント」を入れる
特殊なルールがあると説明したものの一つです。
“条件”が成立するときに、
“条件の時に行う処理”
行う、というプログラムになります。
さきほどの例で、ifを使うと次のようになります。
if 雨がふったら :
"傘を持って行く"
条件分岐「if~else~」の使い方
もう一つ例を使って説明します。
ifの中に使う条件には、4章で出てきた比較演算子を使うことができます。
もし降水確率が50%以上になったら傘を持っていく。
降水確率が50%未満だったら傘を持って行かない。
というプログラムを考えます。
・降水確率が50%以上になったら
“傘を持って行く”
・降水確率が50%未満だったら
“傘を持って行かない”
降水確率の値がどうなるかで処理が2通りに分かれます。
このように条件式”if”の条件を満たす場合と
条件を満たさない場合で処理を分岐させる場合には、
“if~else~”を使います。
文法
if "条件" :
"条件が成立する(Trueになる)時に行う処理"
else:
"条件が成立しない(Falseになる)時に行う処理"
“条件が成立する/しない時に行う処理”の部分は、
前に必ず「空白のスペース/インデント」を入れます。
このif~else~を使ってさきほどの文章でプログラムを考えてみます。
この場合、降水確率を変数”p”とした場合、次のように表します。
条件分岐「if~else~」のサンプルプログラム
if p >= 0.5 :
print("傘を持って行く")
else:
print("傘を持って行かない")
50%は0.5なので、”以上”を表すには比較演算子を使って”>=”を使っています。
このように、もしAならば○○の処理を行う。Aでないならば、△△の処理を行う
というような場合は、if~else~の処理を使います。
では、さきほどのサンプルプログラムを試してみましょう。
pの値を変更して、結果が変わるかを確認します。
p = 0.6
if( p >= 0.5 ):
print("傘を持って行く")
else:
print("傘を持って行かない")
p = 0.1
if( p >= 0.5 ):
print("傘を持って行く")
else:
print("傘を持って行かない")
をそれぞれ入力して結果を確認します。
Pythonコマンドを実行して、さきほどのプログラムを対話モードで確認してみてください。
<実行結果>
>>> p = 0.6
>>> if( p >= 0.5 ):
... print("傘を持って行く")
... else:
... print("傘を持って行かない")
...
傘を持って行く
>>> p = 0.1
>>> if( p >= 0.5 ):
... print("傘を持って行く")
... else:
... print("傘を持って行かない")
...
傘を持って行かない
p(降水確率)の値によって、傘を持って行く、傘を持って行かないの2通りの結果が変わることが確認できました。このように、条件の判断をする場合に、条件分岐のif~elseのプログラムを使います。
条件分岐「if~elif~else~」の使い方
if~else~は、条件が2つある場合の判定に利用できますが、
条件が3つ以上ある場合には使えません。
条件が3つ以上の時に使う条件式を説明します。
if( 条件A ):
"条件Aが成立する(True)時に行う処理"
elif( 条件B ):
"条件Bが成立する(True)時に行う処理"
else:
"条件Aと条件Bが成立しない時に行う処理"
“条件Aが成立する(True)時に行う処理”
“条件Bが成立する(True)時に行う処理”
“条件Aと条件Bが成立しない時に行う処理”
それぞれ、前に必ず「空白のスペース/インデント」を入れます。
なお、”elif”はifからはじまってる条件のあとであれば
複数追加することができるので、
3つ以上の条件判定を行うことができます。
例えば次のようなプログラムも作ることができます。
if( 条件A ):
"条件Aが成立する(True)時に行う処理"
elif( 条件B ):
"条件Bが成立する(True)時に行う処理"
elif( 条件C ):
"条件Cが成立する(True)時に行う処理"
elif( 条件D ):
"条件Dが成立する(True)時に行う処理"
else:
"条件Aと条件Bと条件Cと条件Dが成立しない時に行う処理"
条件分岐「if~elif~else~」のサンプルプログラム
次の問題をプログラムにして、
3つ以上の条件判定を行うことを確認しましょう。
1~5の番号が書いてあるくじを引きます。
このくじの番号が、
もし1だったら、100円
もし2だったら、200円
もし3だったら、300円
それ以外は、1000円
を支払う
というプログラムを作ることを考えます。
<解説>1~5のくじの番号を入れる変数を、”kuji”
支払う金額を”money”という変数に格納します。
プログラムを作成したら、
くじの番号を1~5それぞれ入力した場合の
結果を出力するようにします。
kuji = 1
if( kuji == 1 ):
money = 100
elif( kuji == 2 ):
money = 200
elif( kuji == 3 ):
money = 300
else:
money = 1000
print("支払うお金は\n")
print(money)
print("円です。\n")
複数の条件分岐 演習問題
もし年齢が5歳以下なら
「幼児」です。
もし年齢が6歳以上12歳以下なら、
「小学生」です。
もし年齢が13歳以上15歳以下なら
「中学生」です。
もし年齢が16歳以上18歳以下なら
「高校生」です。
もし19歳以上なら
「大人」です。
というように、年齢を入力すると、
どれになるか出力するプログラムを作ってみよう。
プログラムの出力イメージ
あなたの年齢は?
20(整数) 歳です。
あなたは、「大人」です。
# coding: shift-jis
age = 20
print("あなたの年齢は?")
print(age "歳です。\n")
print("あなたは")
if( age <= 5 ):
print("幼児です。")
elif( age <= 12 ):
print("小学生です。")
elif( age <= 15 ):
print("中学生です。")
elif( age <= 18 ):
print("高校生です。")
else:
print("大人です。")
<出力結果>
PS C:\PythonProgram> py lesson5-2.py
あなたの年齢は?
20
歳です。
あなたは
大人です。
応用編)複雑な条件分岐(ネスト)
条件が複数ある場合に使う場合について説明します。
例えば、動物園などでは年齢によって入園料がとられますが、
これを年齢で分ける場合について考えてみます。
また、条件が複雑になりますが、
時間帯によって値引きする場合もあるため、
次のような例題を考えてみました。
例題
1-1.
年齢が6歳以下なら幼児である。
1-2.
午前中の幼児の入園料は500円
午後の幼児の入園料は300円
2-1.
年齢が18歳以下なら学生である。
2-2.
午前中の学生の入園料は1000円
午後の学生の入園料は800円
3-1.
年齢が19歳以上なら大人である。
3-2.
午前の大人の入園料は2000円
午後の大人の入園料は1800円
年齢と時間を条件判定を使って、
年齢と時間で入園料を判断する
プログラムを作ってみよう。
5歳、午後のときの入園料
20歳、午前のときの入園料
を出力結果で確認してみよう。
プログラムの考え方
この例題では、条件が2つあります。
①年齢が何歳か?
②入園の時間は午前なのか午後なのか?
そのため、プログラムを作るときには
条件①と②を組み合わせて考えます。
【条件①】年齢が○歳だったら
【条件②-1】午前だったら
入園料がXXX円
【条件②-2】午後だったら
入園料がXXX円
これは条件①のなかに、さらに条件②が入る、
入れ子(ネスト)と呼ばれる状態になります。
条件①が正しい場合、次の条件②の判定を行います。
この考えを元にプログラムを組みなおすと
以下のようになります。
【1-1】年齢が6歳以下だったら
【2-1】午前だったら
入園料が500円
【2-2】午後だったら
入園料が300円
【3-1】年齢が18歳以下だったら
【4-1】午前だったら
入園料が1000円
【4-2】午後だったら
入園料が800円
【5-1】年齢が19歳以上だったら
【6-1】午前だったら
入園料が2000円
【6-2】午後だったら
入園料が1800円
サンプルプログラムの回答例では、
年齢をageという変数で扱い、数字型として整数を代入します。
午前か午後の時間をtimeという変数で扱い、
データ型を「論理型」にします。
Trueを午前、Falseを午後、と扱って条件を判断します。
<回答例>
# coding: shift-jis
age = 20
time = True
if( age <= 6 ):
if (time == True):
print("入園料は500円です。")
else:
print("入園料は300円です。")
elif( age <= 18 ):
if (time == True):
print("入園料は1000円です。")
else:
print("入園料は800円です。")
else:
if (time == True):
print("入園料は2000円です。")
else:
print("入園料は1800円です。")
<実行結果>
入園料は2000円です。