本記事ではある条件のときだけ処理を実行したいときに使う、if文についてご紹介します。
目次
if文の概要
if文の基本的な書き方
if文の基本的な書き方は次の通りです。
条件が真(True)となるときに処理が実行されます。
具体的なサンプルコードは次のとおりです。
i = 1
if i > 0:
print(i)
i = i - 1
if i > 0:
print(i)
#出力
#1
最初のif文ではiが1、つまり0より大きいのでifの中身が実行され、iの中身が出力されたのち、iが0となります。
次のif文ではiが0、つまり0より大きくないのでif文の中身は実行されません。
「条件」の部分には真(True)もしくは偽(False)になる式を書きます。
if文は条件をどのように設定するかが重要です。
Pythonでは以下のようなものがTrue、Falseになります。
真(True)
- 式が条件を満たした時
- 1
- True
- not 「Falseとなる式」
偽(False)
- 式が条件を満たさない時
- None
- 0
- 値が空の時(””、[]、{})
- False
- not 「Trueとなる式」
具体的な処理は次のコードの通りです。
このコードでは条件がすべて真となるように書いています。
i = 5
if i > 4:
print('条件:i > 4')
if True:
print('条件:True')
if not 0:
print('条件:not 0')
if not False:
print('条件:else')
#出力
# 条件:i > 4
# 条件:True
# 条件:not 0
# 条件:else
真か偽になるかは、条件が0、や空といった何もないを示す場合は偽、それ以外は真となるイメージで良いかと思います。
どうしても分からない場合は、以下のようにprint(条件式)とすることで、その条件式が真となるか偽となるかがわかります。
print(i > 4)
#出力
#True
条件式について
条件式には大きく「比較」と「論理演算」があります。
比較
比較は簡単です。
「<」や「>」をつかって条件式を書きます。
意味 | 記号 | 例 |
より大きい、より小さい | > | i > 3 |
より小さい | < | i < 1 |
以上 | >= | i >= 10 |
以下 | <= | i <= 5 |
等しい | == | i == 1 |
等しくない | != | i != 0 |
等しいを表す「==」は「=」を2個書く点に注意してください。
論理演算
次は論理演算です。
一言で言うと、論理演算とは「かつ」「または」のことです。
意味 | 記号 | 例 |
かつ | and | i > 0 and i <= 10 |
または | or | i < 5 or i >= 10 |
「かつ」と「または」では「かつ」を先に処理する点に注意してください。
例えば、i < 3 or i > 10 and i > 20と書いた場合、「i < 3 または i > 10」かつ 「i > 20」ではなく、「i < 3 」または「 i > 10 かつ i > 20」として処理されます。
i = 2のとき、「i < 3 または i > 10」かつ 「i > 20」では以下のコードはFalseとなります。
i = 2
if (i < 3 or i > 10) and i > 20: #カッコでi < 3 or i > 10を優先的に処理
print("True")
else:
print("False")
#出力
#False
しかし、以下のように「i < 3 」または「 i > 10 かつ i > 20」ではTrueとなります。
i = 2
if i < 3 or i > 10 and i > 20:
print("True")
else:
print("False")
#出力
#True
このように、処理の順番を間違えて認識していると、想定した処理と異なる処理が行われる場合があるので十分注意してください。
条件ごとの処理
最初に示した図の水色の点線内部は、if文を書く際に必須ではありませんが、より細かく条件ごとに処理をしたい場合に追記します。
具体的には次のサンプルコードの通りです。
i = 5
if i > 0 and i < 2:
print('処理1')
elif i > 2 and i < 10:
print('処理2')
else:
print('処理3')
#出力
#処理2
条件を満たしているのかの判定は上から行われます。
まず、1番上のif文の条件を満たしているかを判断し、条件を満たしていない場合は次のelifの条件、条件を満たしていない場合は次のelifの条件…といった感じで処理が進みます。
条件がどれか1つでも満たされればその中のコードが処理され、if文を抜けます。
そして条件がどれにも当てはまらず、elseが記述されている場合はelse内のコードが処理されます。
Pythonで条件式を書く際は、処理内容をifの行よりも1段下げて書く必要があります。
Pythonはコードの見た目が処理内容に影響するので十分に注意してください!
特殊な書き方
if文は1行で書くことができます。
具体的には次のように書きます。
i = 5
print('真の処理') if i > 0 and i < 2 else print('偽の処理')
#出力
# 偽の処理
また、リスト内包表記と合わせて次のように書くこともできます。
リスト内包表記については、こちらの記事で解説しているので良ければ参考にしてください!
num = [n for n in range(0, 101, 1) if n % 10 == 0]
print(num)
#出力
# [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
しかし、複雑な処理は可読性が下がる可能性があるので、使い所は注意が必要です。
ifを使った実用例
実際にifを使った例をご紹介します。
例1
まずは、その日の曜日を取得して土曜日、もしくは日曜日の場合にholiday、平日の場合はweekdaysを出力するサンプルコードをご紹介します。
import datetime
today = datetime.date.today()
if today.weekday() > 4:
print('holiday')
else:
print('weekdays')
#出力
# holiday
コードの解説
まず、datetimeモジュールを使用して、today = datetime.date.today()でその日の日にちを取得します。
取得した日にちに対して、weekday()メソッドを使用して、日付から曜日を取得します。
weekday()メソッドでは月曜日~日曜日を0~6で取得できます。
曜日を数字で取得可能なことを利用して、その日の曜日が土曜日もしくは日曜日、つまり取得した値が4より大きいことを条件としています。
この条件により,その日の曜日が土曜日、日曜日のときはholiday、月曜日~金曜日のときはweekdaysと表示されます。
例2
次にパスワード入力欄を作り、入力されたパスワードが合っているか、間違ってるかを判断するプログラムをご紹介します。
import tkinter as tk
def get_entry():
password = 'abcd'
get_text = entry.get()
if get_text == password:
label.config(text = 'OK')
else:
label.config(text = 'Password is incorrect')
root = tk.Tk()
root.title('Sample')
root.geometry('200x100')
entry = tk.Entry(root, width=20)
entry.grid(row = 1, column = 1, padx = 10, pady = 10)
button = tk.Button(root, text='Enter', command=get_entry)
button.grid(row = 1, column = 3, padx = 10, pady = 10)
label = tk.Label(root, text='')
label.grid(row = 2, column = 1, columnspan=3, padx = 10)
root.mainloop()
出力結果はこんな感じです。
if文自体は大した内容ではなく、入力欄に入力された文字列があらかじめ設定したパスワードと一致しているかを判断しているだけです。
コード全体の解説は長くなるので割愛させていただきます。
if文の使い方は基礎的ですが、if文を理解していなければ、このようなUIを作ることもできません。
ぜひマスターしてください。
おわりに
if文自体は難しくないかと思いますが、条件の設定の仕方や処理内容をどうするかが悩むところかと思います。
ぜひ、いろいろ試してマスターしていただければと思います。
もっと詳しく書いてほしいところ、分かりづらかったところがあれば教えて下さい!
最後まで読んでいただきありがとうございました。
コメントを残す