[Python] while文の使い方

Pythonのwhile文は、条件がTrueである間、ブロック内のコードを繰り返し実行するためのループ構造です。

基本構文はwhile 条件式:の後にインデントされたコードブロックを記述します。

条件式がFalseになるとループが終了します。

無限ループを避けるために、ループ内で条件を変化させる処理を含めることが重要です。

また、break文を使用してループを強制終了したり、continue文で次の反復処理にスキップすることも可能です。

この記事でわかること
  • while文の基本的な書き方と条件式の役割
  • while文を使ったさまざまな活用例
  • breakやcontinueなどの制御文との組み合わせ方
  • while文とfor文の違いと選び方
  • 無限ループを避ける方法とelse節の使い方

目次から探す

while文の基本構文

Pythonのwhile文は、指定した条件がTrueである間、繰り返し処理を実行するための制御構造です。

ここでは、while文の基本的な書き方や条件式の役割、無限ループの作成と注意点について解説します。

while文の基本的な書き方

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

while 条件式:
    # 繰り返し実行する処理

サンプルコードを見てみましょう。

count = 0
while count < 5:
    print("カウント:", count)
    count += 1

このコードは、countが5未満である間、print関数を使ってカウントの値を出力し、countを1ずつ増やしていきます。

カウント: 0
カウント: 1
カウント: 2
カウント: 3
カウント: 4

この例では、countが5になると条件式がFalseになり、ループが終了します。

条件式の役割

while文の条件式は、ループを続けるかどうかを決定する重要な要素です。

条件式がTrueである限り、ループ内の処理が繰り返されます。

条件式がFalseになると、ループは終了します。

条件式には、比較演算子や論理演算子を使用して、複雑な条件を設定することも可能です。

number = 10
while number > 0:
    print("現在の値:", number)
    number -= 2
現在の値: 10
現在の値: 8
現在の値: 6
現在の値: 4
現在の値: 2

この例では、numberが0より大きい間、ループが続きます。

無限ループの作成と注意点

無限ループは、条件式が常にTrueであるために終了しないループです。

無限ループは特定の状況で有用ですが、意図せずに作成するとプログラムが停止しなくなるため注意が必要です。

無限ループの例:

while True:
    print("無限ループ中")
    # 何らかの条件でbreakを使ってループを抜ける必要があります

無限ループを制御するためには、break文を使用してループを終了させる条件を設定することが一般的です。

無限ループを使用する際は、必ず終了条件を考慮し、適切に制御することが重要です。

while文の活用例

while文は、さまざまな状況で活用できる柔軟なループ構造です。

ここでは、カウンタを使ったループ、ユーザー入力を利用したループ、リストやタプルの要素を処理するループについて解説します。

カウンタを使ったループ

カウンタを使ったループは、特定の回数だけ処理を繰り返したい場合に便利です。

以下の例では、カウンタを使って10回の繰り返しを行います。

counter = 0
while counter < 10:
    print("カウンタの値:", counter)
    counter += 1
カウンタの値: 0
カウンタの値: 1
カウンタの値: 2
カウンタの値: 3
カウンタの値: 4
カウンタの値: 5
カウンタの値: 6
カウンタの値: 7
カウンタの値: 8
カウンタの値: 9

この例では、counterが10未満である間、ループが続きます。

counterはループごとに1ずつ増加します。

ユーザー入力を利用したループ

ユーザーからの入力を利用してループを制御することも可能です。

以下の例では、ユーザーが exit と入力するまでメッセージを繰り返し表示します。

user_input = ""
while user_input != "exit":
    user_input = input("終了するには 'exit' と入力してください: ")
    print("入力された内容:", user_input)
終了するには 'exit' と入力してください: hello
入力された内容: hello
終了するには 'exit' と入力してください: exit
入力された内容: exit

この例では、ユーザーが exit と入力するまで、ループが続きます。

リストやタプルの要素を処理するループ

while文を使って、リストやタプルの要素を順に処理することもできます。

以下の例では、リストの各要素を出力します。

fruits = ["apple", "banana", "cherry"]
index = 0
while index < len(fruits):
    print("フルーツ:", fruits[index])
    index += 1
