プログラム&IT教育

Python入門~5章:条件分岐編~

スポンサーリンク
スポンサードリンク

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円です。

モバイルバージョンを終了