【Python入門】繰り返し処理をマスター!for文・while文の基本と使い分けを徹底解説 #5

「同じようなコードここにif文の記事へのリンクを挿入(あれば)を何回も書くのは面倒だな…」
「リストに入っているデータ全部に同じ処理をしたいけど、どうすればいいんだろう?」

こんにちは! Pythonプログラミングの学習、順調に進んでいますか? 前回のif文では、条件によってプログラムの流れを変える方法を学びましたね。今回は、プログラミングのもう一つの強力な武器、「ループ処理(繰り返し処理)」について学んでいきましょう。Pythonでは主にfor文(フォーぶん)while文(ホワイルぶん)を使って、面倒な繰り返し作業をコンピュータに自動で実行させることができます。

この記事を読めば、Pythonのfor文とwhile文の基本的な使い方、そしてそれらをいつどのように使い分ければ良いのかが分かります。ループ処理をマスターすれば、あなたのプログラムは格段に効率的かつパワフルになりますよ!


1. ループ処理とは? なぜ必要なの?

プログラミングにおけるループ処理とは、同じ、または類似した一連の処理を、指定した回数だけ、あるいは特定の条件が満たされている間、繰り返し実行する仕組みのことです。

なぜループ処理が必要なのでしょうか?

  • 作業の自動化と効率化: 例えば、「リストに入っている100個の数値すべてに1を加える」という作業を手作業で100行書くのは大変ですが、ループを使えば数行で済みます。
  • コードの簡潔化: 同じようなコードの繰り返しを避けることで、プログラム全体が短く、見通しが良くなります。
  • 大量のデータの処理: ファイルから読み込んだ大量のデータや、Webから取得したリストなど、多くの要素に対して一括で同じ操作を行いたい場合に不可欠です。
  • 特定の条件を満たすまで待機: 例えば、ユーザーが正しいパスワードを入力するまで、入力処理を繰り返すといったことができます。

学校の先生がクラスの生徒全員に同じプリントを配る作業や、工場で同じ製品をたくさん作る作業をイメージしてみてください。ループ処理は、まさにそのような「繰り返し」をプログラムで実現するためのものです。


2. Pythonのfor文:決まった回数や要素の数だけ繰り返す

for文は、主に「繰り返す回数」や「処理したい要素の集まり(リストや文字列など)」が決まっている場合に便利なループです。

2.1. for文の基本構文

for文は以下のように書きます。

for 変数 in イテラブルオブジェクト:
    # 繰り返したい処理
    # この部分はインデントする
    処理1
    処理2

重要なポイント:

  • forinの間に「変数」を書きます。この変数には、ループの各回で「イテラブルオブジェクト」から取り出された要素が順番に代入されます。
  • inの後には、繰り返し処理の対象となる「イテラブルオブジェクト」を指定します。イテラブルオブジェクトとは、要素を一つずつ取り出すことができるオブジェクトのことで、例えばリスト、文字列、range()関数が返すオブジェクトなどがあります。
  • 行の末尾にはコロン (:) を付けます。
  • 繰り返したい処理は、for文の次の行からインデントして記述します。

2.2. range()関数を使った繰り返し

指定した回数だけ処理を繰り返したい場合、range()関数が非常に便利です。

  • range(終了値): 0から「終了値-1」までの連続した数値を生成します。
  • range(開始値, 終了値): 「開始値」から「終了値-1」までの連続した数値を生成します。
  • range(開始値, 終了値, ステップ): 「開始値」から「終了値-1」まで、「ステップ」刻みで数値を生成します。

サンプルコード:

# 「こんにちは」を3回表示
for i in range(3):  # i には 0, 1, 2 が順番に入る
    print(f"{i+1}回目: こんにちは!")

# 1から5までの数字を表示
print("\n1から5までの数字:")
for num in range(1, 6): # num には 1, 2, 3, 4, 5 が順番に入る
    print(num)

# 10から0まで2つ飛ばしで表示 (ステップに負の値を指定)
print("\n10から0まで2つ飛ばし:")
for countdown in range(10, -1, -2): # countdown には 10, 8, 6, 4, 2, 0
    print(countdown)

実行結果 (例):

1回目: こんにちは!
2回目: こんにちは!
3回目: こんにちは!

1から5までの数字:
1
2
3
4
5

10から0まで2つ飛ばし:
10
8
6
4
2
0

ループ変数(この例では inum)は、ループ内で特に使う必要がなければ、慣習的にアンダースコア _ にすることもあります。(例: for _ in range(5):)

2.3. リストや文字列を使った繰り返し

リストや文字列の各要素に対して順番に処理を行いたい場合もfor文が活躍します。

fruits = ["リンゴ", "バナナ", "ミカン"]
print("\n好きな果物:")
for fruit in fruits: # fruit にリストの要素が順番に入る
    print(fruit)

my_name = "Python"
print("\n名前を一文字ずつ:")
for char in my_name: # char に文字列の各文字が順番に入る
    print(char)

実行結果 (例):

好きな果物:
リンゴ
バナナ
ミカン

名前を一文字ずつ:
P
y
t
h
o
n

2.4. for文とif文の組み合わせ

ループの中でif文を使って、特定の条件を満たす要素に対してのみ処理を行うこともできます。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print("\nリストの中の偶数:")
for n in numbers:
    if n % 2 == 0: # 偶数かどうかを判定
        print(n)

実行結果 (例):

リストの中の偶数:
2
4
6
8
10

3. Pythonのwhile文:条件が真 (True) の間だけ繰り返す

while文は、指定した「条件式」が真 (True) である間、繰り返し処理を実行します。繰り返す回数が事前に決まっていない場合に特に有効です。

3.1. while文の基本構文

