こんにちは。
最近はPythonを学習しています。
Pythonを動かしている環境については簡単に言うと以下です。
- Windows 10 64bit
- python 3.9.4
- PyCharm Community Edition 2021.1 x64
より詳細は以下の記事に記載してあります。
今回はPythonによるプログラミングについて、if文(if, elif, else)の基本的な使い方を試してみました。この記事は学習内容の備忘録です。
if文
例えば、「点数が80点以上ならば、Passという文字を出力する」という処理は条件分岐の処理です。Pythonでは次のようにif文で実装することができます。
ソース
score = int(input('score: '))
if score >= 80:
print('Pass')
print('End')
一行目の組み込み関数input()ではコンソールから値を入力を待つ関数です。以下は、80を入力した場合、79を入力した場合の結果です。
80を入力した結果
score: 80
Pass
End
79を入力した結果
score: 79
End
上記では80を入力した場合、文言Passが出力されています。79を入力した場合、出力されていません。上記のように、if文によって値を判定して処理を分岐することが出来ます。
if文の基本的な構文は以下です。
ソース
if [条件式]:
[実行させたい処理1]
[実行させたい処理2]
[実行させたい処理3]
.
.
.
条件式がTrueのときに実行させたい処理は、ひとつインデントさせます。上記のインデントさせた一連の文は、Python 3.9.4 ドキュメントでは、スイート (suite)と呼ばれます。
条件式では比較演算子が使われることが多いと思います。以前の記事「比較演算子を学習した」に学習した内容の備忘録を載せてます。
ブール演算
2つのスコアを入力させるとします。2つのスコアが両方80点以上であるか判定したい場合、論理演算子を使うことができます。
以下のサンプルプログラムでは、2つのスコアが両方80点以上の場合に、Passを出力します。
ソース
score1 = int(input('score1: '))
score2 = int(input('score2: '))
if score1 >= 80 and score2 >= 80:
print('Pass')
print('End')
結果
score1: 80
score2: 80
Pass
End
結果
score1: 80
score2: 79
End
2つの条件A、Bの論理演算について、つぎの演算子を使うことが出来ます。
式 | 結果 |
---|---|
A and B | AとB両方Trueの場合、True。それ以外はFalse。 |
A or B | AとB少なくとも一方がTrueの場合、True。それ以外はFalse。 |
以下のサンプルプログラムでは、実際にAとBにTrue/Falseを設定して、andとorの結果を出力してみました。
ソース
print('{:>10}, {:>10}, {:>10}, {:>10}'
.format('A', 'B', 'A and B', 'A or B'))
A = True
B = True
print('{:>10}, {:>10}, {:>10}, {:>10}'
.format(str(A), str(B), str(A and B), str(A or B)))
A = True
B = False
print('{:>10}, {:>10}, {:>10}, {:>10}'
.format(str(A), str(B), str(A and B), str(A or B)))
A = False
B = True
print('{:>10}, {:>10}, {:>10}, {:>10}'
.format(str(A), str(B), str(A and B), str(A or B)))
A = False
B = False
print('{:>10}, {:>10}, {:>10}, {:>10}'
.format(str(A), str(B), str(A and B), str(A or B)))
結果
A, B, A and B, A or B
True, True, True, True
True, False, False, True
False, True, False, True
False, False, False, False
なお、上記サンプルプログラムでは組み込み関数str()を使っています。この関数を使わない場合、True/Falseの代わりに1/0が出力されました。
ソース
print('{:>10}, {:>10}, {:>10}, {:>10}'
.format('A', 'B', 'A and B', 'A or B'))
A = True
B = False
print('{:>10}, {:>10}, {:>10}, {:>10}'
.format(A, B, A and B, A or B))
結果
A, B, A and B, A or B
1, 0, 0, 1
条件Aの否定を取得したい場合は、以下の演算子notがあります。
式 | 結果 |
---|---|
not A | AがTrueの場合、False。それ以外はTrue。 |
以下のサンプルプログラムではnot Aの結果を出力しています。
ソース
print('{:>10}, {:>10}'
.format('A', 'not A'))
A = True
print('{:>10}, {:>10}'
.format(str(A), str(not A)))
A = False
print('{:>10}, {:>10}'
.format(str(A), str(not A)))
結果
A, not A
True, False
False, True
else
入力した点数scoreに応じて、以下のようにある条件を満たす場合/それ以外の場合で出力を分けるとします。
- scoreが80以上の場合、「Pass」を出力。
- それ以外の場合、「Failure」を出力。
このような分岐処理を実装したい場合、次のようにelseを使います。
ソース
score = int(input('score: '))
if score >= 80:
print('Pass')
else:
print('Failure')
print('End')
80を入力した結果
score: 80
Pass
End
79を入力した結果
score: 79
Failure
End
上記のように、指定した条件「変数scoreの値が80以上」がTrueの場合、ifの次の行のスイートが実行されます。それ以外の場合(指定した条件がFalseの場合)、elseの次の行のスイートが実行されます。
pass文
「ある条件を満足する場合は何もしない」という分岐処理があるとします。
例えば、以下の処理があるとします。
- scoreが80以上の場合、何もしない。
- それ以外の場合、「Work harder.」を出力。
このような場合は、以下のようにpass文を使います。
ソース
score = int(input('score: '))
if score >= 80:
pass
else:
print('Work harder.')
print('End')
80を入力した結果
score: 80
End
79を入力した結果
score: 79
Work harder.
End
言語によっては空行にすれば良い場合もありますが、Pythonではpass文が必要です。pass文を書かない場合、Pycharmではelseの先頭に赤線が引かれました。

