python入門講座 | 変数を比較してみよう(比較演算子の使い方)[第18回]

アラサーOLのためのpython入門講座
比較演算子は条件分岐処理で必ず使います。マスターしましょう!

Ciao!みなさんこんにちは!このブログでは主に
(1)pythonデータ解析,
(2)DTM音楽作成,
(3)お料理,
(4)博士転職
の4つのトピックについて発信しています。

今回は「アラサーOLのためのpython入門講座」です!この講座では、プログラミング初心者アラサーOLのMi坊さんに、pythonを学習する上でのアドバイスを行います!「パソコンもプログラミングも初心者だけど、プログラミングができるようになりたい!」という方のためにstep-by-stepで解説していきます。

今日は比較演算子について解説します!場合分けが必要な処理をする際に、if文と組み合わせて使う演算子です。Pythonの比較演算子には等価(==)、非等価(!=)、大なり(>)、小なり(<)などがあります。Pythonプログラミングで頻出の処理なのでマスターしましょう!
ぜひ最後までお付き合いください!

Kaiko
Kaiko

この記事はこんな人におすすめ

  • 初心者だけどpythonを始めた!
  • pythonの基本的な使い方を知りたい!
  • 独学で学んだpythonの知識を整理したい!

Abstract | 条件分岐処理に必要な比較演算子

プログラミングでは条件に応じて計算やデータ処理方法を変える条件分岐処理がよく行われます。条件分岐処理に必要なのが比較演算子とif文です。今回は比較演算子を扱います。比較演算子は演算子の左右の値や変数を比較し、bool型と呼ばれるTrue or Falseの2値のいずれかを出力します。実際のプログラミングでは比較演算子とif文を組み合わせ、比較演算子の出力値がTrueかFalseかに応じて条件分岐処理を行います。まずは比較演算子にどのようなものがあるのか、どのように使うのかをマスターしましょう!



Background | 比較演算子とbool型

比較演算子とは、2つの値の関係性を判定するものです。比較演算子にはいくつかの種類があります。今回の記事ではそれぞれの演算子の使い方を説明します。実際に手を動かしながら習得しましょう!

比較演算子の種類

比較演算子には以下の種類があります。

# 演算子意味
1==等価: 左辺と右辺が等しい
2!=非等価: 左辺と右辺が異なる
3>大なり: 左辺が右辺より大きい
4<小なり: 左辺が右辺より小さい
5>=以上: 左辺が右辺以上
6<=以下: 左辺が右辺以下
7isメモリアドレスの等価: 左辺と右辺が同じメモリアドレス
8is notメモリアドレスの非等価: 左辺と右辺が同じメモリアドレス
表1. 比較演算子の種類

#1から6までは値同士を比較する演算子です。#7, 8は演算子と呼んでいいのか微妙なところですが、変数のメモリアドレス(オブジェクト)が等価であるか非等価であるかを判別するものです。メモリアドレスについては過去記事「python入門講座 | 変数を使いこなそう2(変数の更新方法 — increment/decrementなど)」を御覧ください。is演算子は特にNoneとの比較に使います。こちらは発展的な内容ですが、後ほど扱います。

比較演算子の返り値 | True/False (bool型)

比較演算子は返り値(出力)として、「True」または「False」のいずれかの値を返します。これらの値はbool型と呼ばれる値です。数字で表現することもできて、Trueは1、Falseは0となります。多くの場合、比較演算子はif文との組み合わせで用いられます。比較演算子が返した値が1か0かで条件分岐するという処理をします。以下で詳しく見ていきましょう!



Method | 比較演算子の使い方

比較演算子の使い方を説明します。実際に手を動かしながら学んでいきましょう!Jupyter Notebookを立ち上げてコーディングしながら読み進めてください。

準備 | python notebookの新規作成

まずはpython notebookを用意しましょう。いつものpython_practiceのディレクトリに「practice_comp_operator」という名前のpython notebookを作成してください。ターミナルを立ち上げて~/python_practiceに移動、jupyter notebookを起動し、ブラウザから新規→Python3でpython notebookを開いて、ファイル→リネームでファイル名を決定します。
もしやり方がわからなければ、前回記事「python入門講座 | 変数を使いこなそう1(変数の定義方法と基本ルール)」や過去記事「python入門講座|pythonを使ってみよう2(Jupyter Notebookを使う方法)」で詳しく解説しているので、これらを見ながらやってみてください。

python notebookを起動したら、適宜Markdownセルに説明書きを加えながら下記の説明に沿ってコードを書いて実行していきましょう。Markdownセルやコードセルなどの用語やこれらの使い方は過去記事「python入門講座|pythonを使ってみよう2(Jupyter Notebookを使う方法)」を参照してください。練習問題の後にpython notebookの例を掲載します。もし書き方がわからなければそちらを見てください。



