制御文
インデントとブロック
Python ではインデント(半角スペース、またはタブによる字下げ)が非常に重要で意味をもっています。
行頭に同じ数の半角スペース、またはタブがある行が同じブロックとして判断されます。
Python ではインデントは半角スペース4つを使用することが推奨されていて、
Python3 からタブとスペースを混在してインデントすることができなくなっています。
if文
プログラムらしい制御の代表が、条件分岐のための if 文ではないでしょうか。
code:py
if 条件式:
条件が成り立つ時に実行する処理
if 文では if に続けて複数の elif を使うことができ、 else 部を付けることもできます。
キーワード elif は else ifを短く省略したものです。
if 文での条件式や else の末尾がコロン(:) が必要になります。
code: sample_if.py
# 何度か x に代入する数値を変えて実行してみてください
x = 1
if x < 0:
x = 0
print('Negative changed to zero')
elif x == 0:
print('Zero')
elif x == 1:
print('Single')
else:
print('More')
次のように複数の制御文を書くこともできます。
code: sample_multi_condition.py
x, y, z = 0, 1, 0
if x == 1 or y == 1 or z == 1:
print('passed')
if 1 in (x, y, z):
print('passed')
if x or y or z:
print('passed')
if any((x, y, z)):
print('passed')
for文
Python の for 文は、与えたシーケンス型 (リスト、タプル、レンジまたは文字列)のオブジェクトを使って反復処理をします。
code:python
for リストの要素が入る変数 in リスト:
リストの要素を使った処理
反復の順番はシーケンス中に要素が現れる順番です
for文の末尾にコロン(:) が必要です。
code: for_sample1.py
for w in words:
print(w, len(w))
code: for_samplpe2.py
for num in range(1,10):
print(num)
インデックスと要素を同時に取得することができます。
code: for_sample3.py
for i, v in enumerate(numbers):
print(i, v)
次のようにループ中で変数を使用していないような場合は、次のようにアンダースコア(_)が使用されます。
code: python
for _ in range(10):
print('Hello World!')
while文
for文がシーケンスにしたがって反復処理をするのに対して、while文は条件式が成立している間、反復処理をします。
for で書かれた for_sample2.py を while 文で書き直すと次のようになります。
code: while_sample.py
num = 1
while num < 10:
print(num)
num += 1
break文とcontinue文
for文とwhile 文で記述したループ処理の中で、中断したり(beark文), 次のループに移行(continue文)したりできます。
code: sample_break_continue.py
for i in range(1, 10):
if i < 5:
continue
elif i > 8:
break
print(i)
while と break を使って特定の条件になるまで無限に処理を繰り返すことはよくあります。
code:python
while True:
if 終了条件A:
終了処理A
break
elif 終了条件B:
終了処理B
break
処理
ループでのelse節
for 文と while 文は else 節を持つことができます。
else 節は次の場合に実行されます。
for 文で反復処理対象のシーケンスを使い切ってループが終了したとき
while文で 条件が偽になったとき。
ただしbreak 文でループが終了したときには else 節は実行されません。
code: for_else_sample.py
print("# 1つめのループ")
for i in range(1, 10):
print(i)
else:
print("ループ終了")
print("!")
print("# 2つめのループ")
for i in range(1, 10):
print(i)
if i==5:
break
else:
print("ループ終了。このprint文は実行されない。")
pass文
Pythonが構文として何か文を書く必要があるときで、
何も処理をする必要がないときなどにpass文を使います。
code: pass_sample.py
x = 1
if x < 0:
pass
elif x == 0:
print('Zero')
elif x == 1:
print('Single')
else:
print('More')
del文
指定したオブジェクトを削除します。
code: python
>> list_data
>> del list_data
>> list_data
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'list_data' is not defined
この例では、リストオブジェクト list_dataを削除しているため、
再度呼び出してもnot defined になっています。
次の例は削除する対象がリストオブジェクトの要素です。
code: python
>> list_data
[]
スライス指定ですべての要素が削除されましたが、リストオブジェクトlist_data が削除されたわけではありません。
実践ドリル