Pythonには反復処理(繰り返し)を行うための方法がいくつかありますが、そのときによく使われる「for文」と「while文」について「どちらを使えばイイの?」と迷うことがあります。
特に初心者のときは「どっちも同じでしょ?」なんて思ったりしませんか?
この記事では、Pythonのfor文とwhile文の使い分けについて基本的なガイドを紹介します。
具体的なコード例を交えながら、それぞれの文の使い方と使い分けのポイントを解説します。
for文の使い方
for文の基本的な使い方
Pythonのfor文は、シーケンスデータの反復処理に適しています。
以下のコード例は、リストの反復処理のサンプルです。
# リスト内の要素を表示する
fruits = ['apple', 'banana', 'orange']
for fruit in fruits:
print(fruit)
apple
banana
orange
上記のコードでは、fruits
というリストを定義し、for文を使用してリスト内の要素を順番に取り出し、fruit
変数に代入しています。
その後、print()
関数を使ってfruit
を表示しています。
これにより、リスト内の要素が順番に表示されます。
また、タプルでも同じように反復処理ができます。
point = (2, 5)
for coordinate in point:
print(coordinate)
2
5
上記のコードでは、point
というタプルを定義し、for文を使用してタプル内の要素を順番に取り出し、coordinate
変数に代入しています。
そして、print()
関数を使ってcoordinate
を表示しています。
これにより、タプル内の要素が順番に表示されます。
また、文字列の反復処理も同じようにできます。
message = "Hello, World!"
for char in message:
print(char)
H
e
l
l
o
,
W
o
r
l
d
!
上記のコードでは、message
という文字列を定義し、for文を使用して文字列内の文字を順番に取り出し、char
変数に代入しています。
そして、print()
関数を使ってchar
を表示しています。
これにより、文字列内の文字が順番に表示されます。
range()関数を使用した反復処理
「同じ処理を○回繰り返す」のような反復処理には、range関数と組み合わせる方法があります。
for i in range(1, 6):
print(i)
1
2
3
4
5
上記のコードでは、range()
関数を使用して「1から5」までの範囲の数値を生成し、for文を使って数値を順番に取り出しています。
そして、print()
関数を使って数値を表示しています。
これにより、1から5までの数値が順番に表示されます。
また、繰り返す回数を指定する際もrange()関数が便利です。
for i in range(5):
print(i)
0
1
2
3
4
上記との違いは、変数i に使われる値が「0~4」になることです。
これにより、0から4までの数値が順番に表示されます。
これらの例は、for文を使用してシーケンスデータを反復処理する一般的な方法を示しています。
リストやタプル、文字列、またはrange()
関数を使った数値の範囲など、さまざまなシーケンスデータを効果的に処理することができます。
for文でbreakやcontinueを使用した例
break文とcontinue文を使用することで、for文の実行を中断したり、一部の要素をスキップしたりすることができます。
上手く使うことで、特定の条件下で処理を制御する際に役立ちます。
ここでは、それぞれの例を示します。
break文
fruits = ['apple', 'banana', 'orange', 'grape', 'kiwi']
for fruit in fruits:
if fruit == 'orange':
break
print(fruit)
このコードでは、fruits
というリストを定義し、for文を使用してリスト内の要素を順番に取り出しています。
しかし、もしfruit
が’orange’と等しい場合には、break文が実行されてループが終了します。
そのため、’orange’より前の要素のみが表示されます。
apple
banana
以上が、Pythonのfor文でbreak文を使用した使用例です。
continue文
fruits = ['apple', 'banana', 'orange', 'grape', 'kiwi']
for fruit in fruits:
if fruit == 'orange':
continue
print(fruit)
このコードでは、先ほどのbreak文の例と同じようにfruits
というリストを定義し、for文を使用してリスト内の要素を順番に取り出しています。
ただし、もしorange
が見つかった場合、continue文が実行されて「そのループだけ」がスキップされます。
したがって、orangeは飛ばされて他の4つの要素が取り出され出力されます。
apple
banana
grape
kiwi
以上が、Pythonのfor文でcontinue文を使用した使用例です。
注意点として、break文やcontinue文は制御フローを飛び越えるため、適切に使わないと予期しない結果をもたらすことがあります。
そのため、使用する際は十分注意しましょう。
なお、多重ループにおけるbreakとcontinueの使い方についてこちらの記事で詳しく解説しています。
while文の使い方
while文の基本的な使い方
Pythonのwhile文は、特定の条件が満たされている間繰り返し処理を行います。
以下のコードは、特定の条件が満たされている間にループを続ける例を示しています。
# 特定の条件を満たすまでループする
count = 0
while count < 5:
print("Count:", count)
count += 1
上記のコードでは、count
変数が5未満の間、ループが続きます。
ループ内では、現在のcount
の値を表示し、count
を1ずつ増やしています。
Count: 0
Count: 1
Count: 2
Count: 3
Count: 4
ループ変数の更新や条件の設定についての注意点
while文では、ループ変数の更新を適切に行う必要があります。
ループ変数が更新されない場合、無限ループに陥る可能性があります。
ループ変数の更新を忘れずに行うことで、適切な反復処理を実現します。
count = 0
while count < 5:
print("Count:", count)
count += 1 # ループ変数の更新が適切に行われている
上記の例では、count
変数を1ずつ増やしています。
これにより、ループが進行し、終了条件が達成されるまで処理が繰り返されます。
Count: 0
Count: 1
Count: 2
Count: 3
Count: 4
このとき、ループ変数の更新を忘れてしまうと、無限ループになってしまうので注意しましょう。
count = 0
while count < 5:
print("Count:", count)
# ループ変数の更新がないと、永遠に実行し続ける
くれぐれも実行はしないでください。
プログラムが止まらなくなります。
Count: 0
Count: 0
Count: 0
Count: 0
・
・
・
また、while文の条件を正確に設定することも重要です。
条件が常にTrueとなる場合、無限ループに陥ります。
条件を適切に設定して、ループが終了する条件を明確にする必要があります。
num = 10
while num > 0:
print("Number:", num)
num -= 1
print("ループ終了")
上記の例では、num
変数が正の整数である限りループが続きます。
num
変数が0以下になると、ループが終了し、”ループ終了”と表示されます。
Number: 10
Number: 9
Number: 8
Number: 7
Number: 6
Number: 5
Number: 4
Number: 3
Number: 2
Number: 1
ループ終了
このように、ループ変数の更新や条件の設定に不備があると、無限ループや意図しない結果が生じる可能性があります。
十分なテストとデバッグを行い、条件の適切な設定とループ変数の更新を確認することが重要です。
また、ループ変数の更新や条件の設定には、ループ内でのプログラムの状態や外部の要素に依存する場合もあります。
適切な変数の初期化や制御フローの考慮も重要です。
while文でbreakやcontinueを使用した例
for文と同様に、while文でもbreak文とcontinue文を使用することができます。
それぞれの例を示します。
break文
count = 0
while count < 5:
print("Count:", count)
count += 1
if count == 3:
break
上記のコードでは、count
変数を0から始めて1ずつ増やしていきます。
しかし、もしcount
が3になった場合には、break文が実行されてループが終了します。
そのため、ループは3回までしか繰り返されず、以下の出力が得られます:
Count: 0
Count: 1
Count: 2
以上が、Pythonのwhile文でbreak文を使用した使用例です。
continue文
count = 0
while count < 5:
count += 1
if count == 3:
continue
print("Count:", count)
上記のコードでは、count
変数を1から始めて1ずつ増やしていきます。
ただし、もしcount
が3になった場合には、continue文が実行されてループの残りの処理がスキップされます。
そのため、count
が3のときのみ出力がスキップされます。以下の出力が得られます:
Count: 1
Count: 2
Count: 4
Count: 5
以上が、Pythonのwhile文でcontinue文を使用した使用例です。
for文とwhile文の使い分けの基準
それぞれの特徴を踏まえて使い分ける基準を表すとしたら、
- for文はシーケンスデータの反復に適しており、明確な反復回数がわかる場合に使う
- while文は特定の条件が満たされている間繰り返し処理を行う場合に使う
といえます。
もう少し簡単に表現すると、
- for文は指定された回数を繰り返すと終了する
- while文は条件を満たさなくなったら終了する
という使い方が適切です。
for文とwhile文の比較コード
実際に、それぞれの文を使用したコードを比較してみましょう。
for文の例: リスト内の数値の合計を計算する
下記のコードでは、for文を使用してリスト内の数値の合計を計算しています。
numbers
リスト内の各要素を順番に取り出し、total
変数に加算していくことで合計を求めます。
numbers = [1, 2, 3, 4, 5]
total = 0
for num in numbers:
total += num
print("合計:", total)
合計: 15
ちなみに、これと同じことをwhile文でやろうとすると以下のようになります。
numbers = [1, 2, 3, 4, 5]
total = 0
count = 0
while count < len(numbers):
total += numbers[count]
count += 1
print("合計:", total)
繰り返しの回数を管理するため、カウンター変数(count)を用意しています。
やっていることはそれほど難しくありませんが、面倒なことをしています。
合計: 15
やはり、リストから繰り返し取り出す処理はfor文が良いと分かります。
while文の例: 特定の条件を満たすまでユーザーに数値の入力を促す
下記のコードでは、while文内でinputメソッドを使いユーザーに数値を入力してもらいます。
条件式num < 10
が満たされる限り、ユーザーに数値の入力を求め続けます。
条件が満たされた時点でループを終了し、入力された数値を表示します。
num = 0
while num < 10:
num = int(input("10以上の数値を入力してください: "))
print("入力された数値:", num)
10以上の数値を入力してください: 2
10以上の数値を入力してください: 6
10以上の数値を入力してください: 8
10以上の数値を入力してください: 15
入力された数値: 15
このような「条件を満たしている間は繰り返す」という処理は、for文では実現できません。
for文でできることはwhile文でもできるけど、while文でできることはfor文でできないことがあります。
両者の特徴のまとめ
最後に、これまでの例から分かる両者の特徴をまとめます。
for文
- シーケンスデータ(リストやタプル等)の反復処理にはfor文が適している
- for文は反復回数が明確なため、処理の予測や最適化がしやすい
while文
- 特定の条件に基づいた反復が必要な場合にはwhile文が適している
- while文は条件式が満たされている間、繰り返し処理を行う
- また、条件が事前にはわからない場合や、動的な制御フローが必要な場合にも最適
for文を使った九九表の作成
今回紹介したfor文を使った九九表の作成について、
こちらの記事で紹介しています。
for文について理解を深めたいという方はぜひご覧ください。
まとめ
今回はPythonの繰り返し「for文」と「while文」それぞれの使い方と使い分けのポイントをコード例と合わせて解説しました。
Pythonのfor文とwhile文は、反復処理を実行するための強力なツールです。
for文はシーケンスデータの反復に適しており、明確な反復回数がわかる場合に使われます。
一方、while文は特定の条件が満たされている間繰り返し処理を行う場合に適しています。
コードを書く際には、問題の要件や制御フローに応じて適切な文を選択しましょう。
今後もPythonを中心としたプログラミングの情報をお届けします。
以下のメルマガにご登録頂くと、不定期に配信をお届けします。
ぜひ購読してください!
それでは、ステキなPythonライフを!
Pythonについて詳しく知りたいという方は、こちらの書籍もおススメです。