コンテンツ

Python速習ガイド - ステップ2 制御フロー (4) - ループ (2): while文

Info
  • 本講座は、Pythonプログラミングの基礎を手を動かしながら最速で身につけるための講座です。
  • 「スタイルガイド」では、Pythonできれいなコードを書くためのガイドライン(PEP8)で紹介されている内容を主に記載しています。
  • 各コードは実行して結果を確認することができます。
    ページの再読み込みで元の内容に戻りますので、自由にいじってみてください。

「ステップ2 制御フロー」の続きです。

前回はfor文によるループについて学習しました。今回は、もうひとつのループ構文であるwhile文について学んでいきます。

while文は、指定した条件がTrueである限り、繰り返し処理を実行するループ構文です。

while 文
while 条件式: ループ処理
  • while文では、条件式がTrueである限り、ループ内の処理が繰り返し実行されます
  • 条件式がFalseと評価されると、ループは終了し、次の処理に進みます
flowchart TD
    START[開始] --> INIT["counter = 5"]
    INIT --> WHILE{"while counter > 0"}
    WHILE -->|False| END["ループ終了"]
    WHILE -->|True| LOOP_BODY["ループ処理\n(... counter -= 1)"]
    LOOP_BODY --> WHILE

linkStyle 2 stroke:red,stroke-width:2px;
linkStyle 3 stroke:green,stroke-width:2px;
📚練習問題1

1から10までカウントアップするプログラムをwhile文を用いて作成しましょう。

解答例
📚練習問題2

指定した整数を2で割り続けて奇数になったときの数値を出力しましょう。

解答例
📚練習問題3

整数を1から順に足していき合計が1000を超えたときの、最後に足した整数と合計値を表示しましょう。

解答例

for文と同様に、while文でもbreakcontinueを使うことができます。

break文を使うと、条件に関わらずループを即座に抜け出すことができます。

上記の例では、numberが5になった時点でbreak文が実行され、ループを抜けます。そのため、6以降の数は処理されません。

条件が常にTrueとなるループを無限ループといいます。無限ループはbreak文と組み合わせて使うことがあります。

  • while Trueは条件が常にTrueとなるため、break文で明示的に抜け出さない限り永遠に実行され続けます
  • カウンタの更新忘れなど、意図しない無限ループには気をつけましょう
input関数

input関数を使用すると、ユーザからの入力を文字列として受け取り、変数に代入して利用できます。

本環境では、input 関数を実行するとブラウザのダイアログが表示されますが、通常の Python スクリプト(たとえば .py ファイルをPC上で実行する場合)では、ターミナル上で入力を受け付ける形式になります。
スクリプトとしてプログラムを実行する方法については、後ほど詳しく解説します。

📚練習問題

input関数を使用してユーザの好きな野菜を繰り返し聞き、「exit」という文字列が入力されるまで、
「ユーザの好きな野菜: <好きな野菜>」のフォーマットで常に画面出力するプログラムを作成しましょう。

解答例

continue文を使うと、現在の繰り返し処理の残りをスキップして、次の条件判定に進むことができます。

この例では、numberが偶数の場合はcontinue文によって残りの処理(print(f"処理中: {number}"))がスキップされ、次のループの条件判定に進みます。

📚練習問題

1から20までの数の中で、3の倍数または5の倍数のみを出力するプログラムをwhile文とcontinue文を使って作成しましょう。

解答例

ループをネスト(入れ子)にした場合、breakcontinuefor文の場合と同様に、それらを含む最も内側のループにのみ作用します。

上記の例では、内側のループでのbreakは内側のループのみを抜け、外側のループは引き続き実行されます。

for文と同様に、while文にもelse節を追加することができます。
elseブロックは、ループが正常に終了した場合(breakで中断されなかった場合)に実行されます。

上記例では、偶数が見つかるとすぐにbreak文でループを抜けるため、elseブロックは実行されません。 偶数が見つからないでループが正常終了した場合のみ、elseブロックが実行されます。

for文とwhile文の使い分けとしては、よりシンプルに書ける方を採用しましょう。

forループが適しているケース:

  • 回数が決まっている反復処理
  • イテラブル(リスト、タプル、文字列など)の各要素に対する処理
  • range()関数で表現できる、一定の範囲での繰り返し

whileループが適しているケース:

  • 終了条件が動的に変化する場合
  • 無限ループが必要で、特定の条件でのみ終了する場合
  • 処理回数が事前にわからない場合
まとめ
  • while文は条件がTrueである限り、繰り返し処理を実行する
  • for文は回数が決まっているループに、while文は条件が決まっているループに適している
  • break文でループの中断、continue文でループのスキップができる
  • else節を使うと、ループが正常終了した場合(breakで中断されなかった場合)の処理を記述できる
  • 無限ループに注意し、必ず終了条件を設けるようにする
  • カウンタ変数を使う場合は、初期化と更新を忘れないようにする
📚総合練習問題: 数当てゲーム

1~100のランダムな数を当てるゲームを作成しましょう。

  1. プログラムが1~100のランダムな数を1つ選びます
    (randomモジュールを使用しますが、解説がまだのため、あらかじめ実装済みです)
  2. ユーザの予想する数値を繰り返し受け取ります
  3. 予想値に対し、「もっと大きいです」または「もっと小さいです」といったメッセージを表示します
    (ヒント: 入力された文字列を数値に変換して処理を行います)
  4. ユーザの予想した数値が正しい場合、「正解です!」と表示してゲームを終了します
  5. ユーザが「exit」を入力した場合、ゲームを終了します
解答例

関連記事