#条件分岐を理解する
##ゴール
今回は条件分岐を理解し、
BMIを算出するプログラムを理解および自身でコーディングできるようになる!
##if文
If you can dream it, you can do it.
(夢見ることができれば、それは実現できる)
- Walt Disney (ウォルト・ディズニー) -
いつか、なんでも作れるようなエンジニアになって、モテモテのライフを夢見て…ムフフ(//∇//)
こんにちは、しんちゃんです。モテるためにPythonを学んでいるわけでは決してありません!
今回はpythonの初歩中の初歩と言われている「条件分岐」を健康指数BMIを使って、学んでいきましょう!
##BMIってなんだっけ
余談ですが、みなさんBMIはご存知ですか??
本編とは関係ありませんので、読み飛ばしていただいて結構です!🙆♂️
BMIというのは、世界が定める健康指数です。
BMIの指数というのは、体重を身長の2乗で割ることで算出します。
↑このような関係値になっています。
これを言ったら本末転倒なのですが、
この表と電卓があれば、1分でBMIが算出できるので是非やってみてください!
(これを言ってしまうとBMIのプログラミングをする意味がぁ…)
##条件分岐
###条件分岐とは?
条件分岐はコンピュータが動作する際に
ある条件ではA,ある条件ではBと言った判断をこちらで作ることをいいます。
わかりやすく言えば、
信号が赤だったら「止まれ」
青だったら「行け」
(※一部の地域では「黄色は加速、赤勝負」という言葉があるので地域性がありますが…)
ということですね。
このような条件の「Yes」か「No」かの判定で、コンピュータではいろいろな決定がされているのです。
ドラクエで言えば、「お鍋のフタを装備している」→「Yes」→「防御力 = 3」(もっとありましたっけ?)
などです。
この「Yes」「No」の条件で動作が決まっていくのが「条件分岐」になります。
###条件分岐は「if」で書く
はい。ここで最初の名言の伏線を回収しました。
なぜ「if」から始まる文章を使ったのか?それは今日のテーマが「if」だからです。
条件分岐はif文で書かれます。
if文の使い方は次にような形です。
if 条件式:
動作
elif:
動作
else:
動作
といった形になります。
順を追って説明します。
まずは、
if 条件式:
ですが、ifの後にスペースを一つ入れ、その後ろに条件式を書いていきます。
条件式というのは、
「aはbより大きいのか?小さいのか?それとも同じなのか?」
という条件です。これによりYes、Noを判定します。
条件式は次のような種類があります。
a == b(aはbと同じ。a,bは型を揃えれば基本的に数字でも文字でもいい)
a < b(aはb未満)、a > b(aはbより大きい)
a <= b(aはb以下)、a >= b(aはb以上)
a != b(aはbではない。)
これらの条件式をifの後ろに入れて式を作ります。
BMI = 15
if BMI < 16:
といった形です。
###動作の式
動作の式はいつも通り書いていただければ問題ないでしょう!
しかし、ここでも注意が必要!
if文をやる上で必ず誰しもが1度はやっているミス、発生するerrorです。
if文の条件式の最後に**「:」**をつけ忘れることです。
これはもうあるあるです。このerrorをしたことがない方は是非一度ご連絡いただきたいです。笑
BMI = 15
if BMI < 16: #この「:」を忘れないように!!!
print("あなたのBMIは16よりも少ないです。")
print("病院にいきましょう。")
>>>
あなたのBMIは16よりも少ないです。
病院にいきましょう。
次は、その条件式を満たした時の動作の式になります。(bool値がTrueだったとき。)
###条件式の後ろはインデントでまとめる
その前に、if文に限らずPythonでの話ですが、C++などと違い、Pythonでは{}で動作の部分を囲って扱うというより「インデント(空白)でブロックを管理する」というイメージです。
BMI = 17 #今回は15ではなく17に設定
if BMI < 16:
print("あなたのBMIは16よりも少ないです。")
print("病院にいきましょう。")
こんな風に書いたとすると、BMIは17なのでif文は成立しません。したがって、
「あなたのBMIは16よりも少ないです」
「病院にいきましょう。」
という2つの文章は出ないはずですが、
結果は
BMI = 17
if BMI < 16:
print("あなたのBMIは16よりも少ないです。")
print("病院にいきましょう。")
>>>病院にいきましょう。
となります。
これが**「インデントでまとめる」**ということです。空白の部分を揃えないと同じブロックとして読み込んでくれないような仕組みになっています。なので、気をつけましょう。
以下のように書けば大丈夫です。
BMI = 17
if BMI < 16:
print("あなたのBMIは16よりも少ないです。")
print("病院にいきましょう。")
>>>
###条件分岐が複数ある時
BMIの表のように、条件分岐がたくさんある時は**「elif」**を使います。
(else if)の省略形だと思ってくれればいいでしょう。
BMI = 17
if BMI < 16:
print("あなたのBMIは16よりも少ないです。")
print("病院にいきましょう。")
elif 16 <= BMI < 17:
print("あなたのBMIは16以上17未満です。")
print("痩せていますので気をつけましょう。")
elif 17 <= BMI < 18:
print("あなたのBMIは17以上18未満です。")
print("痩せ気味ですが問題ないでしょう。")
>>>
あなたのBMIは17以上18未満です。
痩せ気味ですが問題ないでしょう。
となります。
ちなみに最後の条件分岐の式は「elif」でも「else」でも構いません。
elseは今までのif,elifに当てはまらない場合の動作になります。
ここまで書けば、おそらく自力で書けるのではないでしょうか?
では実際にやってみましょう!
input()を使い、「体重」「身長」を入れたら、BMIを算出するプログラムを作りましょう。
条件分岐ではBMIに応じて、print("太っています")などお好きな動作を入れていただければいいと思います。
さ、手を動かして、jupyter notebookでもvimでもいいので書きましょう!
お手上げですか?
さっぱりわかりませんか?
本当に考えましたか?
わからなくても書いてみるといいでしょう!
のヒント
1.身長と体重の単位は統一してますか?それともそれに応じて対応できるようにしてますか?
2.int型では割り算が進まないでしょう。小数点も扱える型がありませんでしたか?
のヒント
1.インデントでしっかりブロックに分けてますか?
2.条件式の後ろに「:」をつけ忘れてませんか?
さて解答です!自身の答えと見比べてみてください。
print(“体重を入れてください”)
weight = input()
print(“身長を入れてください(cmでもmでも可)”)
height = input()
'''変数の型をstrからfloat型へ変更(int型では計算できないのに気がつきましたか?)'''
weight = float(weight)
height = float(height)
'''身長がcm表記かm表記の違いにおける条件分岐'''
if height > 3:
height = height /100
else:
height = height * 1 #passでも可
'''BMIの算出式'''
BMI = weight /( height * height )
print("BMIは", BMI)
'''以下 BMIの数値による場合分け'''
'''BMIが16以下の時'''
if BMI < 16:
print("あなたは超やせすぎ")
'''BMIが16~17の時'''
elif 16 <= BMI < 17:
print("あなたはやせすぎ")
'''BMIが17~18.5の時'''
elif 17 <= BMI < 18.5:
print("あなたはやややせ")
'''BMIが18.5~25の時'''
elif 18.5 <= BMI < 25:
print("ちょうどええ")
'''BMIが25~30の時'''
elif 25 <= BMI < 30 :
print("あなたは少し太り気味")
'''BMIが30~35の時'''
elif 30 <= BMI < 35:
print("あなたは太ってます")
'''BMIが35~40の時'''
elif 35 <= BMI < 40:
print("あなたはかなり太ってます")
'''BMIが40以上の時'''
elif 40 <= BMI:
print("あなたはもう病院へ")
ざっとこんなもんです。意外にもちょろかったですよね?笑
さて今回はここまでになります。C++とかを扱っていた方は慣れるまでに時間がかかるかと思いますが、基本的な構造は同じなのですぐに理解できるかと思います!
参考になりましたか?
まだまだ、PythonのPの書き始めくらい(「'」これくらい)のレベルですが
Outputとして記事を書いております。是非とも参考にしていただけたらと思います。
間違っている点、わかりにくい点、などあるかと思います。
是非ともご指摘いただけますと、質の向上になります。
よろしくお願いします(´ω`)
mail:shinchan.tlpu@gmail.com
twitter(最近つくったので):@shinchan_tlpu