はじめに
ここでは、Python初心者向けに「制御文」について解説していきます。
Python3系の使用を想定しています。
条件分岐
条件によって処理を分けたい場合に使います。
if文
if
に続く条件式がTrue
なら、処理が実行されます。
if 条件式:
と書いた次の行は、半角スペース4つ分インデントして書き始めます。
x = 2
y = 2
if x == y:
print('xとyは等しい。')
この例では、x == y
はTrue
となるので、xとyは等しい。
と出力されます。
また、else
を入れると、if
に続く条件式の判定がTrue
でなかった場合の処理を記述できます。
x = 2
y = 3
if x == y:
print('xとyは等しい。')
else:
print('xとyは等しくない。')
さらに、elif
を入れると、それより上の条件式の判定が全てFalse
で、elif
に続く条件式がTrue
だったときの処理を記述できます(elif
はelse if
の略です)。
x = 2
y = 3
if x == y:
print('xとyは等しい。')
elif x == 2:
print('xとyは等しくないが、xは2である。')
else:
print('xとyは等しくなく、xは2ではない。')
if x == 2 and x != y: # 条件式にandを使うこともできる。
print('xは2であり、xとyは等しくない。')
elif x == y or y == 4: # 条件式にorを使うこともできる。
print('xとyは等しい、またはyは4である。')
else:
print('それ以外。')
if x == 2:
if y == 3: # 入れ子にすることもできるが、この例の場合は可読性が下がるので、非推奨。
print('xは2であり、yは3である。')
elif x == y:
print('xとyは2である。')
else:
print('xは2であり、yは2でも3でもない。')
elif x == 3:
print('xは3である。')
else:
print('xは2でも3でもない。')
ちなみに、Pythonにはswitch文はありません。
反復処理
同じ処理を複数回繰り返す時に使います。
for文
一定回数だけ同じ処理を繰り返す時に使います。
for 変数 in イテラブル:
と書いた次の行は、半角スペース4つ分インデントして書き始めます。
nums = [1, 2, 3, 4, 5]
for num in nums:
print(num)
for i, num in enumerate(nums):
print(i, num)
for i in range(len(nums)): # あまり使われない。
print(nums[i])
dict_human = {'身長': 200, '体重': 100, 'BMI': 25}
for key in dict_human.keys(): # 辞書のキーを取り出す。
print(key)
for value in dict_human.values(): # 辞書の値を取り出す。
print(value)
for key, value in dict_human.items(): # 辞書とキーの値の組み合わせを取り出す。
print(key, value)
for _ in range(10): # forの後の変数を処理の記述で使わない(実行回数のみ指定したい)場合は、'_'でも可。
print('実行しました。')
break
を使うと、反復処理を中止することができます。if
と組み合わせて、特定の条件が成立した時に処理を中止するといったときに使うことが多いです。
nums = [1, 2, 3, 4, 5]
for num in nums:
if num == 3:
break # numが3になった時点で処理は中止する(2までしか出力されない)。
print(num)
continue
を使うと、反復処理をスキップすることができます。こちらもif
と組み合わせて使うことが多いです。
nums = [1, 2, 3, 4, 5]
for num in nums:
if num == 3:
continue # numが3のときだけ出力処理をしない(3以外が出力される)。
print(num)
else
を使うと、for分の処理が最後まで中断せずに行われた時の処理を記述することができます。
nums = [1, 2, 3, 4, 5]
for num in nums:
print(num)
else:
print('反復処理が最後まで終わりました。')
上のスクリプトは以下のように書いても同じです。
nums = [1, 2, 3, 4, 5]
for num in nums:
print(num)
print('反復処理が最後まで終わりました。')
for
文のelse
は意味ないんじゃないか、と思われるかもしれませんが、確かに上のスクリプトのような使い方ではあまり意味はありません。
ではどういう時にelse
が使えるかというと、break
と組み合わせた時です。
break
で処理が中断されずに最後までfor
文の処理が行われた時の処理を記述することができます。
nums = [1, 2, 3, 4, 5]
for num in nums:
if num == 3:
break
print(num)
else:
print('反復処理が最後まで終わりました。') # 出力されない。
for num in nums:
if num == 10:
break
print(num)
else:
print('処理が最後まで終わりました。') # 出力される。
上のスクリプトは、以下のようにフラグを使って書き換えることもできますが、else
を使った方がシンプルになります。
nums = [1, 2, 3, 4, 5]
break_flg = False # 反復処理が中断したかどうかを示すフラグを設定。
for num in nums:
if num == 3:
break_flg = True
break
print(num)
if break_flg == False:
print('反復処理が最後まで終わりました。')
break_flg = False
for num in nums:
if num == 10:
break_flg = True
break
print(num)
if break_flg == False:
print('反復処理が最後まで終わりました。')
continue
でスキップした場合は、最後まで処理が行われたとみなされるので、else
節が実行されます。
nums = [1, 2, 3, 4, 5]
for num in nums:
if num == 3:
continue
print(num)
else:
print('反復処理が最後まで終わりました。')
for num in nums:
if num == 5:
continue
print(num)
else:
print('反復処理が最後まで終わりました。')
while文
ある条件が成立する間のみ反復処理をする場合に使います。
while 条件式:
と書いた次の行は、半角スペース4つ分インデントして書き始めます。
num = 1
while num < 5:
print(num)
num += 1
num = 1
while num < 5:
num += 1
print(num)
while
の中も上から下へ順番に処理が実行されるため、書き方によって実行結果が変わる場合があります。
変数の値の更新を書き忘れると、処理が無限回数繰り返される(無限ループとなる)ので注意が必要です。
num = 1
# while num < 5:
# print(num)
# while True:
# print(num)
反復回数が決まっている場合はfor
を、反復回数が決まっていない場合はwhile
を使うようにすると良いです。
まとめ
ここでは、Pythonの制御文として、条件分岐の「if」、反復処理の「for」および「while」を紹介しました。
プログラミングの中心とも言える構文なので、実際に使いながら身につけていくと良いでしょう。