太っているか痩せているかを数値で表せるBMIというのご存知だろうか?
BMI=体重kg / (身長m * 身長m)
BMIは体重を身長の2乗で割って求めることができる。体重が分子にきているので太っているほどBMIは大きくなる。
今回はユーザーに身長と体重を入力してもらいBMIを測定し、その結果太っているのか痩せているのを判定するアプリを作成する。
まずは実行例を見てみよう
[作ってみよう]
1.
まずは前回同様、文字を表示して入力受付だ。
1 | height = input ( '身長(cm)を入力してください>' ) |
2 | weight = input ( '体重(kg)を入力してください>' ) |
これでユーザーの身長をheight,体重をweightという変数に保持することができる。
ただ気をつけなければならないのは数値を入力しても、内部では文字列として扱われるのでこのままでは計算ができない。変換をする必要がある。
また、BMIの計算では身長の単位はmだ。この2点を踏まえて先ほどのコードに追記しよう。
1 | height = input ( '身長(cm)を入力してください>' ) |
2 | weight = input ( '体重(kg)を入力してください>' ) |
3 | height = float (height) / 100 |
前回はユーザーが入力したデータをint()を使って整数に変換したが今回はBMIの計算なので実数(小数点のある値)に変換する。
文字列を実数に変換するにはfloat()命令を使えばよい。
ここではユーザー入力したデータを実数に変換した後、100で割ってcmからmに変換している。(160cmは1.6m)
「実はプログラミングはここの理解が大事!」
実はこの変換している3行目はプログラムを学ぶ上でとても大事なエッセンスがぎゅっと詰まっている。
別の例で少し確認しておこう。
なんと表示されるかわかるだろうか?
これは110と表示されるプログラムだ。
まずは1行目これはいいだろう。10という値を変数xに代入している。
次に2行目。ここをしっかり理解することが兎にも角にも大事だ。
プログラムはイコール記号(=)が出てきたらまず右辺が評価される。
上の例でいうと右辺はx+100だ。評価の際には変数に入っている値は取り出されるつまりxは10と評価され
右辺は10+100という状態になる。10+100はいうまでもなく110だ。
結果
x=110
となる。これは一行目と同じ状態だ。改めてxに110が代入される。
xが10だったのが110に変わった。
このように変数はどんだん値を変えて行くことができる。その際古い値は消えて行く。ちょうど上書きしていくイメージだ。
「イコール記号が意味すること」
算数で出てくるイコール記号(=)は右辺と左辺が等しいことを表す記号だ。
しかし、プログラムで出てくるイコール記号は意味が全く違う。右辺で評価された結果を左辺に代入する。
常に右から左へ流れだ。
プログラムで出てくる=は算数で出てきた=とは全く意味が違う。
ここをまずしっかりと認識することが大事だ。
なので算数ならば普通にできる右辺と左辺の入れ替え
x+100=x
こんなことはできるわけがない。即座にエラーだ。
3 | SyntaxError: can't assign to operator |
=記号の意味することがわかってきたであろうか?
ここで改めて先ほどのコードの身長部分を抜き出して見てみよう
1 | height=input('身長(cm)を入力してください>') |
2 | height=float(height)/100 |
1 | height='160' #右辺がユーザーが入力した内容に置き換わる |
2 | height=float(height)/100 |
2 | height=float('160')/100 #右辺にある変数は値が取り出される |
2 | height=160.0/100 #float()命令によって文字列が実数に変換された |
2 | height=1.6 #1.6という値がheightに代入される |
内部でおこっている挙動を順番に記した。
height変数に1.6が入るまでの経緯が理解できたであろうか?
OK。ここまで理解できればBMIはすぐ計算できる。さきほどのファイルに追記しよう。
1 | height = input ( '身長(cm)を入力してください>' ) |
2 | weight = input ( '体重(kg)を入力してください>' ) |
3 | height = float (height) / 100 |
5 | bmi = weight / (height * height) |
無事にユーザーのBMIを表示するところまでできた。
次回はBMIの値によってデブなのかヤセなのかあるいは普通なのかを表示する処理をつくっていく。
コメント