ほとんどのプログラミング言語は { }
で制御ブロックを表すのに対して、Python はインデントで制御している。インデント(字下げ)の幅は特に規定はないが、スペース 2 個、スペース 4 個、またはタブ 1 個がよく用いられる。スペースを用いるとき、スペースが 1 個でもズレると IndentationError エラーになるので、インデントの幅には十分に注意する必要がある。
if 文
条件構文(if 構文)は、条件に応じて処理を切り分けたい場合に利用する構文の一つである。例えば、「室温が 28 °C を超えたら冷房を付ける」、「クーポン券を使うなら 5% 割引する」などのシステムを作成する際に利用できる。このほかに、if 構文を複数用いたり、あるいは if else 構文を用いたりして、「室温が 28 °C を超えたら冷房を付け、室温が 18 °C 未満なら暖房を付け、それ以外の場合は付けない」といった複雑な条件判定を行うこともできる。
例えば、冷房を付ける関数 run_aircon
がすでに定義されているものとして、if 構文を使って、「室温が 28 °C を超えたら冷房を付ける」というシステムを作成する場合は次のように書く。
temp = 22.4
if temp > 28.0:
run_aircon()
次に、複数の条件判定を if else 構文で書く例を示す。例えば、「室温が 28 °C を超えたら冷房を付け、室温が 18 °C 未満なら暖房を付け、それ以外の場合は付けない」を if else 構文で書く場合は次のようになる。
temp = 22.4
if temp > 28.0:
run_aircon()
elif temp < 18.0:
run_heating()
else:
stop()
for 文
Python のリストやディクショナリなどは複数の要素を格納できる。このような複数の要素を持つオブジェクトの中から各要素を一つずつ取り出して何らかの処理を行いたいときに繰り返し構文を使う。Python では、繰り返し構文を実現するには for 構文あるいは while 構文を用いる。ここでは、まず for 構文の使用例を示す。
最初の例として、3 つの要素を持つリスト x
に対して、各要素に 1 を足す処理を行うサンプルコードを示す。
x = [2, 4, 6]
for i in x:
y = i + 1
print(y)
## 3
## 5
## 7
同様に考えて、for 構文を使って、リスト x
の各要素の合計を計算するサンプルコードを示す。このとき、まず合計を保存するための変数として s
を用意し、次に、リスト x
の各要素を一つずつ s
に足していく方法で計算する。
x = [2, 4, 6]
s = 0
for i in x:
s = s + i
print(s)
## 12
リストではなく、あらかじめ設定した回数(例えば 3 回など)を繰り返すこともできる。このような繰り返しを行うには、まず range(3)
などのように、0, 1, 2 を生成するイテレータ(リストのようなオブジェクト)を作る。次に、このイテレータを for 構文の繰り返し対象として与えれば、for 構文は 0, 1, 2 にたいして繰り返すので、全体で 3 回繰り返すことになる。
ここで、リスト x
の合計を求めるサンプルコードを、range
関数と for 構文の組み合わせを使って示す。
x = [2, 4, 6]
s = 0
iter = range(3)
for i in iter:
s = s + x[i]
print(s)
## 12
上のコードは説明のために示したが、以下のように書くのが一般的である。
x = [2, 4, 6]
s = 0
for i in range(len(x)):
s = s + x[i]
print(s)
## 12
リストの各要素に対して繰り返すとき、今、何番目の要素であるのか(何回目の繰り返しであるのか)の情報も必要な場合は、enumerate
関数を使って繰り返す。
x = [2, 4, 6]
for i, j in enumerate(x):
print(i, j)
## (0, 2)
## (1, 4)
## (2, 6)
for
文の後に else
を追加すると、ループを抜ける時に終了処理を行うことができる。
for i in range(0, 3):
print(i)
else:
print('last')
## 0
## 1
## 2
## last
while 文
while 構文は、判断条件が真である限り、処理を繰り返す構文である。for 構文は、繰り返し対象に対して繰り返すので、繰り返し回数の上限が決まっている。これに対して、while 構文は判定条件が真である限り繰り返すので、繰り返し上限が定数ではない。そのため、while 構文に与える判定条件を正しく制御できなかった場合に、無限ループに陥ったりする。
i = 0
while i < 3:
print(i)
i += 1
## 0
## 1
## 2
for 構文と同様に while
ブロックのあとに else
ブロックをつけると、最後の繰り返し処理が終わった後に、特定の処理を行うことができる。
i = 0
while i < 3:
print(i)
i += 1
else:
print('last')
## 0
## 1
## 2
## last