放課後Pythonラボ 第3時限目 比較して、判断する ― 比較演算子とbool型

こんにちは、森山です。

前回のコラムでは変数やデータ型について学びましたね。

実は変数名をつける時は幾つかのルールがあります。

基本的な考え方としては、後からソースコードを見返した時や、他の人が見た時に想像しやすい変数名を付けるようにする事です。

また、変数名に使う文字には使って良いもの、いけないものがあり、ハイスクールPython「2.3 変数名の名付け方のポイント」で紹介されていますので、ポイントを押さえておきましょう。

平均点を求めるプログラムを書いてみよう

それでは前回の復習も兼ねて、簡単な計算プログラムを作ってみましょう。

前回のコラムを読んでいれば、今まで電卓などで計算していた中間試験や期末試験の平均点をPythonを使って求める事が出来ます。

例:国語45点、数学54点、英語60点、理科72点、社会90点 5教科の平均点を求める

様々な書き方がありますが、今回はシンプルな平均点を出す計算式で考えます。

数学で習う計算の考え方と全く同じで、45, 54, 60, 72, 90という数字を全部足して、教科数の5で割って平均点を求めていきます。

ここで重要なのが、前回学んだデータ型になってきます。

型を間違えてしまうとTypeErrorというエラーが出て、プログラムが動かなくなってしまいましたね。

今回のような計算するプログラムではint型、またはfloat型である必要があります。

つまり、”45”と書いてしまうとstr型になるので、計算ができなくなってしまいます。

まずは5教科の合計点を変数に入れます。

それを教科数の5で割りますが、Pythonでは「÷」という記号は使わないと前回のコラムで学びましたね。

そして割り算なので小数点以下を処理する必要があります。

今回は小数点以下を全て切り捨てる書き方にしたいと思います。

score = 45 + 54 + 60 + 72 + 90
average = int(score / 5)
print(average)

averageにはどんな数字が入っているか想像した上で、このコードを一度実行してみてください。

それでは、int(score / 5) は一体どんな処理をしているのか、見ていきましょう。

まずscoreという変数の中には、321が入っています。

これを5で割ると64.2というfloat型になります。

float型をint型にキャストする、つまり少数以下を切り捨てる、という書き方です。

次の期末試験の時などに、ぜひPythonで平均点を出してみてください。

他にも前回のコラムで学んだ四捨五入の書き方に変えてみたりと、色々アレンジしてみるのも楽しいと思います。

比較演算子とbool型

それでは、今回は比較演算子について学んでいきたいと思います。

比較演算子とは、x > 8、y < 16 など数値の大きさを比べる時に使う書き方です。

プログラムではこの比較演算子は、変数と組み合わせてよく登場してきます。

Pythonの場合、等しいというのを表現する場合は「==」を使います。

変数を作る時に「=」を使って定義していましたね。それと区別するために値が等しいか比較する場合は「==」という書き方をします。

そしてこの比較演算子は、正しい(True)か正しくない(False)かを求める真偽値 (bool)型というデータ型との組み合わせでも良く使われています。

bool型とは、⚪︎か×かで判断する今まで登場してきたstr型やint型、float型とは少し違ったデータ型になります。先ほどの平均点のプログラムを使って解説すると、

学年平均が80点とした場合、

average > 80 

この式は正しい(True)か正しくない(False)か。

averageには今、64という値が入っているので80よりも小さい数ですね。

つまり、averageは80より大きい値というのは正しくないので「False」という結果になります。

これがaverage < 80 であれば「True」という結果になります。

比較演算子が「質問」だとすると、bool型(True・False)は「その質問に対する答え」というイメージです。

でも、なぜわざわざTrueとかFalseというbool型がプログラムには必要なのでしょうか?

なぜbool型が必要なのか

人間であれば「5より3の方が小さい」というのが見た瞬間に感覚でわかります。

でもコンピュータは、人間のような感覚がありません。

プログラムの世界では、「正しい」か「正しくない」かを数字や文字ではなく、“はっきりした値”として扱う必要があります。

そこで必要になるのが今回登場したbool型になります。

「True」は“スイッチON”、「False」は“スイッチOFF”のようなイメージです。

このON/OFFを使うと、プログラムの動きを切り替える事が出来るようになってきます。

簡単なゲームのプログラムを考えてみよう

トランプを使った「HIGH&LOW(ハイ&ロー)」というゲームがあります。

出たカードより次のカードが大きいか小さいかを当てるゲームで、例えば、今のカードが「7」で、次のカードが「10」だった場合、プレイヤーが「HIGH」と答えていたら正解、「LOW」と答えていたら不正解です。

出た数値が大きいか小さいか、正解か不正解か、まさに今回学んだ比較演算子とbool型の考え方です。

では、一体どう書けばHIGH&LOWゲームのプログラムを作れるのか考えていきましょう。

まずは変数を準備します。

「今のカード」「次に出たカード」、そして「プレイヤーの予想」と3つの変数を準備して、「今のカード」「次に出たカード」にはぞれぞれ1〜13のいずれかの数字を代入しておきます。

実際のHIGH&LOWゲームではドロー(引き分け)がありますが、今回は「今のカード」「次に出たカード」に異なる数値を入れて結果が「HIGH」、「LOW」どちらかになるようにしておきましょう。

ここまではどう書けば良いのか、何となくイメージできると思いますが、問題はここからです。

今回学んだ比較演算子とbool型を組み合わせて考えていきます。

例えば、「今のカード」<「次に出たカード」が「True」だった場合、「HIGH」か「LOW」かどちらが正解でしょうか?

そう、「次に出たカード」の方が数値が大きい、つまり「HIGH」が正解になります。

でもここで1つ疑問が残りました。

「プレイヤーの予想」を「HIGH」か「LOW」のどちらかを選択してもらうプログラムを作ろうとした場合、「HIGH」を選べば正解ですが、不正解の「LOW」を選ぶ可能性もありますよね。

つまりこのゲームを作るには、正解の場合と不正解の場合の2パターンの結果を用意する必要があります。

「もし〜ならば」という文法を英語の授業で習った方もいると思いますが、プログラムにもif文という「もし〜ならば」という書き方が存在します。

この書き方を使えば、HIGH&LOWゲームが作れるようになるので、次回のコラムではこのif文について学んでいきたいと思います。

ちなみにハイスクールPythonの「3. 条件分岐で判定する」ではif文の書き方が紹介されていますので、こちらを読んだ方はHIGH&LOWゲームを自力で作れるかもしれません。

次回のコラムを見る前に、自力で作れるかぜひ挑戦してみてください。

最後までお読みいただき、ありがとうございました。

それではまた次回お会いしましょう!

PAGE TOP