概要
ここでは、for文の書き方と具体例を説明します。for文の使い方は以下の通りです。
for <変数> in <イテラブルオブジェクト>:
# 処理
for文とは
for文とは、値のまとまりを順番に1つずつ取り出し、処理を行うための構文です。しかし、なぜfor文が必要なのでしょうか。
それを考えるため、まず「”こんにちは”と出力するプログラム」を書いてみましょう。print(<文字列>)の形式で文字列を表示できるので、以下のように書くことができます。
print("こんにちは")
これは簡単に書くことができました。次に、「”こんにちは”と1000回出力するプログラム」を書いてみましょう。上のプログラムを1000回繰り返せば良いですね。
print("こんにちは")
print("こんにちは")
print("こんにちは")
print("こんにちは")
print("こんにちは")
# ...(あと995回続く)
しかし、これではプログラムが非常に長くなってしまって読みにくいです。書くのも大変です。そこで、for文を使うともっと簡単に、短く書くことができます。
for文の書き方と具体例
もう一度、for文の構文を確認しましょう。以下の通りです。
for <変数名> in <イテラブルオブジェクト>:
# 処理
<変数名>とは、<イテラブルオブジェクト>の各値を代入する変数の名前が入ります。<イテラブルオブジェクト>とは、繰り返し値を取り出すことが可能なオブジェクトです。といっても、「繰り返す」や「オブジェクト」といったことは、最初はイメージがわかないと思いますので、具体例でみてみましょう。
range()とfor文を組み合わせて使うと、指定した回数分処理を繰り返すことができます。これを使い、「”こんにちは”と1000回出力するプログラム」を書き直してみましょう。
for i in range(1000):
print("こんにちは")
これを対話環境で実行してみると、”こんにちは”が1000回出力されるのが分かります。
>>> for i in range(1000):
... print("こんにちは")
...
こんにちは
こんにちは
こんにちは
こんにちは
(以下省略)
1000回print()を実行したいので、range()に1000を与えています。こうすることで、range(1000)という「0から999までの、1000回繰り返し値を取り出すことができるオブジェクト」を作り、それを1つずつ変数iに代入しています。iには0から999まで順番に、合計1000回値が代入されることになります。
iの値はfor文の中の処理で使うことができます。例えば以下のように書くことで、出力した”こんにちは”が何回目であるかを表示することができます。str(整数)で、整数を文字列に変換しています。
>>> for i in range(5):
... print("こんにちは(" + str(i+1) + "回目)")
...
こんにちは(1回目)
こんにちは(2回目)
こんにちは(3回目)
こんにちは(4回目)
こんにちは(5回目)
range(<初めの数>, <終わりの数>)と書くこともできます。<終わりの数>は含まれないので注意しましょう。例えば、range(1, 6)と書けば、1から5まで(6は含まれません)の繰り返しを表すことができます。
>>> for i in range(1, 6):
... print("こんにちは(" + str(i) + "回目)")
...
こんにちは(1回目)
こんにちは(2回目)
こんにちは(3回目)
こんにちは(4回目)
こんにちは(5回目)
continueで処理をスキップする
continueを用いると、そこからfor文の終わりまでの処理をスキップすることができます。例えば、iが偶数のとき処理をスキップするには、以下のように書きます。
>>> for i in range(20):
... if i % 2 == 0:
... continue
... print(i)
...
1
3
5
7
9
11
13
15
17
19
iが偶数のときは処理をスキップしているので、奇数のみが表示されました。
breakでfor文を抜ける
for文を途中で抜けたい場合は、breakを用います。例えば、iが8になったらfor文を抜ける(つまり7まで出力される)処理は、以下のように書きます。
>>> for i in range(20):
... if i == 8:
... break
... print(i)
...
0
1
2
3
4
5
6
7
for文のネスト(for文の中にfor文を書く)
for文の中にfor文を書くこともできます。
>>> for i in range(4):
... for j in range(3):
... print(str(i) + " " + str(j))
...
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
3 0
3 1
3 2
少し複雑ですが、以下のような処理を行っています。
- iに0が入り、jに0~2が入る。出力は「0 0」「0 1」「0 2」の3行となる。
- 次に、iに1が入り、jに0~2が入る。出力は「1 0」「1 1」「1 2」の3行となる。
- iが2と3のときも同様
練習問題
では、ここで学んだことを実践してみましょう。
Hello world! * 5
for文を使い、以下の出力となるようなプログラムを作成してください。
Hello world!
Hello world!
Hello world!
Hello world!
Hello world!
for i in range(5):
print("Hello world!")
FizzBuzz
for文を使い、次の条件で30行出力するプログラムを作成してください。
- 3の倍数かつ5の倍数のときは”FizzBuzz”を出力する。
- 条件1を満たさず、3の倍数のときは”Fizz”を出力する。
- 条件1を満たさず、5の倍数のときは”Buzz”を出力する。
- 条件1,2,3を満たさないときは、その時点の行数の数字を出力する。
出力は以下のようになります。
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
ヒント
- 「1から30までの繰り返し」はrange(1, 31)で表現できます。
for i in range(1, 31):
if i % 3 == 0 and i % 5 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
九九表
for文を使い、以下の出力となるようなプログラムを作成してください。
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
ヒント
- 「1から9までの繰り返し」はrange(1, 10)で表現できます。
- 改行せずに文字列を出力するときは、print(<文字列>, end=” “)のようにします。こうすることで、文字列の最後に改行文字ではなく空白文字が追加されます。
for i in range(1, 10):
for j in range(1, 10):
print(i * j, end=" ")
print()