等価の比較演算子「==」

まずは等価の比較演算子です。等価の比較演算子「==」の左右の値や変数の中身を比較します。「=」一つではなく、「=」を2つ重ねて「==」とすることに注意しましょう。プログラミングの世界では「=」は代入の演算子となってしまうので注意してください。

等価の比較演算子を使ってみましょう。以下を実行して文字列を比較してみましょう。

# comparison of two values
print('a--a:', 'a' == 'a')
print('a--b:', 'a' == 'b')

結果は

a--a: True
a--b: False

と表示されます。1つ目は同一の文字列’a’を比較しています。演算子「==」は等価だと「True」が返ってくるので、1つ目は「True」となります。2つ目は’a’と’b’という異なる演算子を比較しているので「False」となります。

変数も比較してみましょう。以下を実行してみてください。

# define two variables
var1 = 1 + 2
var2 = 4

# comparison
print(var1 == var2)

var1は3、var2は4で値が異なるので結果はFalseとなります。以下を実行した場合にはどちらの変数も3なのでTrueとなります。

# define two variables
var1 = 1 + 2
var2 = 3

# comparison
print(var1 == var2)

発展編 | if文と組み合わせた使い方

発展的な内容ですが、実戦ぽくif文と組み合わせて使ってみましょう。比較演算子はif文と組み合わせて条件分岐の処理を行うときによく使われます。以下を実行してみてください。

# define a list
var_list = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ]

# define target alphabet
tar_var = 'd'

# loop
for t in var_list:
    if(t == tar_var):
        print('target:', tar_var)
        print('current:', t)

2行目ではvar_listというリスト型変数に’a’から’g’までの文字列を一つづつ格納しています。次にtar_varという変数に、目的の値’d’を定義しています。最後にfor文でvar_listの中身を一つずつ調べています。tという仮の変数にvar_listの中身が一つずつ格納されます。if文を使って、tの中身が目的の値’d’であったらprint()で出力するという処理を行っています。このように、比較演算子はif文と組み合わせて条件分岐の処理を行うときによく使われます。



比較演算子の結果を数値にしてみよう

比較演算子の結果はbool型と呼ばれるTrue/Falseの2値のいずれかの値となります。これらの値は数値として扱うこともできます。Trueは1、Falseは0です。

int型にキャスト(型変換)してみよう

比較演算子の結果をint型に変換してみましょう。以下を実行してみましょう。

# define two variables
result_1 = 1 == 1 # True
result_2 = 1 == 2 # False

# cast the result to int
print('True:', int(result_1))
print('False:', int(result_2))

result_1には「1 == 1」の結果すなわち「True」が、result_2には「1 == 2」の結果すなわち「False」が格納されます。これらをint型に変換すると、それぞれ「1」と「0」となります。

数値と比較してみよう

比較演算子の結果を数値と比較してみましょう。以下を実行してみましょう。

# define two variables
result_1 = 1 == 1 # True

# comparison to int
print(result_1 == 1) # True
print(result_1 == 0) # False

result_1には「True」が格納されています。これを「==」演算子で1と0と比較します。「True」は「1」と同値なので、1つ目のprint()の結果はTrue、2つ目はFalseとなります。



非等価の比較演算子 「!=」

次に非等価の比較演算子「!=」です。「!=」で左辺と右辺が等しくないという意味になります。実際にコーディングしてみましょう。以下を実行してみてください。

# comparison of two values
print('a--a:', 'a' != 'a') # False
print('a--b:', 'a' != 'b') # True

今回は「等しくない」ことを確かめています。左辺と右辺が等しくない場合に「True」、等しい場合に「False」を返します。1つ目のprint文では等しい値’a’を比較しているので「False」、2つめでは異なる値’a’と’b’を比較しているので「True」となります。

変数の場合もやってみましょう。今度はfloat型変数にしてみましょう。以下を実行してみてください。

# define two variables
var1 = 1.5 + 2.3
var2 = 4.2

# comparison
print(var1 != var2) # True

var1は3.8、var2は4.2と異なる値なので、この結果はTrueとなります。



不等号の比較演算子「>, <, >=, <=」

不等号を表す演算子です。「>」と「<」は数学の不等号と同様、左辺が右辺より大きい、あるいは小さいことを意味する演算子です。「以上」、「以下」を表す場合は、不等号の右側に「=」を付けて「>=」や「<=」とします。以下でいくつか例を取り上げてみます。

「>」: greater than (gt)

まずは「より大きい」という意味の「>」です。英語だと「greater than」、略すと「gt」です。以下を実行してみましょう。