フルーツ: apple
フルーツ: banana
フルーツ: cherry

この例では、indexを使ってリストの各要素にアクセスし、indexがリストの長さに達するまでループが続きます。

while文を使うことで、リストやタプルの要素を柔軟に処理することができます。

while文と制御文

while文は、breakcontinueといった制御文と組み合わせることで、より柔軟なループ制御が可能です。

また、else節を使うことで、ループが正常に終了した場合の処理を追加することもできます。

ここでは、これらの制御文とelse節の活用方法について解説します。

break文によるループの中断

break文は、ループを即座に終了させるために使用します。

特定の条件が満たされたときにループを中断したい場合に便利です。

count = 0
while count < 10:
    if count == 5:
        print("カウントが5になったのでループを終了します")
        break
    print("カウント:", count)
    count += 1
カウント: 0
カウント: 1
カウント: 2
カウント: 3
カウント: 4
カウントが5になったのでループを終了します

この例では、countが5になったときにbreak文が実行され、ループが終了します。

continue文による次の反復へのスキップ

continue文は、ループの現在の反復をスキップし、次の反復に進むために使用します。

特定の条件を満たした場合に、以降の処理をスキップしたいときに便利です。

count = 0
while count < 10:
    count += 1
    if count % 2 == 0:
        continue
    print("奇数カウント:", count)
奇数カウント: 1
奇数カウント: 3
奇数カウント: 5
奇数カウント: 7
奇数カウント: 9

この例では、countが偶数の場合にcontinue文が実行され、print文がスキップされます。

else節の活用方法

while文にはelse節を追加することができ、ループが正常に終了した場合に実行されます。

break文でループが中断された場合、else節は実行されません。

count = 0
while count < 5:
    print("カウント:", count)
    count += 1
else:
    print("ループが正常に終了しました")
カウント: 0
カウント: 1
カウント: 2
カウント: 3
カウント: 4
ループが正常に終了しました

この例では、countが5になるとループが正常に終了し、else節のメッセージが表示されます。

else節を使うことで、ループが正常に完了した場合の処理を明示的に記述することができます。

while文の応用

while文は、基本的なループ処理だけでなく、さまざまな応用が可能です。

ここでは、ネストされたwhile文の使い方、while文を使った簡単なゲームの作成、while文と関数の組み合わせについて解説します。

ネストされたwhile文の使い方

while文は、他のwhile文の中に入れることができ、これをネストと呼びます。

ネストされたwhile文を使うことで、複雑な繰り返し処理を実現できます。

i = 0
while i < 3:
    j = 0
    while j < 3:
        print(f"i: {i}, j: {j}")
        j += 1
    i += 1
i: 0, j: 0
i: 0, j: 1
i: 0, j: 2
i: 1, j: 0
i: 1, j: 1
i: 1, j: 2
i: 2, j: 0
i: 2, j: 1
i: 2, j: 2

この例では、外側のループが3回繰り返されるごとに、内側のループが3回繰り返されます。

ネストされたwhile文を使うことで、二次元のデータを処理することができます。

while文を使った簡単なゲームの作成

while文を使って、簡単なゲームを作成することも可能です。

以下の例では、ユーザーが正しい数字を当てるまで繰り返す数当てゲームを作成します。

import random
target_number = random.randint(1, 10)
guess = None
while guess != target_number:
    guess = int(input("1から10の間の数字を当ててください: "))
    if guess < target_number:
        print("もっと大きい数字です")
    elif guess > target_number:
        print("もっと小さい数字です")
    else:
        print("正解です!")

このゲームでは、ユーザーが正しい数字を当てるまでヒントを与え続けます。

while文を使うことで、ユーザーが正解するまでゲームを続けることができます。

while文と関数の組み合わせ

while文は、関数と組み合わせて使うことで、コードの再利用性を高めることができます。

以下の例では、while文を関数内で使用して、特定の条件が満たされるまで処理を繰り返します。

def countdown(start):
    while start > 0:
        print("カウントダウン:", start)
        start -= 1
    print("カウントダウン終了")
countdown(5)
カウントダウン: 5
カウントダウン: 4
カウントダウン: 3
カウントダウン: 2
カウントダウン: 1
カウントダウン終了

