皆様お疲れ様です。
ノンストップ飯田です。大分プログラミングっぽくなってきたところで、更にぽさに磨きをかけていきましょう。
今回は条件式について学びましょう。
↓応援お願いします!
にほんブログ村
目次
ケーススタディで簡単にPython条件式を理解しよう
まずは、条件式を使うケースをもとにイメージをつかみましょう。
あなたは、ランチに何を食べるか迷っています。
はじめに目についた人が来ている服の色で、メニューを決めることにしました。
“赤”であれば、ラーメン
“青”であれば、パスタ
“緑”であれば、生姜焼き定食
それ以外であれば、飯抜き!
では、上記ケース➊での状況を実際にプログラムに落としてみましょう。
服の色をcolor変数とすると、以下のようなコードになります。
… print(“ラーメン”)
…elif color == “青”:
… print(“パスタ”)
…elif color == “緑”:
… print(“生姜焼き定食”)
…else:
… print(“飯抜き”)
これが、Pythonで書いた条件式です。
まずはポイントを先に覚えてしまいましょう。
・if/elif/else等の条件には最後にセミコロン(:)を必ずつける
・条件に合致した場合の挙動を書いた部分は必ずインデントする
・比較演算子は演算子と異なるため注意
インデントを覚えよう
インデントとは、文頭を下げて(スペースをあけて)書き出すことです。(字下げともいいます。)
Pythonのコードがシンプルなのは、このインデントの塊でプログラムの適用範囲を決めているためです。
仮にifの後にインデントをとらずに、その後の挙動を書いた場合、条件式を踏まえた挙動ではなくなります。
これは後に学習するforやwhileを用いたループ処理を記載する時、関数を定義する場合等も同様です。
比較演算子を覚えよう
比較演算子とは、〇〇 と ◆◆ が等しい、×× は ▲▲ より大きいなど2つの値を比較する目的で使用するものです。
以下にまとめますので、このサイトでの勉強だけでなく、ご自分で学習される時も参照してください。
演算子 | 記述方法 | 意味 | |
---|---|---|---|
1 | “==” | a == b | aとbが等しい |
2 | > | a > b | aはbより大きい |
3 | < | a < b | aはbより小さい |
4 | >= | a >= b | aはb以上 |
5 | <= | a <= b | aはb以下 |
6 | “=!” | a =! b | aとbは等しくない |
ifのみで条件式を書くケース
クラス30人中10人以上が休みだったら、学級閉鎖になる学校があります。
休みの人数を変数absense,クラスの状態を変数clで表すとします。
仮に欠席者が12人の場合は以下のような条件式となります。
>>>absense = 12
#条件式を設定(“欠席者が10人以上の場合”は、という条件式を書く)
>>>if absense >= 10:
… #インデント(行の頭はスペース4文字かタブキーでスペースをあける)後にcl変数に”学級閉鎖”を代入。
… cl = “学級閉鎖”
… #変数clを出力(Enterは2回押す)
…
…print(cl)
学級閉鎖
欠席人数が12人(10人以上)なので、変数Cl に文字型”学級閉鎖”が代入されます。
では、欠席人数が8人だった場合はどうなりますでしょうか?
試してみてください。
>>>
>>>absense = 8
>>>if absense >= 10:
… cl = “学級閉鎖”
… print(cl)
学級閉鎖が出力されませんね。欠席者が8人なので、変数clに”学級閉鎖”が代入されずインデント内にあるPrint関数も動きません。
ただ仮にこのプログラムにより遠隔地で判定結果を受け取る場合、欠席者が10人未満だったのか、それとも10人以上で学級閉鎖になったけど通信回線等の故障で判定結果が来てないだけなのか分からないですよね。
elseを使って、条件に合致しないケースを拾う
条件式を使う際に、”if”だけで事足りる場合もあるのですが、例えば上の学級閉鎖の例も、10人以上だったら「学級閉鎖」、それ以外だったら「授業実施」みたいに出力してくれた方が分かりやすいですよね。
ではその場合、どのようにプログラムを書いたらいいのでしょうか?
その場合は、”else”を使います。
学級閉鎖の例でelseを使って、以下の通り書いてみました。
>>>absense = 9
>>>if absense >= 10:
… >>>cl = “学級閉鎖”
…else:
… >>>cl = “授業実施”
…#ここでenterでまずは実行し、その後↓のprint関数を使ってください
…print(cl)
授業実施
どうでしょうか?これなら、学級閉鎖なのか授業実施なのか(正確には学級閉鎖の条件に当てはまらないことが)分かりますよね。
ただ、例えばプログラムにエラーがあったり、そもそもabsense変数に誰かが間違えて文字型を入力していた場合でも、授業実施と判定されてしまいます。
そこで、複数の分岐を作り、想定しえるパターンはすべて条件分岐で処理し、想定できないエラー等をelseで受けると、不具合やエラーに気づきやすくなると飯田は考えます。
elifで条件分岐を増やそう
実際にプログラムを作る場合、条件が3個も4個もあるというのは良くあることだと思います。
その場合は、どうすればいいのでしょうか。
その場合は、“elif”を使います。
例えば、先ほどの学級閉鎖のプログラムに更に複数の条件を入れます。
変数men_absenseを男子の欠席者、women_absenseを女子の欠席者とし、”男子か女子のいずれか一方が5人を超えた場合、もしくはクラス全体で欠席者が10人以上だった場合に学級閉鎖とする”というプログラムを書いてみます。
>>>absense = 5
>>>men_absense = 5
>>>women_absense = 0
>>>if absense >= 10:
… cl = “学級閉鎖”
…elif men_absense >= 5 or women_absense >= 5:
… cl = “学級閉鎖”
…else:
… cl = “授業実施”
…#一度enterを押して処理実行、その後↓のprint関数を実行
>>>print(cl)
学級閉鎖
こんな感じですね!
クラス全体で欠席者は5人なのですが、男子生徒が5人欠席したので学級閉鎖と処理された訳です。
条件式のなかで条件を複数設定する方法
しれっと書いてしまいましたが、”elif”のところで、”or”をつかっていますよね?
これを使うと、条件式の中に複数条件をいれることができます。
“and”も使うことができるので、色々ためしてみてください!
[andとorの使用例]
・if a =< 3 and a < 5
☞ aは3かつ5未満
・if a => 1 or a > 6
☞ aは1以上または6より大きい
演習問題
最後に知識定着のため、練習をしてみましょう。
いいだ君はお母さんに1,000円を渡されて、スーパーに来ました。
肉を買ってきてと言われたのですが、牛肉が100グラム140円以下なら牛肉を、
豚肉が100グラム100円以下なら豚肉を、鶏肉が100グラム90円以下なら鶏肉を買うように言われました。
お母さんの食べたい順番は牛肉>豚肉>鶏肉で、300グラム買ってくるように言われています。
牛肉が100グラム160円、豚肉が100グラム98円、鶏肉が100グラム89円とした場合に、いいだ君はどの肉をいくらで購入するでしょうか。この条件式を書いてみましょう。
#牛肉をbeef変数、豚肉をpork変数 、鶏肉をchikin変数とし、購入する肉をmeat変数とする
>>>beef = 160
>>>pork = 98
>>>chikin = 89
#条件式を設定(どれも条件にあてはまらない場合の買わない選択肢も追加)
>>>if beef <= 140:
... meat = beaf
...elif pork <= 100:
... meat = pork
...elif chikin <= 90:
... meat = chikin
...else:
... meat = "買わない"
#ここで処理を実行
>>>print(meat*3)
294
できましたか??
鶏肉も豚肉も条件には当てはまったのですが、豚肉の方が先に条件に合致したため、変数meatに変数porkが代入されたのです。
次回は、いよいよコマンドプロンプトでなく、テキストエディタでプログラムを書いて保存する方法と、リスト型や辞書型について学んでいきたいと思います。
お疲れさまでした!