【Python 入門】while 文の使い方を解説!else, break, continue も!

【Python 入門】while 文によるループ処理を解説!else, break, continue も!

こんにちは、機械学習講師の和泉です。

Python の中でも特に基本的な要素であり、繰り返しの処理を行うために使用する「while」文は、理解するのに最初は少し複雑かもしれません。そこで、この記事では、Python の「while」文の基本的な使い方から、「else」「break」「continue」を使った少し高度なテクニックまでを、わかりやすく解説します!

プログラミングに不慣れな方でも安心して読むことができるよう、具体的な例と共に解説していきます。

実行環境

ぜひ Google Colaboratory を立ち上げて手を動かしながら学んでください!
Google Colaboratory について詳しくは以下の記事で紹介しています。

Python の while 文とは

while 文は「ある条件のもとで」処理を繰り返すときに用いる制御構文です。繰り返しの構文なので for 文と似ていますが、条件を確認して True の時のみ処理を実行するところが特徴です。

while 文の基本的な書き方は下図のようになります。

python while 構文の図
出典:2.7.3. 繰り返し(while 文)|Chainer Tutorial

while 文は条件に当てはまっている間は処理を繰り返し、条件に当てはまらなくなった時に処理が止まります。

そのため、条件に当てはまり続けた場合は、無限に処理を繰り返します。この無限ループには、十分注意してください!

構文をまとめると、下記のようになります。

while 文の構文
while 条件式:
繰り返したい処理①
繰り返したい処理②

また Python の while 文では、以下 2 点を必ず押さえておきましょう!

  • 条件式の直後に :(コロン) を付けること
  • 処理を書く際は、インデントと呼ばれる半角スペースを入れること(字下げ)

補足

インデントは半角スペース 4 つが一般的です!
参考 はじめに — コードのレイアウト – インデントpep8-ja 1.0 ドキュメント

while 文のサンプルコード

例えば、5 までの数字を数える場合を考えてみましょう。
はじめは、0 からカウントを始め、5 未満の時は、1 ずつ数え続けます。

数える過程も表示して、どのような処理になるのか、以下のサンプルコードを見てみましょう。

while 文による出力
# count = 0 で初期化した状態から始める
count = 0

# count が 5 未満の時は、処理を続ける
while count < 5:
    count += 1
    print(count)
実行結果
1
2
3
4
5

このように、カウント 5 未満 (count < 5) という条件を満たしている間は処理を続けるようになっています。

カウントが5になる (count = 5) と、条件を満たさないので処理が止まります。

while 文の使い方

while 文を使う時によく使う else break continue についてご紹介します。

これらを使うことで柔軟にプログラムを実行できるのでぜひこちらも押さえておきましょう!

else 文の役割と使い方

elsewhile 文で全ての処理が実行された時に行われる処理です。
先ほどの例を使って見てみましょう。

else の使い方
# count = 0 で初期化した状態から始める
count = 0

# count が 5 未満の時は、処理を続ける
while count < 5:
  count += 1
  print(count)
  
# 処理が最後まで実行された後に実行される
else:
  print('ループ処理終了!')
実行結果
1
2
3
4
5
ループ処理終了!

このように繰り返し処理の最後にしたい処理を else で記述します。

break 文の役割と使い方

breakif 文と一緒に使います。 if 文の条件と一致していた場合に処理を中断させます。
例をご紹介します。

break の使い方
# count = 0 で初期化した状態から始める
count = 0

# count が 5 未満の時は、処理を続ける
while count < 5:
  count += 1
  
  # count が 3 のときに処理を中断する
  if count == 3:
    break
  print(count)
実行結果
1
2

このように条件に一致して以降の処理を中断したい時は break で記述します。

continue 文の役割と使い方

こちらは break と似ていますが、 continue の場合は処理を中断させずに次のループに進み処理を継続します。
if 文と一緒に使い、 if 文の条件と一致していた場合に現在のループの処理を中断し、次のループに進みます。
例をご紹介します。

continue の使い方
# count = 0 で初期化した状態から始める
count = 0

# count が 5 未満の時は、処理を続ける
while count < 5:
  count += 1
  
  # count が 3 のときに処理をスキップする
  if count == 3:
    continue

  # count が 3 のときにはこの下の print は実行されない
  print(count)
実行結果
1
2
4
5

このように特定の条件に一致した場合、今のループでの処理を中断して次のループに移る場合は continue で記述します。

複数条件を指定した while 文

複数条件の指定方法