この例では、countdown関数が呼び出されると、指定された数から0までカウントダウンを行います。

while文を関数内で使用することで、同じ処理を複数回呼び出すことができ、コードの効率を向上させることができます。

while文と他のループとの比較

Pythonにはwhile文の他にfor文というループ構造があります。

それぞれのループには特有の利点があり、適切な場面で使い分けることが重要です。

ここでは、for文との違い、while文を選ぶべきケース、while文とfor文のパフォーマンス比較について解説します。

for文との違い

for文とwhile文はどちらも繰り返し処理を行うための構造ですが、使い方や適用場面に違いがあります。

スクロールできます
特徴while文for文
繰り返し回数条件がTrueである限りイテラブルオブジェクトの要素数
主な用途条件に基づく繰り返しコレクションの要素を順に処理
終了条件明示的に設定自動的に終了

while文は、条件がTrueである限りループを続けるため、繰り返し回数が事前に決まっていない場合に適しています。

一方、for文は、リストやタプルなどのイテラブルオブジェクトの要素を順に処理するのに適しています。

while文を選ぶべきケース

while文を選ぶべきケースは、以下のような状況です。

  • 繰り返し回数が事前に決まっていない場合
  • 条件に基づいてループを制御したい場合
  • ユーザー入力や外部条件に応じてループを続ける必要がある場合

例えば、ユーザーが特定の入力をするまで繰り返し処理を行う場合や、特定の条件が満たされるまでデータを処理する場合にwhile文が適しています。

while文とfor文のパフォーマンス比較

while文とfor文のパフォーマンスは、通常の使用において大きな違いはありませんが、特定の状況では違いが生じることがあります。

一般的に、for文はイテラブルオブジェクトを処理するために最適化されており、while文よりも効率的に動作することがあります。

以下の例では、for文とwhile文を使ってリストの要素を処理する場合のパフォーマンスを比較します。

import time
# for文のパフォーマンス
start_time = time.time()
for i in range(1000000):
    pass
for_duration = time.time() - start_time
# while文のパフォーマンス
start_time = time.time()
i = 0
while i < 1000000:
    i += 1
while_duration = time.time() - start_time
print("for文の時間:", for_duration)
print("while文の時間:", while_duration)

このコードは、for文とwhile文で100万回のループを実行し、それぞれの実行時間を計測します。

一般的に、for文の方がわずかに速いことが多いですが、実際のパフォーマンスはコードの内容や環境によって異なるため、最適なループを選択する際には、コードの可読性や意図を重視することが重要です。

よくある質問

while文で無限ループを避けるにはどうすればいいですか?

無限ループを避けるためには、while文の条件式が必ずFalseになるように設計することが重要です。

ループ内で条件を変化させる処理を忘れないようにしましょう。

例えば、カウンタを使う場合は、ループ内でカウンタを適切に増減させることが必要です。

また、break文を使って、特定の条件が満たされたときにループを終了させることも有効です。

while文とfor文はどちらが効率的ですか?

while文とfor文の効率は、具体的な使用状況によって異なります。

一般的に、for文はイテラブルオブジェクトを処理するために最適化されており、while文よりも効率的に動作することがあります。

しかし、while文は条件に基づくループに適しており、繰り返し回数が事前に決まっていない場合に有用です。

効率だけでなく、コードの可読性や意図に応じて適切なループを選択することが重要です。

while文のelse節はどのように使いますか?

while文のelse節は、ループが正常に終了した場合に実行されるブロックです。

break文でループが中断された場合、else節は実行されません。

else節を使うことで、ループがすべての反復を正常に完了した場合の処理を明示的に記述することができます。

例えば、ループ内で特定の条件を探し、見つからなかった場合にelse節でその旨を通知することができます。

まとめ

while文は、条件に基づく繰り返し処理を行うための強力なツールです。

この記事では、while文の基本構文から応用例、他のループとの比較、よくある質問までを網羅しました。

これにより、while文を効果的に活用するための基礎知識を得ることができたでしょう。

ぜひ、実際のプログラミングでwhile文を活用し、より効率的なコードを書いてみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • 条件分岐 (18)
  • 繰り返し処理 (31)
  • URLをコピーしました!
目次から探す