リファクタリングをPythonで実践!基本手法とコード例・注意点まで
- 1.そもそもif文とは
- 2.Pythonのif文の基本的な書き方
- 3.比較演算子を使ったif文
- 4.リストなどのオブジェクトを使ったif文
- 5.論理演算子を使ったif文
- 6.isとは
- 7.if文の応用例
1.そもそもif文とは
ifは直訳すると「もしも」です。Pythonのif文は制御構文と呼ばれる構文で、「もし~だったらこの処理をする」という制御のために使います。
データや入力された値の種類などによって処理を分けることはプログラミングでは必須で、Pythonのプログラミングでも頻繁に登場します。if文はプログラミングの基本です。
2.Pythonのif文の基本的な書き方
Pythonのif文は、以下のように書きます。
if a == 0:
b = 1
このコードは、「もしaが0に等しければbを1にせよ」という意味です。ifの後には条件を書き、行末を「:」で終わらせます。そしてその条件に当てはまったときに実行したい文をインデントして記述します。
条件に当てはまったときの文は何行書いても構いません。また、if文でインデントされている中に、更にif文を書くこともできます。
①if elseの形
「もし条件に当てはまらなかったら」という記述もできます。それがelseです。
if a == 0:
b = 1
else:
b = 0
このコードは、
「aが0ならbを1にせよ。aが0でないならbを0にせよ」
という意味です。
ifに対応するelseは、ifと同じインデントから書き始めます。こうすることで、複数のif文がネストした状態でもそれぞれのifに対応するelseを書くことができます。
また、elseも「:」で終わらせます。elseのとき実行する文も字下げします。
②if elif elseの形
elifというのは、「今までの条件には当てはまらないが、この条件には当てはまるなら」という記述です。
if a == 0:
b = 1
elif a == 1:
b = 0
else:
b = -1
このように記述します。
「aが0ならbを1にせよ。1ならbを0にせよ。どちらでもなければ、bを-1にせよ」という意味です。
elseは書かなくても構いません。
③elifが複数の形
elifは複数つなげることができます。
たとえば
if a == 0:
b = 1
elif a == 1:
b = 0
elif a == 2:
b = 10
else:
b = -1
といった具合です。
3.比較演算子を使ったif文
比較演算子とは値を比較するものです。Pythonの比較演算子には次のようなものがあります。
==:左辺と右辺が等しい
!=:左辺と右辺が等しくない
<:左辺が右辺よりより小さい
<=:左辺が右辺以下
>:左辺が右辺より大きい
>=:左辺が右辺以上
例えば次のように書きます。
if a < 0:
print('aがマイナスです')
elif a > 0:
print('aが0以上のプラスです')
else:
print('aが0です')
4.リストなどのオブジェクトを使ったif文
リストなどを右辺に持ってくる比較には、次のような演算子があります。
in:左辺の要素が右辺にある
not in:左辺の要素が右辺にない
ちょっと難しいのでサンプルを示します。
array = [1,2,3]
if 1 in array:
print('1がarrayのなかにあります')
if 0 not in array:
print('0はarrayのなかにはありません')
このコードを実行すると、以下の出力結果が得られます。
1がarrayのなかにあります
0はarrayのなかにはありません
リストなどの要素を一つひとつ取り出して比較しなくても、まとめて判定できるのです。このinはときどき使います。便利な演算子です。
5.論理演算子を使ったif文
論理演算子とは耳慣れない言葉かもしれませんが、次の3種類のことです。
and:かつ
or:または
not:ではない
①and
例えば、
if a > 0 and a < 100:
b = 1
と書くと、「aが0以上でかつ100以下ならばbを1にせよ」という意味になります。
②or
例えば、
if a <=0 or a >= 100:
b = 2
と書くと、「aが0以下か100以上ならばbを2にせよ」という意味になります。
③not
notは否定です。
not X
と書くと
XがTrueならFalse
XがFalseならTrue
になります。
if not flag:
input('値を入力してください:')
と書けば、input文はFlagがFalseの時だけ実行されます。
6. isとは
isは、「左辺が右辺だったら」という意味です。例えば、
if a is None:
flag = False
とか、
if a is True:
flag = True
などのように使います。isを使うと==よりも直感的に理解できるので、とくにNoneかどうかを判定するときなどによく使います。
Pythonでは、データを取得したときにそのデータがNoneになっていて処理できないのをエラーとして弾く、という処理はよく使われるので、覚えておきましょう。
7.if文の応用例
①複数条件によるif文
if文の条件は1つだけではなく、複数つけることができます。andやorでつなぎますが、3つ以上の条件になるときは、一目で条件の内容が分かるように「()」を使います。その際は「()」内から先に判定されます。
例えば、
if a == 0 or (a==1 and b==1):
flag = True
というif文の条件は
「aが1かつbが1、又は、aが0」
という意味になります。
②複数のif文
if文の中にif文を使えると説明しました。どういうことなのか例を示します。
if a == 0:
if b == 0:
print('aもbも0です')
else:
print('aは0ですがbは0ではありません')
else:
print('aは0ではありません。bは分かりません')
このように書きます。このコードで、elseのインデントの位置には注意するようにしてください。インデントの位置で対応するif文が判定されます。インデントの位置を間違うとまるで違った処理結果になります。
if文の中に文がたくさんあってブロックが長いとき、このelseのインデントの位置は特に注意しなくてはなりません。他の言語ならば「{}」でブロックを囲みますが、Pythonはインデントが全てです。
③実際のシステムのコード例
では、実際のシステムのコードでは、どのようにifを使うのでしょうか。筆者がリファクタリング(コードの改良)をした、とあるシステムの例を示します。こんな感じで書くんだな、という参考程度に見てください。
if self.mass_continued_num[0] > 0:
self.imuki = 1
self.roll("red", "yellow", "yellow", "yellow")
elif self.mass_continued_num[1] > 0:
self.imuki = 2
self.roll("yellow", "red", "yellow", "yellow")
elif self.mass_continued_num[2] > 0:
self.imuki = 3
self.roll("yellow", "yellow", "red", "yellow")
elif self.mass_continued_num[3] > 0:
self.imuki = 4
self.roll("yellow", "yellow", "yellow", "red")
else:
self.item_ini()
インデントも実際のコードのまま転記しました。これだけインデントされているということは、処理が入り組んでいるということです。if文はこのように大活躍します。