Python while文を使った反復の書き方【回数未定の反復】

Python
この記事は約9分で読めます。

こんにちは、ナナです。

「for文」に引き続き「while文」を学んでいきましょう。

「while文」を使った反復の特徴は、反復したい回数が決まっておらず、「この状態になるまで繰り返し続けたい」といったシーンで使います。

本記事では次の疑問点を解消する内容となっています。

本記事で学習できること
  • while文の書き方と使い方とは?
  • while文での「break」と「continue」の使い方とは?
  • while文を使った無限ループの書き方とは?
  • C言語技術者が知るべきPythonとの違いとは?

では、while文を使った「反復」の使い方を学んでいきましょう。

スポンサーリンク

Pythonによる反復:while文の書き方

はい、はーい。「for文」に続いてやってまいりましたっ、今度は「while文」の『反復』ですね!

引き続き僕が担当しますよー。

ナナ
ナナ

それじゃあ、「for文」との違いを意識しながら「while文」の反復処理を学んでいこうね。

皆さんが生活をしていく中で「●●まで、〇〇をしよう」といったことはよくあるシーンです。

回数なしの反復

「●●が▲▲になるまで■■をする」のように、特に回数を決めているわけではなく、『とある状態になるまで実施する』というシーンですね。

このようなときに使うのが「while文」による反復です。

while文の書き方と使い方

Pythonにおいて回数指定の反復は「while文」という構文を使って表現します。プログラムでは次のように記述します。

Pythonのwhile文の書き方

 while 反復条件:
   繰り返す処理

「反復条件」の場所には、反復を繰り返したいときに「真」となる条件を書きます。

for文と比べると非常にシンプルな作りになっています。

具体的な書き方をプログラムで示しましょう。2つの変数「num1」「num2」に設定した数で、共に割り切れる数を1から順に10個見つけるプログラムです。

num1 = 3    # チェックする数その1
num2 = 5    # チェックする数その2

count = 1   # チェックするカウンタ
hit = 0     # 見つけた数

# 10個見つかるまで反復
while hit < 10:

    # 2つの数で割り切れる数かを調べる
    if count % num1 == 0 and count % num2 == 0:
        hit += 1        # 見つけた数を数える
        print(count)    # 数を画面に表示

    count += 1          # 次の数へ
15
30
45
60
75
90
105
120
135
150
数を選び出す

このように、どこまで数えれば10個に到達するかわからない時に使うのがwhile文です。

スポンサーリンク

while文でも使われる「break」と「continue」

ほい、ほーい。while文は反復の仲間ですから、for文と同じように「break」や「continue」が使えると思っていいのですかー?

ナナ
ナナ

いいよ。反復処理においては、この2つは必ず求められるニーズがあるから、Pythonでもちゃんとサポートしていますよ。

while文でも「break」と「continue」は使用できます。使い方を覚えましょう。

while文で使う「break」のプログラム

それではwhile文でbreakを使った例を示しましょう。先ほどのプログラムで検索範囲を数の上限を100までとしましょう。

num1 = 3    # チェックする数その1
num2 = 5    # チェックする数その2

count = 1   # チェックするカウンタ
hit = 0     # 見つけた数

# 10個見つかるまで反復
while hit < 10:

    # もし100まで到達したら検索終了
    if count >= 100:
        break

    # 2つの数で割り切れる数かを調べる
    if count % num1 == 0 and count % num2 == 0:
        hit += 1        # 見つけた数を数える
        print(count)    # 数を画面に表示

    count += 1          # 次の数へ
15
30
45
60
75
90

カウンタが100まで到達した段階で、breakによって反復処理を強制終了しています。

ナナ
ナナ

検索した結果が100未満になっていますね。

while文で使う「continue」のプログラム

続いて「continue」も使ってみましょう。検索結果で偶数の数値は省くものとします。

num1 = 3    # チェックする数その1
num2 = 5    # チェックする数その2

count = 1   # チェックするカウンタ
hit = 0     # 見つけた数

# 10個見つかるまで反復
while hit < 10:

    # もし100まで到達したら検索終了
    if count >= 100:
        break

    # 偶数の場合は対象外とする
    if count % 2 == 0:
        count += 1
        continue

    # 2つの数で割り切れる数かを調べる
    if count % num1 == 0 and count % num2 == 0:
        hit += 1        # 見つけた数を数える
        print(count)    # 数を画面に表示

    count += 1          # 次の数へ
