繰り返し処理の基本:for文とrange関数#

はじめに#

これまでの記事では、条件分岐(if文、elif文、else文)について学んできました。プログラミングのもう一つの重要な要素は「繰り返し処理」です。

繰り返し処理を使うと、同じような処理を効率的に行えるようになります。例えば、100名の社員の給与データを処理する場合を考えてみましょう。繰り返し処理がなければ、1人ごとに計算コードを100回書く必要がありますが、繰り返し処理を使えば数行のコードで全社員の処理が可能になります。

今回の記事では、Python の繰り返し処理の基本である「for文」と、繰り返し回数を制御する「range関数」について学んでいきます。

for文の基本#

for文は、複数のデータを順番に処理するための構文です。例えば「リスト(データのまとまり)」や「文字列」などの各要素を一つずつ取り出して処理することができます。基本的な形は次のとおりです。

for 変数 in データの集まり(イテラブル):
    繰り返し実行する処理

ここで「データの集まり」とは、複数の要素を持ったデータのことで、プログラミング用語では「イテラブルオブジェクト」と呼びます。「イテラブル」とは「繰り返し可能な」という意味で、for文で一つずつ要素を取り出せるデータのことです。具体的には、リスト、文字列、辞書、タプルなどがこれに当たります。

まだリストについて詳しく学んでいませんが、簡単な例で見ていきましょう。

>
# 基本的なfor文(リストの要素を順に表示)
fruits = ["リンゴ", "バナナ", "オレンジ"]  # これはリストです

for fruit in fruits:
    print(fruit)
リンゴ
バナナ
オレンジ

上記の例では、fruitsというリスト(角括弧[]で囲まれたデータのまとまり)の要素が1つずつ変数fruitに代入され、print文が実行されます。このように、for文を使うと複数のデータに対して同じ処理を繰り返し適用することができます。

文字列を繰り返し処理する#

文字列も1文字1文字が連なったデータ(イテラブル)なので、for文で1文字ずつ処理することができます。

>
# 文字列を繰り返し処理する
message = "Python"

for character in message:
    print(character)
P
y
t
h
o
n

この例では、文字列"Python"の各文字が1つずつ変数characterに代入され、それぞれの文字が改行されて表示されます。文字列は「P」「y」「t」「h」「o」「n」という6つの文字からなるデータの集まりとみなすことができるのです。

range関数の基本#

Pythonのrange()関数は、数値の連続した範囲を簡単に作り出す関数です。この関数は主に、決まった回数のループを実行するためにfor文と組み合わせて使用されます。

range()関数の基本的な使い方は次の3つです。

  1. range(stop): 0からstop - 1までの整数を生成
  2. range(start, stop): startからstop - 1までの整数を生成
  3. range(start, stop, step): startからstop - 1までの整数をstep間隔で生成

それぞれの使い方を見ていきましょう。

range(stop):0から始まる範囲#

>
# range(5): 0から4までの整数を生成
print("range(5)の結果:")
for i in range(5):
    print(i)
range(5)の結果:
0
1
2
3
4

この例では、range(5)で0から4までの5つの整数を生成し、それぞれの値が変数iに代入されてprint文が実行されます。

注目すべき点は、range(5)は5ではなく、0から4までの範囲を表すということです。つまり、stopの値自体は含まれません。

range(start, stop):開始値を指定する範囲#

>
# range(2, 7): 2から6までの整数を生成
print("range(2, 7)の結果:")
for i in range(2, 7):
    print(i)
range(2, 7)の結果:
2
3
4
5
6

この例では、range(2, 7)で2から6までの5つの整数を生成しています。

range(start, stop, step):ステップを指定する範囲#

>
# range(1, 10, 2): 1から9までの整数を2ずつ増加させて生成
print("range(1, 10, 2)の結果:")
for i in range(1, 10, 2):
    print(i)
range(1, 10, 2)の結果:
1
3
5
7
9