Python の while 文では、一つだけでなく複数の条件を指定することが可能です。複数の条件を指定する場合、論理演算子「and」や「or」を使用します。

  • ‘and’ 演算子: すべての条件が真である場合に限り、全体の結果が真になります。
  • ‘or’ 演算子: 条件のいずれかが真であれば、全体の結果が真になります。

以下のように記述することで、複数の条件を設定することができます。

記述例
i = 0
j = 20
while i < 10 and j > 10:
    # do something
    i += 1
    j -= 1

上記の例では、iが10未満であり、かつjが10より大きい場合にループを続けます。

複数条件を持つ while 文のサンプルコードと解説

では、実際に複数条件を持つ while 文の例を見てみましょう。

複数条件を持つ while 文
i = 0
j = 20
while i < 10 and j > 10:
    print(f"i: {i}, j: {j}")
    i += 1
    j -= 1

このコードでは、i の値が 10 未満であり、同時に j の値が 10 より大きい間、ループ内の処理が続きます。ループ内では、まず変数 i と j の値を出力し、次に i の値を 1 増やし、jの値を 1 減らします。これにより、i が 10 に到達すると同時に j が 10 を下回るため、どちらの条件も偽となり、ループが終了します。

このように、複数の条件を指定することで、より複雑な繰り返し処理を実現することが可能になります。ただし、複数の条件を管理することは、一つの条件を管理するより複雑であるため、各条件がどのように動作するかを理解し、適切に管理することが重要です。

while 文を使う時は無限ループに注意

やってはいけない実装例

条件の設定で、1 つ注意です!
例えば、条件の設定を以下のようにすると、どうなるでしょうか?

危険な条件
count = 2
while count &gt; 1:
    print(count)
    count += 1

この場合、2 から数え始めて、カウントが 1 以上の場合は 1 を追加するという条件になっています。つまり、無限に処理が続き、ループ処理が止まりません。

こうなると、処理が終わらず、最悪の場合サーバーがダウンします。

そのため while 文を使う時は、条件の設定に十分な注意を払いましょう!

while 文と for 文との違い

while文とfor文は、プログラミングの中で「繰り返し」を表現するためのツールです。それぞれがどのように使われるかを簡単な例とともに見てみましょう。

while文は、「~が成り立つ限り、何かをずっと繰り返す」というような状況で使います。例えば、「ゲームでライフが0になるまでプレイを続ける」というケースです。Pythonでは、こんな風に書きます。

while 文
life = 10
while life > 0:
    print("ゲームを続ける")
    life = life - 1  # ライフを1減らす

これは、「ライフが0より大きい限り、”ゲームを続ける”と表示し、ライフを1ずつ減らす」という繰り返しの動作を表現しています。

一方、for文は、「リストに入っている全ての要素に対して何かをする」という状況で使います。例えば、「友達のリストがあって、全員に挨拶をする」というケースです。Pythonでは、こんな風に書きます。

for 文
friends = ["Alice", "Bob", "Charlie"]
for friend in friends:
    print("Hello, " + friend + "!")

これは、「friendsリストの各友達(Alice, Bob, Charlie)に対して、”Hello, [友達の名前]!”と表示する」という動作を表現しています。

このように、while文とfor文はそれぞれ異なる種類の「繰り返し」を表現するためのツールと言えます。

while 文で金額自動表示プログラムを作ってみよう!

例えばお店でお客さんが支払った金額のリストがあったとします。

支払金額を格納したリスト
[1100, 3980, 0, 2200, 6600]

これらを while 文を使って「支払った金額は〇〇円です。」と表示します。
ただし、この数字が 0 の時には処理をスキップしたいというプログラムを考えます。
その場合は以下のように書けます。

0 をスキップして繰り返し表示する
# 金額のリスト
price = [1100, 3980, 0, 2200, 6600]

# リストの長さを取得する(今回は 5 が入る)
price_length = len(price)

# 繰り返し処理のインデックスを定義する
index = 0

# 現在のインデックスがリストの長さの数値より小さければ処理を継続
while index < price_length:
  # price[0] であれば 1100, price[1] であれば 3980 が入る
  current_price = price[index]

  # もし current_price が 0 だった場合はインデックス +1 して次のループに進む  
  if current_price == 0:
    index += 1
    continue

  # current_price を文字列に変換して表示
  print('支払いは' + str(current_price) + '円です。' )

  index += 1
実行結果
支払いは1100円です。
支払いは3980円です。
支払いは2200円です。
支払いは6600円です。