# define two variables
var1 = 2.7
var2 = 4.2

# comparison
print(var1 > var2) # False

これは「2.7が4.2より大きいか?」を確かめており、大きくないのでFalseとなります。以下を実行するとTrueとなります。

# define two variables
var1 = 12.7
var2 = 4.2

# comparison
print(var1 > var2) # True

「<」: less than (lt)

次に「より小さい」という意味の「<」です。英語では「less than」もしくは「lt」です。以下を実行してみましょう。

# define two variables
var1 = 2.7
var2 = 4.2

# comparison
print(var1 < var2) # True

2.7は4.2より小さいのでTrueとなります。

「>=」: greater than or equal to (ge)

以上は「>=」です。英語では「greater than or equal to」もしくは「ge」です。以下を実行してみましょう。

# define two variables
var1 = 3.141592

# comparison
print(var1+0.1 >= var1) # True
print(var1+0.0 >= var1) # True
print(var1-0.1 >= var1) # False

上2つはTrue、最後はFalseとなります。

「<=」: less than or equal to (le)

以下は「<=」です。英語では「less than or equal to」もしくは「le」です。以下を実行してみましょう。

# define two variables
var1 = 3.141592

# comparison
print(var1+0.1 <= var1) # False
print(var1+0.0 <= var1) # True
print(var1-0.1 <= var1) # True

最初はFalse、下2つはTrueとなります。



発展編 | メモリアドレス(オブジェクト)の比較「is」「is not」

やや発展的な内容ですが、メモリアドレス(オブジェクト)の比較もやってみましょう。メモリアドレスとオブジェクトについてはここでは詳しく触れません。簡単に説明すると、Pythonでは、定義された変数や値はパソコンのメモリのどこかに記録されます。その位置をメモリアドレスと呼びます。また、そのメモリ上に確保されたデータをオブジェクトと呼びます。メモリアドレスについては過去記事「python入門講座 | 変数を使いこなそう2(変数の更新方法 — increment/decrementなど)」を御覧ください。

メモリアドレスの比較は変数と「None」を比較するときに使います。「None」とは空のオブジェクトを示す表現です。例えば変数aを仮に作っておくけれども値は定義しないという場合に変数aにNoneを格納しておきます。簡単なプログラミングをしている限りでは使う機会はあまりないですが、関数のoptional引数で使うことがよくあります。ここではごく簡単な例を取り上げます。

メモリアドレスが同値であることを確認するには「is」を使い、非同値であることを確認する場合には「is not」を使います。実際のプログラミングの場面では、変数がNoneであるかどうかを確認するときに使います。以下を実行してみましょう。

# define a variable with None
var1 = None
# check its type and content
print('type:', type(var1)) # <class 'NoneType'>
print('var1:', var1) # None

# get another None variable
var2 = None
# check memory adress of var1 and var2
print(id(var1))
print(id(var2))

# check if it's None
print(var1 is None) # True

# check if its not None
print(var1 is not None) # False

var1にNoneを格納しました。type()で型を確認すると「NoneType」という型になります。この型の変数には同じメモリアドレスが割り振られます。var2にもNoneを確認し、id()でメモリアドレスを確認するとvar1もvar2も同じメモリアドレスであることがわかります。最後に「is」と「is not」を使って「None」との比較をしています。1つ目はTrue、2つ目はFalseとなります。



Result | 練習問題

最後に練習問題をやってみましょう!以下の処理をするコードを書いてみてください。

  1. 変数var1に3.14を代入してください
  2. 変数var2に2を代入してください
  3. var1とvar2を演算子==、!=、>, <, >=, <=で比較し、結果を出力してください

練習問題の回答例

できたら回答例を確認しましょう!下の画面をスクロールすると回答例が見られます!
今回の記事で出てきた他のコードも載っているので参考にしてください!

練習問題おつかれさまでした!
今日はここまでです。Python Notebookを終了しておきましょう。もしPython Notebookを終了方法がわからなければ過去記事「python入門講座|pythonを使ってみよう2(Jupyter Notebookを使う方法)」の「Python Notebookの起動・終了方法」の章を参照してください!



Conclusion | まとめ

最後までご覧いただきありがとうございます!
比較演算子の使い方を紹介しました!

比較演算子はif文を使った条件分岐処理で必ず使うものです。Pythonを使ったデータ処理、データ分析で頻出の演算子なので使い方をマスターしましょう!

以上「python入門講座 | 変数を比較してみよう(比較演算子の使い方)」でした!
またお会いしましょう!Ciao!



References | 参考

参考教科書

以下の教科書を参考にして進めています!より詳しく学びたい方は購入して読んでみてください!

コメント

タイトルとURLをコピーしました