前回のコラムではプログラムを動すという凄い経験をしたと思いますので、今回からは「何が書かれているか理解する」というフェーズ(段階)に入ります。
それでは今回はハイスクールPythonの「2. 変数とデータ型」にも書かれているプログラムでとても重要な「変数とデータ型」について学んでいきたいと思います。
復習も兼ねて前回のコードをもう一度動かしてみましょう。
import random
fortune = random.choice(["大吉", "中吉", "吉", "小吉"])
print(f"今日のあなたの運勢は{fortune}です")
実はこのプログラムの中には今回学習する「変数」が存在していました。
変数って何?
中に入るものが決まっていない時や、中に入れる物が変割っていく時に使う箱、それが「変数」と呼ばれるものです。
箱には様々なものを入れる事ができて、何個でも入れる事が出来ます。
つまり前回のコードのfortune = random.choice([“大吉”, “中吉”, “吉”, “小吉”]) の中の「fortune」が変数と呼ばれるものです。
今回の占いプログラムのように、出力する度に内容を変えたい時などにとても便利な存在です。
データ型って何?
突然ですが、キャベツは「食べ物」で野球は「スポーツ」です。そんなことは誰でも知ってますよね。
「料理を作ってください」と言われた時に、キャベツで料理は作れますが、「野球で料理を作る」はおかしな文章になってしまいますよね。
野球では料理が作れません。なぜなら野球は「スポーツ」であって「食べ物」ではないからです。
実はこれがデータ型の考え方とよく似ています。
Pythonでは型が違うと処理が実行できなくなる、プログラムが動かなくなる事があります。
整数はint型と言い、”大吉”は文字列(str)型と言います。
int型とint型や、str型とstr型では足し算ができますが、int型とstr型では足し算ができません。
ただし幾つか例外もあります。
float型とint型は親戚のような関係性なので型違いですが計算することができます。
それでは下記の①〜③は計算できるのか、エラーになるのかどっちでしょうか?
①print(“w” – 8)
②print(“w” * 8)
③print(“w” / 8)
正解は①と③は、TypeErrorという型違いのエラーになりますが、②は実行されます。
どういう出力になるのかは実際に実行して確かめてみてください。
想像通りか想像と違う結果か、どっちでしょうか。
int型とstr型の掛け算は色々なプログラムを書く時に使えるので、ぜひ覚えておきましょう。
プログラムを動かしてみよう
それでは今回も実際にプログラムを動かしてみましょう。
今回はBMIを計算するプログラムです。
ハイスクールPythonでもBMIの計算プログラムが紹介されていますが、このコラムではあなたのBMIを計算できるプログラムをご紹介します。
weight = float(input("体重(kg)を入力してください: "))
height_cm = float(input("身長(cm)を入力してください: "))
height_m = height_cm / 100
bmi = weight / (height_m * height_m)
print(f"あなたのBMIは {bmi:.1f} です")
前回のコラムにあったプログラムの中にname = input(“あなたの名前は?:”)という1文がありましたが、input文とは入力した値を受け取る事が出来る書き方です。
このinput文というのは、文字を入れても数字を入れても、全てstr型になるという特徴があります。
つまり、input文で入力して貰った身長や体重はstr型なので、そのまま計算することはできません。
計算するにはint型またはfloat型でないといけないからです。
そこで「型変換(キャスト)」という便利な方法を使います。
今回のプログラムでは、input文で受け取った値をfloat型(小数点を含む数値)にキャストして変数に入れる という事を一度に行っています。
もちろん、input文で受け取ったstr型を変数に代入してから、キャストすることもできますが、それだとプログラムが数行増えてしまうので、まとめて処理を行っています。
キャストする方法はとても簡単で、float()で囲うだけ。()の中に入っているものがfloat型に変わります。
型変換とは
Pythonの型変換は、RPGのジョブチェンジみたいなものです。
例えばゲームのキャラクターを「戦士」に設定していたのを、神殿に行って「魔法使い」に転職させることってありますよね。キャラクターそのものは同じだけど、戦士と魔法使いでは扱える武器やスキルは大きく変わりますよね。
Pythonでもそれは同じで、100 という数字(int型)を文字列に変換すると “100” という str型になります。見た目は似ていますが数字として計算できるか、文字として文章に入れるか、使える「スキル(機能)」が違うのです。
型変換とは変えたい型を着せるだけで型を変える事ができる便利な方法なのです。
先ほどのBMIを計算するプログラムでは
まず、体重を入力してもらい、それをfloat型にキャストしてweightという変数に代入。
その後、身長を入力してもらい、それをfloat型にキャストしてheight_cmという変数に代入。
これで体重も身長もstr型から計算が出来るfloat型になりました。
その後はBMIの計算をするために、cmをmに変えているのですが、プログラムでは+ー×÷ではなく、+ー*/ を使って計算式を書きます。
つまり
height_m = height_cm / 100 は100で割っていて
bmi = weight / (height_m * height_m) は身長(m)×身長(m)を体重で割り算してbmiという変数に入れています。
最後にprint文で計算結果を出力しているのですが、その時に {bmi:.1f} という書き方で少数第1位までだけを表示させています。
割り算のプログラムを書く時は小数点以降の桁数が多くなる場合も考えて、少数第何位までを表示させる という書き方をしておくと出力結果が見やすくなります。
他にもハイスクールPythonの2.5で紹介されている{round(bmi, 1)}という四捨五入する書き方があります。
BMIの計算は切り捨てて表示させるよりも、四捨五入した方が正確な結果になりますので、ぜひこのコラムで紹介したBMIの計算プログラムを四捨五入して計算する書き方に変えてみて、プログラムが動くか試してみてください。
最後までお読みいただき、ありがとうございました。
型の考え方が少しでもわかったかもと思ってもらえたら嬉しいです。
それではまた次回お会いしましょう!