ファイルを実行すると以下のようにエラーが出力されました。
pass文がない場合の結果
File "C:\Users\[user name]\PycharmProjects\pythonProject0001\0005\test0041.py", line 5
else:
^
IndentationError: expected an indented block
elif
以下のように、条件1を満たす場合の処理、条件2を満たす場合の処理が指定されていたとします。
- scoreが80以上の場合、「A」を出力。
- scoreが75以上の場合、「B」を出力。
- scoreが50以上の場合、「C」を出力。
このような場合は以下のように、elifを使います。
ソース
score = int(input('score: '))
if score >= 80:
print('A')
elif score >= 75:
print('B')
elif score >= 50:
print('C')
print('End')
80を入力した結果
score: 80
A
End
70を入力した結果
score: 75
B
End
50を入力した結果
score: 50
C
End
上記のように、elifを使うことで条件分岐を追加することができます。
今度は、以下のような、最後に「それ以外」という条件があったとします。
- scoreが80以上の場合、「A」を出力。
- scoreが75以上の場合、「B」を出力。
- scoreが50以上の場合、「C」を出力。
- それ以外の場合、「D」を出力。
このような場合は以下のように、最後にelseを使います。
ソース
score = int(input('score: '))
if score >= 80:
print('A')
elif score >= 75:
print('B')
elif score >= 50:
print('C')
else:
print('D')
49を入力した結果
score: 49
D
End
上記のように、elifは複数使うことが出來、必要なら最後にelseを使うことができます。
入れ子
以下のように、点数が80以上の時にAを出力し、さらに点数が90以上の場合、「Good work.」を出力するという処理があったとします。
- scoreが80以上の場合、「A」を出力。
- scoreが90以上の場合、「Good Work.」を出力。
- scoreが75以上の場合、「B」を出力。
- scoreが50以上の場合、「C」を出力。
- それ以外の場合、「D」を出力。
上記のような条件分岐が入れ子になっている場合、以下のようにインデントを使うことで実装することができます。
ソース
score = int(input('score: '))
if score >= 80:
print('A')
if score >= 90:
print('Good work.')
elif score >= 75:
print('B')
elif score >= 50:
print('C')
else:
print('D')
print('End')
90を入力した結果
score: 90
A
Good work.
End
89を入力した結果
score: 89
A
End
上記のサンプルプログラムでは、最初のif文では、スイートに第2のif文が記述されています。その第2のif文に対応するスイートを記述するには、インデントをひとつ増やします。
以上、参考になれば幸いです。