15
45
75

continueを使って強制的に次のループへ移行しています。

注意するのが、continueする際に「count」変数を+1しておかないと「count」変数の値が変わらず、ループが終わらなくなることです。

そのようなループを「無限ループ」と呼びます。意図しない無限ループは不具合になるため注意しましょう。

ナナ
ナナ

検索結果の数値が全て奇数になりましたね。

スポンサーリンク

Q&A:Pythonのwhile文の反復に関するよくある質問

ナナ
ナナ

「while文」に関する質問がある人いますかー!

Q:C言語にあったdo-while文ってPythonでも使える?

質問、はいはーい!C言語では「do-while文」ってありますよね。もちろん、Pythonでも使えるに決まってますよねー。

ナナ
ナナ

Pythonではね、「do-while文」は存在しないんだよ。まぁC言語でもそれほど活用することは少ないから、そんなに困らないでしょ。

C言語といった他の言語では「do-while文」と呼ばれる、反復条件を最後にチェックするタイプの反復処理をサポートしていることがあります。

Pythonではwhile文しかサポートしていません。

ナナ
ナナ

Pythonは極力、言語仕様をシンプルにするように設計されていそうですね。いらなさそうと判断したものは容赦なく切り捨てています。

Q:Pythonで無限ループは作れるの?

ループを永遠に実施する「無限ループ」!ずっと僕のターンってことですよ。Pythonでもできるんですよね?

ナナ
ナナ

そうだね。Pythonでの反復は「for文」と「while文」の2択だからね。この2つの特徴から無限ループをするときは「while文」を使うのが一般的だろうね。

ときには意図的にループを永遠に繰り返す「無限ループ」が必要になることもあるでしょう。Pythonではwhile文で対応するのが文法的には自然です。

次のように、while文の条件式を常に「True」にすることで無限ループを作ることができます。

while True:
    print("Hello")

ただし、「無限ループ」は意図したものは良いですが、意図しない場合は大きな不具合になるため扱いにはくれぐれも注意しましょう。

ナナ
ナナ

ループの終了条件に関しては、常に気を配る必要があります。意図しない無限ループは作ってはなりません。

スポンサーリンク

課題:while文による反復の使い方が学べたかを確認しよう

ナナ
ナナ

もしも、プログラムが上手く動かなくて困ったときは、答えを見るのではなく「デバッガ」の使い方を学びましょう。

この記事を見ると問題の解決技術が身に付きます。困ったときのオススメ記事です!

課題1:while文の反復で数を表示

課題内容

  • 変数「num」を作成し、while文を使った反復処理にて「1」~「10」の数字を表示せよ。
  • 表示内容は出力期待結果に従い出力すること。

出力期待結果

1
2
3
4
5
6
7
8
9
10


num = 1

while num <= 10:
    print(num)
    num += 1
ナナ
ナナ

このようにwhile文を使っても、for文のようなループを作ることもできます。

課題2:while文の反復で数を表示

課題内容

  • 変数「num1」「num2」「num3」を作成し、適当な異なる数で初期化しておく
  • while文を使って「1」から順に「num1~3」の3つ全ての数で割り切れる数を最大10個表示せよ。
  • ただし、1000まで調べた時点で終了するものとする。
  • 表示内容は出力期待結果に従い出力すること。

出力期待結果

「num1 = 3」「num2 = 7」「num3 = 11」で初期化した場合の結果

231
462
693
924


# 3つの数
num1 = 3
num2 = 7
num3 = 11

count = 1   # カウントする数
hit = 0     # 見つけた数

while hit < 10:
    # 1000まで調べ終わったら終了
    if count > 1000:
        break

    # 割り切れる数を探す
    if count % num1 == 0 and count % num2 == 0 and count % num3 == 0:
        print(count)
        hit += 1

    count += 1
ナナ
ナナ

本記事のプログラムを改良したものですね。じっくりと自分で作って理解するとよいでしょう。

スポンサーリンク

C言語技術者が知るべきPython言語との違い:「while文」

ナナ
ナナ

すでにC言語を習得している人は、次のポイントに気を付けよう!

C言語技術者が知るべきPythonの特徴
  • while文の扱い方はC言語と同じ
  • 「break」「continue」はC言語でもPythonでも使える
  • C言語にあるdo-while文は、Pythonでは存在しない

while文に関してはC言語と同じ感覚で利用することができます。それほど注意すべきことはないでしょう。