0 をスキップして処理を行うことができました。

では例えば以下の条件の処理を作るにはどうすればいいでしょうか?

  • 金額のリストの中に数字ではなく文字が入っていた場合、「文字が入っていたので処理を中断しました。」と表示する
  • 最後まで処理が完了したら「処理が完了しました。」と表示する

その場合は以下のように記述します。

文字列が入った時は中断
# 金額のリスト
price = [1100, 3980, 0, '2200', 6600]

# リストの長さを取得する(今回は 5 が入る)
price_length = len(price)

# 繰り返し処理のインデックスを定義する
index = 0

# 現在のインデックスがリストの長さの数値より小さければ処理を継続
while index < price_length:

  current_price = price[index]

  # current_price に文字列が入っていた場合は処理を中断する
  if type(current_price) == str:
    print('文字が入っていたので処理を中断しました。')
    break

  # もし current_price が 0 だった場合はインデックス +1 して次のループに進む  
  if current_price == 0:
    index += 1
    continue

  # current_price を文字列に変換して表示
  print('支払いは' + str(current_price) + '円です。' )

  index += 1

else:
  print('処理が完了しました。')
実行結果
支払いは1100円です。
支払いは3980円です。
文字が入っていたので処理を中断しました。

また最後まで処理が完了したときにメッセージが表示されることを確認します。

文字列が入った時は中断
# 金額のリスト
price = [1100, 3980, 0, 2200, 6600]

# リストの長さを取得する(今回は 1 が入る)
price_length = len(price)

# 繰り返し処理のインデックスを定義する
index = 0

# 現在のインデックスがリストの長さの数値より小さければ処理を継続
while index < price_length:

  current_price = price[index]

  # もしリストに 1 つしか数字が入っておらず、かつその数字が 0 だった場合
  if type(current_price) == str:
    print('文字が入っていたので処理を中断しました。')
    break

  # もし current_price が 0 だった場合はインデックス +1 して次のループに進む  
  if current_price == 0:
    index += 1
    continue

  # current_price を文字列に変換して表示
  print('支払いは' + str(current_price) + '円です。' )

  index += 1

else:
  print('処理が完了しました。')
実行結果
支払いは1100円です。
支払いは3980円です。
支払いは2200円です。
支払いは6600円です。
処理が完了しました。

まとめ

本記事では、while 文の基本的な仕組みと使い方について解説しました。以下、まとめになります。

  • while 文は設定した条件を満たすまで、処理を繰り返す構文
  • 条件の設定を誤ると、無限ループになるので注意
  • else break continue を使って柔軟に条件づけできる

このように、条件を設けて繰り返しの処理をしたいような特殊な場合は、 while 文を使いましょう。

それ以外の基本的な繰り返しの処理は、for 文でも十分対応できます。

for 文については、以下の記事を参考にしてみてください!

もし、動画で while 文の内容を学習したい!という方は、元副社長の動画がおすすめです。


https://www.youtube.com/watch?v=nE5DTxksjHw

また、Python の特訓動画もあります。Python 勉強中の方は、ぜひチャレンジしてみてください!


https://www.youtube.com/embed/Hd35Zq0efM8

以上、while 文の基礎的な使い方でした。この記事が皆様の楽しい Python ライフの一助になれば嬉しいです!

こちらの記事もオススメ

まずは無料で学びたい方・最速で学びたい方へ

まずは無料で学びたい方: Python&機械学習入門コースがおすすめ

Python&機械学習入門コース

AI・機械学習を学び始めるならまずはここから!経産省の Web サイトでも紹介されているわかりやすいと評判の Python&機械学習入門コースが無料で受けられます!
さらにステップアップした脱ブラックボックスコースや、IT パスポートをはじめとした資格取得を目指すコースもなんと無料です!

無料で学ぶ

最速で学びたい方:キカガクの長期コースがおすすめ

一生学び放題

続々と転職・キャリアアップに成功中!受講生ファーストのサポートが人気のポイントです!

AI・機械学習・データサイエンスといえばキカガク!
非常に需要が高まっている最先端スキルを「今のうちに」習得しませんか?

無料説明会を週 2 開催しています。毎月受講生の定員がございますので確認はお早めに!

説明会ではこんなことをお話します!
  • 国も企業も育成に力を入れている先端 IT 人材とは
  • キカガクの研修実績
  • 長期コースでの学び方、できるようになること
  • 料金・給付金について
  • 質疑応答

参考リンク

参考 Chainer チュートリアル