リンドくん
たなべ先生、Pythonで同じ処理を何回も書くのって大変です…もっと効率的な方法はないんですか?
たなべ
そうだね、同じコードを繰り返し書くのは非効率的だよ。
そんなときこそ繰り返し構文(ループ)の出番なんだ!
Pythonには便利な繰り返しの仕組みがあるから、今日はそれを詳しく説明するね。
プログラミングを学び始めると、同じような処理を何度も書かなければならない場面に必ず出会います。
例えば、リストの全要素を表示したり、1から100までの数字を合計したり...。これを一つずつ手作業で書いていたら、非常に非効率的ですよね。
そこで重要になるのが「繰り返し構文」(ループ処理)です。Pythonには主に2種類の繰り返し構文があります。
for
ループ - 決まった回数や要素に対して繰り返すwhile
ループ - 条件が真である限り繰り返すこの記事では、Pythonの繰り返し構文の基本から応用まで、初心者にもわかりやすく解説していきます。
コードを効率的に書けるようになれば、プログラミングの幅が大きく広がるはずです!
リンドくん
forループというのはどういう時に使うんですか?
たなべ
forループは決まった回数やリストなどのデータを順番に処理したいときに使うんだよ。
例えば、クラスの生徒全員の名前を表示したいときなんかが典型的な使い方だね。
Pythonのforループは、他のプログラミング言語と比べてとても直感的で書きやすいのが特徴です。
基本的な構文は以下のとおりです。
繰り返し対象には以下のようなものが使えます。
例えば、果物のリストがあり、それぞれの果物の名前を表示したい場合は以下のように書けます。
この例では、fruits
リストの要素が順番にfruit
変数に代入され、それぞれに対してprint()
関数が実行されます。
実行結果は以下のようになります。
特定の回数だけ繰り返したい場合は、range()
関数が便利です。
例えば、1から5までの数字を表示したい場合は以下ののようになります。
range()
関数は以下のように使えます。
range(終了値)
- 0から終了値-1までrange(開始値, 終了値)
- 開始値から終了値-1までrange(開始値, 終了値, ステップ)
- 開始値から終了値-1までをステップごとにリストの要素と同時にインデックス(位置)も必要な場合は、enumerate()
関数を使います。
enumerate()
関数は、イテラブルオブジェクトの要素と同時にインデックスも取得できる便利な関数です。
リンドくん
forループとwhileループは何が違うんですか?
たなべ
大きな違いは、繰り返す条件の指定方法だね。
forループは「リストの全要素」や「〇回」といった明確な対象に対して使うのに対して、whileループは「〇〇の条件を満たす限り」という柔軟な条件で繰り返せるんだ。
whileループは、指定した条件がTrue
である限り、ブロック内のコードを繰り返し実行します。
例えば、ユーザーが「終了」と入力するまで、入力を受け付けるプログラムを考えてみましょう。
このプログラムは、ユーザーが「終了」と入力するまで、入力と出力を繰り返します。
条件式に True
を指定すると無限ループになります。
ただし、break
文を使用することで、ループから抜け出すことができます。
無限ループは危険に思えるかもしれませんが、適切にbreak
文を使うことで、複雑な条件の繰り返し処理が簡潔に書けることがあります。
リンドくん
ループの途中で処理をスキップしたり、途中で終了したりすることもできるんですか?
たなべ
もちろん!Pythonにはcontinue
とbreak
という2つの便利な制御文があるよ。
これらを使いこなせると、ループ処理がもっと柔軟になるんだ。
先ほど紹介したbreak
文は、ループを即座に終了させます。
例えば、リスト内に特定の値が見つかったらループを終了させたい場合に便利です。
continue
文は、現在の繰り返しをスキップして、次の繰り返しに進みます。
例えば、偶数だけを処理したい場合に使えます。
あまり知られていませんが、PythonのループにはOptionでelse
節をつけることができます。
これは、ループがbreak
文で中断されずに正常終了した場合に実行されます。
このコードでは、ループが中断されずに最後まで実行されるため、else
節の処理も実行されます。
リンドくん
ループの中にループを入れることもできるんですか?
たなべ
その通り!ネストしたループと呼ばれるテクニックだよ。
これを使うと、二次元データの処理や複雑なパターンの生成ができるんだ。
ループの中に別のループを入れることを「ネストしたループ」と呼びます。
例えば、掛け算の九九表を作るプログラムを考えてみましょう。
このコードでは、外側のループが1回実行される間に、内側のループが9回実行されます。
つまり、全部で9×9=81回の掛け算が表示されます。
ネストしたループは、二次元リスト(リストの中にリストがある構造)の処理に特に役立ちます。
このように、ネストしたループを使うことで、複雑なデータ構造も効率的に処理できます。
リンドくん
実際のプログラミングでは、どんな場面でループを使うことが多いですか?
たなべ
本当に様々な場面で使うよ!
例えばデータ集計やファイル処理、条件に合うデータの検索など、プログラミングをしていると毎日のように使うテクニックだね。
例えば、テストの点数リストから平均点を求めるプログラムを考えてみましょう。
条件に合致する要素だけを抽出する例を見てみましょう。
Pythonでは、上記の「条件に合うデータのフィルタリング」をより簡潔に書ける「リスト内包表記」という構文があります。
リスト内包表記は少し難しく見えるかもしれませんが、慣れると非常に便利な機能です。
「[式] for [変数] in [イテラブル] if [条件]」という形で書くことで、簡潔にリスト処理ができます。
リンドくん
ループの基本がわかってきました!自分でもいろんな処理に挑戦してみたいです。
たなべ
素晴らしい!繰り返し構文はプログラミングの基本中の基本だから、ぜひ実際に手を動かして練習してみてね。
わからないことがあれば、いつでも質問してくださいね。
ここまで、Pythonの繰り返し構文について詳しく解説してきました。
ここで要点をまとめておきましょう。
for
ループは、リストや範囲など決まった対象に対して繰り返すのに最適while
ループは、条件が満たされる限り繰り返す柔軟な構文break
とcontinue
を使うことで、ループをより細かく制御できる繰り返し構文をマスターすることで、効率的で読みやすいコードが書けるようになります。
ぜひ、様々なプログラミング課題に挑戦してみてください!