PR

【Python】while文の使い方とコツを3分でわかりやすく解説

Python

Pythonのwhile文は指定した条件が真である限り繰り返し実行するための制御構造です。

while 条件式:
    # 条件式が真の間、ここに書かれたコードが実行される

このページではPython初心者向けに、そもそも繰り返し処理とは何か?while文の基本的な構文から、陥りがちな無限ループの罠まで網羅的に解説します。

参考 Pythonとは?(特徴とできること)

このページで学べる内容
  • 【前提】繰り返し処理とは?
  • while文の使い方
  • while文を利用する際の注意点

Pythonエンジニアを目指す方であれば知らないと恥ずかしい超・基本知識の1つです。是非最後までご覧ください。

参考 Pythonの基本的な書き方・構文ルール

スポンサーリンク

前提:繰り返し処理とは?

「繰り返し実行」とは、特定のプログラムのコードブロック(つまり、命令の集まり)を何度も実行することを指します。この概念はプログラミングの基本的な要素の1つで、特定のタスクを指定した回数だけ、または特定の条件が満たされるまで実行するために使用されます。

繰り返し実行は主に2つの形式で現れます:「カウント制御ループ」と「条件制御ループ」です。

カウント制御ループ→for

カウント制御ループは「指定された回数だけ何かを行う」というタスクに対応します。

例えば、「5回"こんにちは"と言ってください」と言われた場合、それを実行するには、"こんにちは"と言う行為を5回繰り返す必要があります。

Pythonのfor文を使ったプログラムでは、以下のように表現します。

for i in range(5):
    print("こんにちは")

このコードでは、"こんにちは"という文字列を5回表示します。range(5)は0から4までの数値を生成するので、for文はこの5回分の数字(つまり5回)を使ってループ(繰り返し)を作ります。

参考 Python:for文 / print関数の使い方

条件制御ループ→while

条件制御ループは、「特定の条件が満たされるまで何かを行う」というタスクに対応します。

このページで学ぶwhile文はこちらの「条件制御ループ」に該当します。

例えば、「お腹が空くまでリンゴを食べ続けてください」と言われた場合、お腹が空くという条件が満たされるまでリンゴを食べ続ける必要があります。

stomach = 0  # お腹の状態を0とする(0は空腹を、10は満腹を表すとします)

while stomach < 10:  # お腹がまだ満腹でない場合
    print("リンゴを食べる")
    stomach += 1  # リンゴを1個食べるとお腹の状態を1だけ増やす

このコードでは、お腹が満腹になるまで(つまりstomachが10になるまで)"リンゴを食べる"と表示し続けます。

これらのループは、特定のタスクを指定した回数だけ実行するか、特定の条件が満たされるまで続けるかといった繰り返しの操作をコード化するための非常に重要なツールです。

for文とwhile文の使い分けを押さえたうえで、本題のwhile文の解説に移ります。

Python:while文の使い方

while文はプログラムの一部を指定した条件が真である限り繰り返し実行するための制御構造です

ある特定の条件が「真:true」の場合に指定した処理を繰り返します。

while文の基本的な構文は以下の通り。

while 条件式:
    # 条件式が真の間、ここに書かれたコードが実行される

このループは条件式が偽と評価されるまで無限に続きます。

whileの処理内容と意味を理解できるようにいくつかサンプルコードを記載しておきます。

サンプル ユーザーからの入力を受け付ける

以下の例では、ユーザーからの入力を受け付けてその内容を表示し、特定の文字列(ここでは"quit")が入力されるまで続けるプログラムを作ります。

# 入力待ちのメッセージを表示する
message = input("何かを入力してください('quit'で終了): ")

# 入力されたメッセージが'quit'でない限りループを続ける
while message != 'quit':
    # 入力されたメッセージを表示する
    print("あなたが入力したメッセージ: " + message)
    # 再度、入力待ちのメッセージを表示する
    message = input("何かを入力してください('quit'で終了): ")

# 'quit'が入力されたため、プログラムを終了するメッセージを表示する
print("プログラムを終了します")

