Python初心者必見!for文とwhile文の違いや使い方、応用方法をわかりやすく解説します。
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi2_nayamu.png)
Pythonでループ処理を行う方法はfor文とwhile文がありますが、それぞれどのような使い方があり、違いは何ですか?
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
for文はリストや範囲オブジェクトなどを指定して繰り返し処理を行い、while文は指定した条件がTrueの場合に繰り返し処理を行います。
for文の使い方
for文はリストや範囲オブジェクトを指定して、変数に要素を代入しながら繰り返し処理を行います。
for文の基本的な形式
for文の基本的な形式は以下のようになっています。
for 変数 in シーケンス:
処理
変数には、シーケンスから順番に取り出した要素が順に代入されていきます。そして、処理には、各要素に対して実行する処理を記述します。
シーケンスとは、複数の要素を順番に並べたものを指します。Pythonで扱える主なシーケンスには、リスト、タプル、文字列、rangeオブジェクトなどがあります。
リストやrangeを使ったfor文のサンプルプログラム
以下は、for文を使ってリストの要素を順番に出力する例です。
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
print(fruit)
この例では、リストfruitsから順番に要素を取り出してfruitに代入し、print関数によって出力しています。このプログラムを実行すると、リストfruitsの各要素が順番に表示されます。
また、シーケンスとしてrangeオブジェクトを使った場合は以下のようになります。
for i in range(5):
print(i)
この例では、range(5)によって0から4までの整数が順に取り出せるシーケンスが生成され、for文によって順番に取り出されています。print関数によって、0から4までの整数が順番に表示されます。
また、rangeは以下のように引数を2つ渡すこともできます。
for i in range(1, 11):
print("2 x", i, "=", 2 * i)
このプログラムは、1から10までの整数に2を掛けた結果を出力します。range関数によって、1から10までの整数のシーケンスが生成され、for文によって順番に取り出されています。
while文の使い方
while文の基本的な形式
while文は、指定した条件が成り立っている限り、繰り返し処理を行うための制御構文です。while文の基本的な形式は以下の通りです。
while 条件式:
繰り返し処理
while文の動作は、条件式がTrueの場合に繰り返し処理を実行します。繰り返し処理が終了するためには、条件式がFalseになる必要があります。
以下は、1から10までの整数を足し合わせていくサンプルプログラムです。
i = 1
total = 0
while i <= 10:
total += i
i += 1
print(total)
このプログラムでは、変数iに1を、変数totalに0を代入しています。while文の条件式である「i <= 10」がTrueの場合は、繰り返し処理が実行されます。繰り返し処理では、iをtotalに加算し、iに1を加えます。これによって、1から10までの整数を足し合わせることができます。最後に、totalの値を表示しています。
for文とwhile文の違い
for文とwhile文は、どちらも繰り返し処理を行うための制御構文ですが、以下のような違いがあります。
- 使い分け
- for文は繰り返し回数があらかじめ決まっている場合に使用します。一方、while文は繰り返し回数が決まっていない場合に使用します。
- 初期化処理
- for文は初期化処理が必要ありません。一方、while文は初期化処理が必要です。
- 条件式
- for文は繰り返し回数が決まっているため、条件式はありません。一方、while文は繰り返し回数が決まっていないため、条件式が必要です。
- カウンタ変数
- for文は繰り返し処理のたびにカウンタ変数が自動的に増加します。一方、while文はカウンタ変数の更新をプログラムで明示的に行う必要があります。
- 繰り返し処理の終了条件
- for文は指定された回数分の繰り返し処理が終了した時点で自動的に終了します。一方、while文は条件式がFalseになった時点で終了します。
for文の応用方法
enumerate関数を使ったfor文
enumerate関数はfor文において、処理する要素のインデックスを取得するための方法の一つです。この機能を利用することで、for文で処理する要素のインデックスを一度に取得でき、コードの見通しを良くすることができます。
以下に、enumerate関数を使ったfor文の基本的な形式と、サンプルプログラムを用いた解説を示します。
for インデックス, 要素 in enumerate(リスト):
処理
上記のコードでは、enumerate関数を用いてリストのインデックスと要素を同時に取得し、for文で順番に処理します。enumerate関数は、引数にリストを渡すことで、リストの各要素に対してインデックスを割り当てます。for文内の処理で、インデックスと要素を使用することができます。
以下のプログラムでは、enumerate関数を使ってリストの各要素を処理しながら、そのインデックスと要素を出力しています。
fruits = ["apple", "orange", "banana"]
for index, fruit in enumerate(fruits):
print(f"Index: {index}, Fruit: {fruit}")
上記のプログラムを実行すると、以下のような出力が得られます。
Index: 0, Fruit: apple
Index: 1, Fruit: orange
Index: 2, Fruit: banana
このように、enumerate関数を使うことで、for文で処理する要素のインデックスを簡単に取得することができます。
zip関数を使ったfor文
zip関数は、複数のリストから同時に要素を取り出し、1つのタプルとしてまとめるための関数です。例えば、以下のような2つのリストがあった場合、
a = [1, 2, 3]
b = ['a', 'b', 'c']
zip
関数を使ってこれら2つのリストをまとめることができます。具体的には、以下のように記述します。
zipped = zip(a, b)
すると、zipped
には以下のようなタプルがまとめられたオブジェクトが返されます。
[(1, 'a'), (2, 'b'), (3, 'c')]
zip関数とfor文を使うことで、複数のリストを同時に扱うことができます。以下に、その基本形を示します。
for x, y in zip(list1, list2):
# 処理内容
このように、zip
関数を使って複数のリストをタプルにまとめた後、for文の中でx
とy
にそれぞれの値を代入し、処理を行います。
以下のサンプルプログラムでは、2つのリストfruits
とprices
をzip
関数を使ってまとめ、for文で同時に扱います。その結果、リストの要素を1つずつ取り出し、出力しています。
fruits = ['apple', 'banana', 'orange']
prices = [100, 200, 150]
for fruit, price in zip(fruits, prices):
print(f'{fruit}の値段は{price}円です。')
このプログラムの出力結果は以下のようになります。
appleの値段は100円です。
bananaの値段は200円です。
orangeの値段は150円です。
リスト内包表記を使ったfor文
リスト内包表記は、リストを作成するための簡潔な方法の一つであり、for文を使って繰り返し処理を行うことができます。リスト内包表記を使うことで、複数の行にまたがるfor文を、簡潔に1行で書くことができます。
リスト内包表記は、以下のような基本的な形式で記述します。
[式 for 変数 in イテラブルオブジェクト]
この式は、for文を使ってイテラブルオブジェクトから値を取り出し、式を評価して新しいリストを作成するものです。ここで、式はリストの要素に対応する値を計算するために使用されるものであり、変数はイテラブルオブジェクトから取り出された値を参照するために使用されます。
例えば、0から9までの数字のリストを作成するには、以下のように記述することができます。
lst = [i for i in range(10)]
この例では、0から9までの数字をrange関数で生成し、リスト内包表記を使って新しいリストを作成しています。
また、リスト内包表記は、条件式を使ってフィルタリングすることもできます。例えば、0から9までの数字のうち、偶数のみを取り出す場合は、以下のように記述します。
lst = [i for i in range(10) if i % 2 == 0]
この例では、条件式として「i % 2 == 0」を指定しており、偶数の場合に限り式が評価されます。
ループ処理の中断とスキップ、終了後の処理
ループ処理の応用として、ループ処理の中断(break文)とスキップ(continue文)、ループの終了時に処理を実行するelse文を解説します。
break文を使ったループの中断
break文とは、ループ処理中に特定の条件が成立した場合に、ループを途中で中断するための文です。基本的な構文は以下の通りです。
for 変数 in オブジェクト:
処理
if 条件式:
break
ループ処理中にif文で条件式が成立した場合、break文が実行され、ループ処理を中断します。
また、while文でも同様に使用することができます。以下はwhile文でのbreak文の使用例です。
i = 0
while i < 10:
i += 1
if i == 5:
break
print(i)
このプログラムでは、iが5になった時点でbreak文が実行され、ループが中断されます。
continue文を使ったループのスキップ
ループ内で処理をスキップする場合は、continue
文を使用します。continue
文が実行されると、その時点での処理をスキップし、次の繰り返しに移ります。
以下は、0から9までの数値のうち、偶数だけを出力する例です。
for i in range(10):
if i % 2 != 0: # iが奇数の場合、処理をスキップ
continue
print(i)
このコードでは、0から9までの数値を順番に変数i
に代入し、その値が偶数である場合にのみprint()
関数で出力しています。if
文でi
が奇数である場合、continue
文が実行され、その時点での処理がスキップされます。
else文の使い方
for
文やwhile
文には、else
文を組み合わせることができます。else
文は、ループ処理が正常に終了した場合に、実行される処理を指定するために使用します。
以下は、1から10までの数値を順番に変数i
に代入し、合計を計算する例です。for
文のループが完了した後に、合計を出力するためにelse
文を使用しています。
sum = 0
for i in range(1, 11):
sum += i
else:
print("合計:", sum)
このコードでは、1から10までの数値を順番に変数i
に代入し、変数sum
に加算しています。for
文のループが完了した後に、else
文が実行され、合計が出力されます。
まとめ
for文とwhile文の違いや使い方、応用方法を解説しました。
- for文は、あるオブジェクトの中身を順番に取り出して処理するためのループ文である。
- while文は、条件式がTrueである限り、処理を繰り返すループ文である。
- for文とwhile文では、処理の回数やループの条件の表現方法が異なる。
- break文を使うと、ループを途中で中断することができる。
- continue文を使うと、ループの一部をスキップすることができる。
- enumerate関数を使うと、リストなどの要素に順番をつけて取り出すことができる。
- zip関数を使うと、複数のリストを同時に処理することができる。
- リスト内包表記を使うと、シンプルなコードでリストを生成することができる。
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi2_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi2_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi2_normal.png)
Pythonには、多くのループ文の種類があり、それぞれに特徴があるため、用途に合わせて使い分けることが大切ですね。
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
![](https://tech.mychma.com/wp-content/uploads/2022/05/hukidashi1_normal.png)
for文とwhile文は、プログラムを書く上で非常に重要な基礎的な要素です。これらを理解することで、Pythonで効率的なプログラムを書くことができるようになります。また、ループ処理はプログラムの中で頻繁に使用されるため、慣れておくことが大切です。是非、実際にコードを書きながら、ループ処理に慣れていってください。
コメント