while文は以下のように書きます。

while 条件式:
    # 条件式が真 (True) の間、繰り返したい処理
    # この部分はインデントする
    処理1
    処理2
    # ループ内で条件式が偽になるような変更を忘れないこと!

重要なポイント:

  • whileの後には、真 (True) または偽 (False) の結果になる「条件式」を書きます。
  • 条件式の後には必ずコロン (:) を付けます。
  • 条件式が真 (True) の間、インデントされたブロック内の処理が繰り返し実行されます。
  • 注意: ループブロック内で、いつかは条件式が偽 (False) になるような処理(例: カウンタ変数の値を変更する)を記述しないと、ループが永久に終わらない「無限ループ」に陥ってしまいます。

3.2. 基本的なwhileループの例

カウンタ変数を使って、1から5まで数値を表示してみましょう。

count = 1
print("\nwhileループで1から5まで表示:")
while count <= 5: # countが5以下の間、繰り返す
    print(count)
    count = count + 1  # countの値を1増やす (これが無いと無限ループ!)
                     # count += 1 とも書ける

実行結果 (例):

whileループで1から5まで表示:
1
2
3
4
5

3.3. 無限ループとbreak文:ループからの脱出

意図的に無限ループを作り、ループの途中で特定の条件が満たされたらbreak文を使ってループを強制的に抜け出す、というテクニックもよく使われます。

print("\n'quit'と入力されるまで繰り返す:")
while True:  # Trueは常に真なので、このままでは無限ループ
    user_input = input("何か入力してください ('quit'で終了): ")
    if user_input == "quit":
        print("終了します。")
        break  # ループを抜ける
    print(f"入力された内容: {user_input}")

この例では、ユーザーが「quit」と入力するまで、入力と表示を繰り返します。

3.4. continue文:今回の処理をスキップして次に進む

continue文を使うと、ループブロック内のそれ以降の処理をスキップし、すぐに次の繰り返し処理(for文なら次の要素へ、while文なら条件式の再評価へ)に移ります。

print("\n1から10のうち、偶数だけスキップして表示 (奇数を表示):")
for i in range(1, 11):
    if i % 2 == 0:  # もし偶数なら
        continue   # 今回のprint(i)は実行せず、次のループへ
    print(i)

実行結果 (例):

1から10のうち、偶数だけスキップして表示 (奇数を表示):
1
3
5
7
9

4. for文とwhile文、どっちを使う?使い分けのヒント

for文とwhile文はどちらも繰り返し処理を行いますが、どのような場合にどちらを使うと良いのでしょうか?

  • for文が適している場合:
    • 繰り返す回数が明確に決まっている時 (例: 「10回繰り返す」→ range(10))
    • リストや文字列など、イテラブルオブジェクトの全ての要素に対して順番に処理を行いたい時
  • while文が適している場合:
    • 繰り返す回数が事前に決まっておらず、ある特定の条件が満たされる(または満たされなくなる)まで処理を続けたい時 (例: 「ユーザーが正しい値を入力するまで」「エラーが発生するまで」)
    • ループの継続条件が、ループ内部の処理によって変化する場合

多くの場合、for文で書ける処理はwhile文でも書けますし、その逆も可能です。しかし、上記の基準で考えると、より自然で読みやすいコードになることが多いです。


5. 実践的な例題に挑戦!

ここまでの知識を使って、いくつかの簡単なプログラムを書いてみましょう。

例題1:リスト内の数値の合計を計算する (for文)

numbers_to_sum = [10, 20, 30, 40, 50]
total_sum = 0  # 合計を保存する変数を0で初期化

for num in numbers_to_sum:
    total_sum = total_sum + num # total_sum += num とも書ける

print(f"リストの合計: {total_sum}") # 結果: リストの合計: 150

例題2:簡単な数当てゲーム (while文とif文)

import random # 乱数を扱うためのライブラリ

answer = random.randint(1, 10)  # 1から10までのランダムな整数を正解とする
guess_count = 0
max_guesses = 3

print("数当てゲーム! (1から10の数字を当ててね。3回まで挑戦可能)")

while guess_count < max_guesses:
    try:
        guess_str = input(f"{guess_count + 1}回目の予想: ")
        guess = int(guess_str)

        if guess == answer:
            print("大正解!おめでとう!")
            break # 当たったらループを抜ける
        elif guess < answer:
            print("もっと大きい数字だよ。")
        else:
            print("もっと小さい数字だよ。")
        
        guess_count += 1
    except ValueError:
        print("数字を入力してくださいね。")

if guess_count == max_guesses and guess != answer : # breakで抜けていない場合
    print(f"残念!正解は {answer} でした。")

まとめ:ループ処理でプログラムを自動化しよう!

今回は、Pythonの繰り返し処理の基本であるfor文とwhile文について、以下の内容を学びました。

  • for文の基本的な構文と、range()関数やリスト・文字列を使った繰り返し
  • while文の基本的な構文と、条件に基づく繰り返し
  • ループを制御するbreak文(脱出)とcontinue文(スキップ)
  • for文とwhile文の使い分けのヒント

ループ処理は、プログラムによる自動化と効率化を実現するための非常に重要な概念です。これらを使いこなせるようになると、より複雑で実用的なプログラムを作成できるようになります。

次は、複数の処理をまとめて名前を付け、再利用しやすくする「関数」について学んでいくと、さらに整理された美しいプログラムが書けるようになりますよ。お楽しみに!



コメント

このブログの人気の投稿

タイトルまとめ

これで迷わない!WindowsでPython環境構築する一番やさしい方法 #0

【Python標準ライブラリ完結!】11の冒険をありがとう!君のPython力が飛躍する「次の一歩」とは? 🚀