【Python基本文法】for文の使い方

文法

概要

ここでは、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行出力するプログラムを作成してください。

  1. 3の倍数かつ5の倍数のときは”FizzBuzz”を出力する。
  2. 条件1を満たさず、3の倍数のときは”Fizz”を出力する。
  3. 条件1を満たさず、5の倍数のときは”Buzz”を出力する。
  4. 条件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()
タイトルとURLをコピーしました