条件によって処理を変える方法(if文)
プログラムを作成していて、数字の大きさなどの条件によって処理を変えたい場合があります。このときにはif文(if statement)を使います。
等しいかどうかの判断
ある条件にあてはまる場合に実行する処理をする
ある条件に当てはまる場合に特定の処理をする方法
2つの数字を比べて、等しい場合だけにある処理を行います。
- #1 2つの値が等しいかを判断し、処理を変える
- x = 5
- if x == 2+3:
- print('左辺と右辺は等しい')
左辺と右辺は等しい
x=5なので3行目のif文で、条件に当てはまる、つまり等しいと判断された場合、”左辺と右辺は等しい”と出力されます。if文のポイントは次の通りです。
- x==2+3のように、”=”を2つつなげます。
- 行の最後に”:”(コロン、colon)をつけます。
- ifにあてはまる場合Trueと判断し、実行する行の行頭を下げます。Pythonでは半角スペース4文字下げるのが一般的です。なお、Pythonのプログラムを入力することができるエディタでは、2のように行末に:を付けて改行すると自動的にインデントされます。
- 以降、行末にコロンを付けた場合、次の行からインデントされることを示しています。
if文の条件に当てはまらない場合
これに対し、if文にあてはまらないときにはFalseと判断し、何も処理が実行されません。
- # 2 if文にあてはまらない場合
- x = 4
- if x == 2+3:
- print('左辺と右辺は等しい')
もし、条件に当てはまらない場合にも何かの処理をさせたいときは、else:という行を設け、if以下と同じようにインデントをして記述します。
- #3 条件にあてはまらない場合の処理
- x=4
- if x==2+3:
- print('左辺と右辺は等しい')
- else:
- print('左辺と右辺は等しくありません')
左辺と右辺は等しくありません
xと2+3は異なるので、5行目のelse節(else clause)が実行されます。
else節で実行する範囲を指定する
else節でif文の条件があてはまらないとelse節の処理を実行しますが、どこまでがelseの内容で、どこからがif文の判断にかかわらず実行するのかを区別する必要があります。この判断もインデントによって行います。
- #4 どこまでelseの処理が行われるか
- x = 5
- if x == 2+3:
- print('左辺と右辺は等しい')
- else:
- print('左辺と右辺は等しくありません')
- print('xに異なる値を代入してください')
- print('おしまい')
左辺と右辺は等しい おしまい
このように、if文にあてはまると、4行目が実行し、else以下インデントになっている6,7行目を飛ばして8行目以降が実行されます。
ある条件にあてはまらない場合に特定の処理をしたい場合
ある条件に、当てはまらない場合に特定の処理をしたい場合があります。例えばある数字(例えば100)を変数xで割る処理をするときに、0で割ってしまうとおかしなことになってしまいます。この場合に、if x==0:という条件を設定し、例外処理を記述することもできますが、xが0になるのはあくまでも例外なので、これをメインのシナリオにするのは不自然です。
そこで、次のように等しくない場合に実行する処理を書くようにします。等しくないかどうかを判断するためには’!=’とします。xが0でないというのが基本なのでこの書き方の方が自然です。
- #5 等しくないかを判断
- x = 4
- if x != 0:
- print(100/x)
- else:
- print('0で割ることはできません')
25.0
多くのプログラミング言語では’<>’、’ne’などとする場合が多いので少し戸惑いますが、0で割り算をするような驚くことを防ぐという意味を込めて!=(ビックリマーク)と覚えれば大丈夫です。
値の大きさを比較して処理を分ける方法
左側が大きい場合
値を比較して大きい場合に特定の処理をする場合
値の大小を比較して、条件にあてはまる場合ある処理をするときには”>”(大なり)記号を使います。
- #6 比較してある値より大きいかを判断
- x = 60
- if x > 60:
- print('目標を超えました!')
- else:
- print('目標を超えることができませんでした')
目標を超えることができませんでした
>の場合、等しい場合には条件にあてはまらないと判断されるので、このケースではelse節以下が実行されます。
値を比較して大きいか等しい場合に特定の処理をする場合
>と似ていますが、大きいか等しい場合に特定の処理をするときには”>=”を使います。
- #7 比較してある値より大きいか等しいかを判断
- x = 60
- if x >= 60:
- print('目標を達成!')
- else:
- print('目標に達しませんでした')
目標を達成!
右側が大きい場合
値を比較して小さい場合に特定の処理をする場合
値の大小を比較して、小さいという条件にあてはまる場合ある処理をするときには”<”(小なり)記号を使います。
- #8 比較してある値より小さいかを判断
- y = 5
- if y < 5:
- print('基準値を下回っています')
- else:
- print('基準値を超えています')
基準値を超えています
>=の反対で、小さいか等しいという条件に当てはまる場合ある処理をするときは”<=”(小なり≠)記号を使います。
- #9 比較してある値より小さいか等しいかを判断
- y = 5
- if y <= 5:
- print('基準値で収まっています')
- else:
- print('基準値を上回っています')
基準値で収まっています
複雑な条件を指定する方法
値の大きさを段階に分けて条件分けする方法
ある値の大小関係だけでなく、いくつかの段階に分けて処理を分けるなど、複雑な条件を設定するためには、elif節(elif clause)を使います。
例えば、ある店では売上金額に応じて会員のランク分けをしています。10,000円以下はレギュラーランク、20,000円以下はシルバーランク、50,000円以下はゴールドランク、その他(50,000円を超える)場合はプラチナランクとすることを考えます。このときには、if,elif,elseを使います。
- sales = 25000
- if sales <= 10000:
- print('レギュラーランク')
- elif sales <= 20000:
- print('シルバーランク')
- elif sales <= 50000:
- print('ゴールドランク')
- else:
- print('プラチナランク')
ゴールドランク
- 3行目のif文によりsalesが10000以下の場合、「レギュラーランク」と表示されます。
- 3行目のifの条件にあてはまらず、なおかつ20000以下の場合には5行目のelif節に入り、「シルバーランク」と表示されます。
- 同様に1にも2にもあてはまらず、なおかつ50000以下の場合は7行目のelif節に入り、「ゴールドランク」と表示されます。
- 上記のいずれにも当てはまらない場合は、9行目のelseに入り「プラチナランク」と表示されます。
if文の中でさらに細かい条件分けをする方法
あるスーパーでは、駐車場の料金は次の通り定められているとします。
ポイント会員
時間 | 料金 |
---|---|
2時間以内 | 0円 |
2時間を超え4時間以内 | 200円 |
4時間超 | 300円 |
一般会員
時間 | 料金 |
---|---|
1時間以内 | 100円 |
1時間を超え3時間以内 | 300円 |
3時間超 | 500円 |
このように、はじめにポイント会員か一般会員かの条件分けがあり、さらにその各々について条件ごとに結果が異なる場合には、次のように複雑な条件を指定する必要がある場合があります。このときには、if文を2段階にして適用します。
- #11 if条件のネスト
- hour=3
- kubun="p"
- if kubun=='p':
- if hour<=2:
- print('0円')
- else:
- print('200円')
- else:
- if hour<=2:
- print('100円')
- elif four <=3:
- print('300円')
- else:
- print('500円')
200円
4行目のはじめのif文で会員区分の判断をし、Trueの場合には、5行目ので、2段階目のif文、9行目のelseの中で、さらにif文による条件判断をしています。
このように、if文による条件を複数の段階に分けて適用することをネスト(入れ子)といいます。
1つのif文で複数の条件を設定する方法
2つの条件のいずるかにあてはまる場合にある処理をする場合
健康診断の判定などで、ある範囲をはずれた場合に再検査と判断することがあります。このとき、2つの条件を”or”でつなげます。o
- #12 複数の条件、または
- x=70
- if x <= 80 or x >140:
- print('再検査')
- else:
- print('正常')
正常
この場合、70はx<=80にあてはまるのでTrueとなり再検査となります。
2つの条件の両方があてはまる場合にある処理をする場合
逆の場合、80よりおおくなおかつ140より小さい場合、するときには条件を”and”でつなげます。
- #13 複数の条件、かつの条件
- x=100
- if 80
- print('正常')
- else:
- print('再検査')
正常
2つの条件の両方があてはまる場合にある処理をする場合
上記のようにある範囲に収める場合は、andでつなげなくても80 if文、else節を使うと複雑な条件を指定することができます。当面、ここでの方法を使えば大抵の処理は問題なくできると思われます。
正常