# 例えばユーザーが「hello」「world」最後に「quit」と入力した場合出力は次のようになります。
# あなたが入力したメッセージ: hello
# あなたが入力したメッセージ: world
# プログラムを終了します

参考 Python:変数の使い方

サンプル リストの要素を一つずつ処理する

以下の例では、リストの要素を一つずつ表示していき、リストが空になるまで処理を続けるプログラムを作ります。

# 処理するリストを作成
items = ['apple', 'banana', 'orange', 'peach']

# リストが空になるまでループを続ける
while items:
    # リストから一つ要素を取り出す(pop()はリストの最後の要素を取り出す関数)
    item = items.pop()
    # 取り出した要素を表示する
    print("処理中の要素: " + item)

# リストが空になったので、全ての要素を処理した旨のメッセージを表示する
print("全ての要素を処理しました")

# このコードの出力は以下のようになります
# 処理中の要素: peach
# 処理中の要素: orange
# 処理中の要素: banana
# 処理中の要素: apple
# 全ての要素を処理しました

参考 リストとは?(Pythonのデータ構造)

while文は条件が満たされている間は何度でも同じ処理を繰り返すことができるため、一定の条件下で処理をループさせたい場合に非常に有用な構文であることが分かります。

概要を把握したところでwhile文の利点を整理しておきましょう。

Python:while文の利点①:条件が満たされるまでの繰り返し

while文は指定した条件が満たされている限り、コードを何度でも繰り返し実行できます。これは、特定の条件が満たされるまで処理を続ける必要がある場合に非常に便利です。

例えば、ユーザーが正しいパスワードを入力するまでプロンプトを繰り返し表示するコードは以下のようになります。

correct_password = 'python123'
password = input('パスワードを入力してください:')

while password != correct_password:
    print('パスワードが間違っています。')
    password = input('もう一度、パスワードを入力してください:')

print('パスワードが正しく認証されました!')

Python:while文の利点②:不確定な繰り返し回数

while文は、繰り返しを行う回数が事前に不確定である、または動的に変化する場合にも適しています。

例えば、リストの要素がなくなるまで操作を行い続ける場合には、以下のようなコードを書くことができます。

items = ['apple', 'banana', 'orange']

while items:
    item = items.pop()
    print("現在のアイテム:" + item)

print('全てのアイテムが処理されました。')

Python:while文の利点③:コードの読みやすさ

while文を使うと、コードの意図が直感的に理解しやすくなることがあります。ループが「特定の条件が満たされている間、繰り返し実行される」という動作を明示的に示しているからです。

上記の2つ例で説明すると、パスワードが正しく入力されるまでユーザーに入力を促し続ける、またはリストの要素がなくなるまで要素を取り出し続けるという処理の意図が、コードを見ただけで理解できます。

ただし、もちろんwhile文を利用する際に気を付けなければならない点もあります。最後に、while文を利用する際に陥りがちな罠についてご説明します。

Python:while文の注意点① 無限ループ

while文の条件が偽になるようにプログラムを設計しないと、無限にループが続く可能性があります。

これはプログラムが停止しなくなる「無限ループ」という状況を引き起こし、コンピュータのリソースを消費し続けたり、期待した動作をしなくなったりします。

# 注意:このコードは無限ループを引き起こします
# i = 1
# while i > 0:
#     print(i)

参考 比較演算子

上記のコードでは、iの値が0以下になることはないため、ループが永遠に続いてしまいます。

無限ループについてさらに詳しく

無限ループとは、プログラムが停止することなく永遠に続くループのことを指します。これは通常、プログラマのエラーにより発生します。

以下に、Pythonで無限ループを作成する簡単な例を示します。

while True:
    print("これは無限ループです!")

このコードでは、whileループの条件が常にTrueであるため、ループは永遠に続くことになります。

無限ループの危険性は主に以下の通り。