この例では、range(1, 10, 2)で1から始まり、2ずつ増加して9までの整数(つまり奇数)を生成しています。

逆順の範囲を生成する#

stepに負の値を指定すると、逆順の範囲を生成することもできます。この場合、startstopよりも大きい値にする必要があります。

>
# range(10, 0, -1) - 10から1までの整数を逆順に生成
print("range(10, 0, -1)の結果:")
for i in range(10, 0, -1):
    print(i)
range(10, 0, -1)の結果:
10
9
8
7
6
5
4
3
2
1

この例では、range(10, 0, -1)で10から1までの整数を逆順に生成しています。

条件分岐とfor文の組み合わせ#

for文の中でif文などの条件分岐を使うこともできます。例えば、1から10までの整数のうち偶数だけを表示するプログラムを考えてみましょう。

>
# 1から10までの整数のうち、偶数だけを表示する
print("1から10までの偶数:")
for num in range(1, 11):
    if num % 2 == 0:  # 2で割った余りが0なら偶数
        print(num)
1から10までの偶数:
2
4
6
8
10

この例では、range(1, 11)で1から10までの整数を生成し、各数値が偶数かどうかをnum % 2 == 0で判定しています。偶数の場合のみprint文が実行されます。

インデントの重要性#

for文の中の処理ブロックは、if文と同様にインデント(字下げ)によって示されます。インデントのレベルによって、どの処理がループの内側で実行されるかが決まります。

>
# インデントの重要性
for i in range(3):
    print(f"ループ {i} の開始")
    print(f"  値は {i} です")
    print(f"ループ {i} の終了")
print("すべてのループが終了しました")
ループ 0 の開始
  値は 0 です
ループ 0 の終了
ループ 1 の開始
  値は 1 です
ループ 1 の終了
ループ 2 の開始
  値は 2 です
ループ 2 の終了
すべてのループが終了しました

この例では、最初の3つのprint文はインデントされているため、ループの内側で実行されます。一方、最後のprint文はインデントされていないため、ループの外側で1回だけ実行されます。

実用例:文字列の処理#

for文を使って、文字列を1文字ずつ処理する例を見てみましょう。例えば、文字列に含まれる母音の数を数えるプログラムです。

>
# 文字列に含まれる母音の数を数える
text = "Hello, Python Programming!"
vowels = "aeiouAEIOU"  # 母音のリスト
vowel_count = 0

for char in text:
    if char in vowels:
        vowel_count += 1  # vowel_count = vowel_count + 1 と同じ

print(f"文字列: {text}")
print(f"母音の数: {vowel_count}")
文字列: Hello, Python Programming!
母音の数: 7

この例では、文字列textの各文字を順番に変数charに代入し、その文字が母音(vowels)に含まれているかをチェックしています。母音であれば、vowel_countをインクリメント(1増やす)しています。

実用例:パターンの出力#

for文とrange関数を使って、さまざまなパターンを出力することができます。例えば、三角形のパターンを出力してみましょう。

>
# 三角形のパターンを出力する
height = 5

for i in range(1, height + 1):
    print("*" * i)
*
**
***
****
*****

この例では、range(1, height + 1)で1からheightまでの整数を生成し、それぞれの値をアスタリスク(*)の個数として使用しています。"*" * iは、アスタリスクをi回繰り返した文字列を生成します。

まとめ#

この記事では、Pythonの繰り返し処理の基本である「for文」と、繰り返し回数を制御する「range関数」について学びました。

  • for文は、イテラブル(リストや文字列など)の各要素に対して処理を繰り返すための構文
  • range関数は、数値の範囲を表すオブジェクトを作成する関数で、主にfor文と組み合わせて使用する
  • for文の中で条件分岐(if文など)を使うことができる
  • インデントは、ループの内側と外側を区別するために重要

for文とrange関数は、Pythonプログラミングで非常によく使われる機能です。これらを使いこなすことで、効率的なプログラムを書くことができます。次回の記事では、別の繰り返し方法である「while文」について学びます。