【Python入門】for文を使った繰り返し文の書き方

※こちらの記事は、プロスタ編集部が現在大変人気の高いPythonの文法記事を公開することで、皆様の学習にお役に立ちたい意図で投稿しております。
参考サイト：[【Python入門】for文を使った繰り返し文の書き方](http://programming-study.com/technology/python-for/)

プログラミングの基本は「条件分岐」と「繰り返し」からなります。繰り返しにはfor文または while文で行い、条件分岐にはif文を使います。

繰り返しという意味では同じのfor文とwhile文ですが、その違いはfor文では繰り返しの制御に関する条件を全て1文にまとめることです。
そのため、初期化、継続の判定、変数の更新処理が単純なら、一目で全部に目を通せるfor文の方が好まれ、逆に複雑な場合はwhile文が好まれます。


目次 
1 [Pythonのfor文とは？](##Pythonのfor文とは？)
2 [for文にrange関数を使用した繰り返し文](##for文にrange関数を使用した繰り返し文)
3 [for文とif文を使った条件分岐](##for文とif文を使った条件分岐)
4 [break-continue文](##break-continue文)
5 [for-else文](##for-else文)

##Pythonのfor文とは？

for文の構文は以下のようになります。

```
for 変数 in データの集まり:
    処理
```
```
if 条件:
    処理A
    処理B
処理C
```
for文の流れは原則、「データの集まり」から、「データを一つずつ取り出す」という流れです。「データの集まり」部分には、様々なオブジェクトを置くことが可能です。自分で作成したクラスも、ある一定のルールを守ればそこに置くことができます。

「変数」は、データの集まりから取り出したオブジェクトにアクセスするための名前です。
ここには好きな名前を記述することができ、「〇回ループする」という処理ならば慣習としてよく使う「i, j, k」や、「index」「counter」等の名前が、「文字列から1文字ずつ取り出す」ならば「char」、「データベースやテキストファイルから1行取り出す」場合は「row」等の名前がよく使われます。

例えば、’Hello’という文字列を一文字づつ取り出し表示する処理は以下のようになります。

```py3
for char in 'Hello':
    print(char)
```

```text:実行結果
H
e
l
l
o
終了
```

これは、まず「Hello」の「H」がcharという変数名に代入されます。
print(char)で、最初は「H」と表示されます。
次は「e」がchar変数に渡されてprint(char)で表示され、その後e、l、l、oと同様の処理が行われます。

```
文字列 – ‘Python’
リスト – [‘perl’, ‘python’, ‘php’, ‘ruby’]
タプル – (‘perl’, ‘python’, ‘php’, ‘ruby’)
セット – {‘perl’, ‘python’, ‘php’, ‘ruby’}
辞書 – {‘language': ‘Python’, ‘frame_work': ‘Django’}
終了
```

##for文にrange関数を使用した繰り返し文

繰り返し処理で一番多いのは、「指定回数繰り返す」という処理でしょう。
Pythonのfor文では、「range関数」と呼ばれるものを使います。

5回繰り返すfor文のサンプルは、以下のようになります。

```py3
for i in range(5):
    print(i)
```

```text:実行結果
0
1
2
3
4
終了
```

少し分かりづらいと感じる方も多いのですが、最初にiに入るのは0です。
0、1、2、3、4が順番に表示されます。
もしこれが嫌だ、ということであれば以下のようにできます。

```py3
for i in range(1, 6):
    print(i)
```

```text:実行結果
>
1
2
3
4
5
終了
```

もし1から100までループを行うならば、range関数は以下のようになります。

```py3
for i in range(1, 101):
    print(i)
```
##for文とif文を使った条件分岐

繰り返し処理を行いつつ、ある条件によって処理を変えることは非常によくあります。
1から10まで繰り返し、3の倍数のときだけ表示する処理を書いてみます。

1から10までなので、range(1, 11)です

```py3
for i in range(1, 11):
    if i % 3 == 0:
        print(i)
```

```text:実行結果
3
6
9
終了
```

もちろん、elifやelse等も書くことができます。
for文の中であっても、if文の機能は特に変わりません。

##break-continue文

whileループと同様に、brakeでのループの中止や、continueでの次のループへのジャンプもサポートされています。

次のサンプルコードは、リストの中から「python」という文字列を探し、一致していれば「OK」と表示しループを抜け、そうでなければ文字列を表示します。

```py3
strings = ['ruby', 'python', 'perl', 'java', 'c']
for string in strings:
    if string == 'python':
        print('OK')
        break  # 一致したので、breakで抜ける
    print(string)
```

```text:実行結果
ruby
OK
終了
```

breakでループを抜けたので、以降の文字列は表示されていません。
continueで同じ動作をするものを作ると、以下のようになります。

```py3
strings = ['ruby', 'python', 'perl', 'java', 'c']
for string in strings:
    if string != 'python':
        print(string)
        continue  # 一致していないので、次のループへ
    print('OK')
    break
```
処理にもよりますが、continueはそこまで使用頻度も高くないため、breakを覚えておけば基本的には問題ありません。

##for-else文

while文と同様、elseも使うことができます。

以下は、テストの点数をまとめたリストがあり、70点以下がなければ「合格」と表示されます。

```py3
scores = [100, 71, 80, 99, 75]  # 70点以下はないので、合格
for score in scores:
    if score <= 70:
        break
else:
    print('合格')
```
このelseブロックには、breakがない場合のみ入る、と覚えると混乱せずに済みます。今回は70点以下がなくbreakはなかったため、elseブロックに入り「合格」と表示されました。一度もループしなくてもelseに入る点に注意です。今回の例であれば、テストを受けてなくても（リストが空でも）合格になります。

参考サイト：[【Python入門】for文を使った繰り返し文の書き方](http://programming-study.com/technology/python-for/)