無限ループの危険性
  • リソースの消費: 無限ループはコンピュータのリソース(CPU時間やメモリなど)を無駄に消費します。これは他のプログラムやシステム全体のパフォーマンスに影響を与える可能性が大きいので最大限注意が必要。
  • プログラムの停止: 無限ループによりプログラムが終了しなくなると、期待した動作を行わなくなる可能性があります。例えば、特定の条件下でループを抜け出すことを期待している場合、その条件が満たされなければプログラムは停止せず、期待した動作を行いません。
  • 応答性の低下: GUI(Graphical User Interface)などのイベント駆動型のプログラムでは、無限ループはプログラムの応答性を低下させ、ユーザーが操作できなくなる可能性があります。

無限ループを避けるためには、プログラムがループから確実に抜け出せるように適切な終了条件を設定し、ループ変数が確実にその条件に向かって変化するようにすることが重要です。また、エラーハンドリングを適切に行い、予期しない入力や状態に対してもプログラムが適切に対応できるようにすることも大切です。

Python:while文の注意点② ループ条件の更新を忘れない

while文のループ条件を満たさないように更新するコードを書くことが重要です。これは先ほどの無限ループの危険性と関連しています。

i = 0
while i < 5:
    print(i)
    # この行を忘れると無限ループになる
    i += 1

このコードでは、ループの各反復後にiの値が1増えます。これにより、iが5以上になった時点でループが停止します。

Python:while文の注意点③ 外部からの影響

whileループの条件が外部の入力や他のプログラムの状態に依存している場合、予期しない動作を引き起こす可能性があります。

例えば、ユーザーからの入力を待つプログラムがあったとします。

message = ''
while message != 'quit':
    message = input("何かを入力してください('quit'で終了): ")
    print(message)

ユーザーが何も入力せずにエンターを押すと、メッセージは空のままとなり、ループは'quit'が入力されるまで続きます。このような場合、ユーザーからの入力が予想外のものであることを想定し、適切に対応するコードを書くことが重要です。

Python:while文のまとめ

while文のまとめ

  • while文はPythonの制御構造の一部で、指定した条件が真(True)である限り、繰り返し処理を行うために使用される。構文は以下の通り。
while 条件式:
    実行したい処理
注意点としては以下の3つ
  • 無限ループの危険性: whileループの条件が永遠に真である場合、無限ループとなりプログラムは停止しません。これは計算リソースの無駄遣いになり、また予期しない結果を引き起こす可能性があります。
  • ループ条件の更新: whileループの条件が偽になるようにループ内で変数を適切に更新することが重要です。これを忘れると、無限ループを引き起こす可能性があります。
  • 外部からの影響: whileループの条件が外部の入力や他のプログラムの状態に依存している場合、予期しない動作を引き起こす可能性があります。これを避けるためには、適切なエラーハンドリングと入力検証が必要です。

以下このコードは1から100までを順に表示しますが、表示する数が3の倍数、5の倍数、または3と5の両方の倍数である場合には、数の代わりに特定の文字列を表示します。

num = 1
while num <= 100:
    if num % 3 == 0 and num % 5 == 0:
        print('FizzBuzz')
    elif num % 3 == 0:
        print('Fizz')
    elif num % 5 == 0:
        print('Buzz')
    else:
        print(num)
    num += 1

参考 if文

始めてPythonを勉強するのは結構難しいですよね。

でもその悩みを抱えているのは一人じゃありません。全てのPython使いが同じ道を進んできました。

Pythonをはじめとするプログラミングスキルを武器に、時間と場所に捉われない自由な生き方を目指してみませんか?今すぐ行動したい方は以下の記事をチェック!

読者料典 Python入門:学習カリキュラム ←こちらから!

このWebサイトは現役のエンジニアが以下3点を目的として運営しています。

  1. 勉強:一度理解した内容を忘れないように。
    → アウトプットは「最強のインプット」である! 
  2. 備忘:忘れたとしても後から見返せるように。
    → 未来の自分への「お手紙」を書いています。 
  3. 共有:〇〇ってこうだったんだ!の感動をシェアできるように。
    → あなたの知識は誰かにとっての「価値ある情報」です。 

副業ブログの始め方はこちらから

スポンサーリンク
Python
シェアする
ビズドットオンラインをフォローする
タイトルとURLをコピーしました