【Python】while文完全ガイド2025年版 – 基礎から難関テクニックまで
目次
Pythonのwhile文とは?基礎知識と重要性
while文は、指定した条件が真(True)である限り、処理を繰り返し実行するPythonの重要な制御構文です。for文と並んでループ処理の基本となる構文で、条件次第で処理を継続するため、動的な制御が可能です。
基礎編:while文の基本構文と使い方
基本的なwhile文の構文
# 基本構文
count = 0
while count < 5:
print(f"カウント: {count}")
count += 1
print("ループ終了")
条件式の書き方
# 数値条件
number = 10
while number > 0:
print(number)
number -= 2
# 文字列条件
user_input = ""
while user_input != "quit":
user_input = input("コマンドを入力(quitで終了): ")
print(f"入力値: {user_input}")
中級編:while文の実践的な活用法
break文とcontinue文の活用
# break文による強制終了
count = 0
while True:
if count == 3:
break
print(f"処理中: {count}")
count += 1
# continue文による処理スキップ
number = 0
while number < 10:
number += 1
if number % 2 == 0:
continue
print(f"奇数: {number}")
else句付きwhile文
# else句の使用例
search_list = [1, 3, 5, 7, 9]
target = 4
index = 0
while index < len(search_list):
if search_list[index] == target:
print(f"発見: インデックス {index}")
break
index += 1
else:
print("見つかりませんでした")
上級編:複雑な条件とネストしたwhile文
複合条件でのwhile文
# 複数条件の組み合わせ
attempts = 0
success = False
max_attempts = 3
while attempts < max_attempts and not success:
user_input = input("パスワードを入力: ")
if user_input == "secret123":
success = True
print("ログイン成功!")
else:
attempts += 1
print(f"失敗。残り{max_attempts - attempts}回")
if not success:
print("アカウントロックされました")
ネストしたwhile文
# 二重ループの例
outer = 0
while outer < 3:
inner = 0
while inner < 3:
print(f"外側: {outer}, 内側: {inner}")
inner += 1
outer += 1
難関編:while文による高度なアルゴリズム実装
数値計算アルゴリズム
# ニュートン法による平方根計算
def sqrt_newton(number, precision=1e-10):
x = number / 2 # 初期値
while True:
root = 0.5 * (x + number / x)
if abs(root - x) < precision:
return root
x = root
result = sqrt_newton(25)
print(f"√25 = {result}")
ゲーム理論とシミュレーション
import random
# モンテカルロ法による円周率計算
def calculate_pi(iterations=100000):
inside_circle = 0
total_points = 0
while total_points < iterations:
x = random.uniform(-1, 1)
y = random.uniform(-1, 1)
if x*x + y*y <= 1:
inside_circle += 1
total_points += 1
return 4 * inside_circle / total_points
pi_estimate = calculate_pi()
print(f"π の推定値: {pi_estimate}")
データ構造の実装
# while文を使ったスタック操作
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def process_all(self):
while self.items:
item = self.items.pop()
print(f"処理中: {item}")
stack = Stack()
stack.push("タスク1")
stack.push("タスク2")
stack.process_all()
エキスパート編:while文によるイベント駆動プログラミング
状態機械の実装
class StateMachine:
def __init__(self):
self.state = "idle"
self.running = True
def run(self):
while self.running:
if self.state == "idle":
self.state = self.handle_idle()
elif self.state == "processing":
self.state = self.handle_processing()
elif self.state == "complete":
self.state = self.handle_complete()
def handle_idle(self):
print("待機中...")
return "processing"
def handle_processing(self):
print("処理中...")
return "complete"
def handle_complete(self):
print("完了")
self.running = False
return "idle"
# 使用例
# machine = StateMachine()
# machine.run()
非同期処理風の実装
import time
class TaskQueue:
def __init__(self):
self.tasks = []
self.running = False
def add_task(self, task):
self.tasks.append(task)
def start_processing(self):
self.running = True
while self.running:
if self.tasks:
task = self.tasks.pop(0)
print(f"実行中: {task}")
time.sleep(0.1) # 処理時間をシミュレート
else:
print("タスク待機中...")
time.sleep(0.5)
def stop(self):
self.running = False
queue = TaskQueue()
queue.add_task("データ処理")
queue.add_task("ファイル保存")
# queue.start_processing() # 実際の実行時はコメントアウト
while文のパフォーマンス最適化技術
効率的な条件チェック
# 最適化前:毎回関数呼び出し
def slow_loop():
items = list(range(1000))
while len(items) > 0: # 毎回len()を計算
items.pop()
# 最適化後:条件を事前計算
def fast_loop():
items = list(range(1000))
while items: # Pythonの真偽値判定を活用
items.pop()
fast_loop()
メモリ効率の改善
# ジェネレータとwhile文の組み合わせ
def fibonacci_generator(max_value):
a, b = 0, 1
while a < max_value:
yield a
a, b = b, a + b
# メモリ効率的な処理
fib_gen = fibonacci_generator(100)
while True:
try:
value = next(fib_gen)
print(value)
except StopIteration:
break
while文でよくあるエラーと対策
無限ループの回避
# 危険:無限ループ
# while True:
# print("停止しません")
# 安全:カウンターによる制限
def safe_while_loop():
counter = 0
max_iterations = 1000
while True and counter < max_iterations:
# 何らかの処理
counter += 1
if some_condition(): # 終了条件
break
if counter >= max_iterations:
print("最大反復回数に達しました")
def some_condition():
return True # 実際の条件をここに記述
境界条件の処理
def safe_input_loop():
"""安全な入力処理ループ"""
attempts = 0
max_attempts = 3
while attempts < max_attempts:
try:
value = int(input("数値を入力: "))
if 1 <= value <= 100:
return value
else:
print("1-100の範囲で入力してください")
except ValueError:
print("数値を入力してください")
attempts += 1
print("入力試行回数を超えました")
return None
# result = safe_input_loop()
実践的なwhile文活用例
ファイル処理での活用
def process_large_file(filename):
"""大きなファイルの行ごと処理"""
with open(filename, 'r', encoding='utf-8') as file:
line_count = 0
while True:
line = file.readline()
if not line: # ファイル終端
break
# 行の処理
print(f"行 {line_count}: {line.strip()}")
line_count += 1
return line_count
# 使用例(ファイルが存在する場合)
# count = process_large_file('sample.txt')
API呼び出しのリトライ処理
import time
import random
def api_call_with_retry():
"""APIコールのリトライ処理"""
max_retries = 5
retry_count = 0
base_delay = 1
while retry_count < max_retries:
try:
# APIコールのシミュレーション
if random.random() < 0.3: # 30%の確率で成功
print("API呼び出し成功")
return True
else:
raise Exception("API呼び出し失敗")
except Exception as e:
retry_count += 1
if retry_count >= max_retries:
print("最大リトライ回数に達しました")
return False
delay = base_delay * (2 ** retry_count) # 指数バックオフ
print(f"リトライ {retry_count}/{max_retries} - {delay}秒後に再試行")
time.sleep(delay)
return False
# result = api_call_with_retry()
while文 vs for文:適切な選択指針
while文が適している場面
# 条件が動的に変化する場合
def dynamic_condition_example():
user_points = 0
level = 1
while user_points < 100 * level: # レベルに応じて条件が変化
action = input("アクション (work/study/quit): ")
if action == "work":
user_points += 10
elif action == "study":
user_points += 15
if user_points >= 50 * level:
level += 1
print(f"レベルアップ!現在レベル: {level}")
elif action == "quit":
break
print(f"最終スコア: {user_points}, レベル: {level}")
# dynamic_condition_example()
for文との使い分け
# for文:回数が決まっている場合
for i in range(10):
print(f"for文: {i}")
# while文:条件によって回数が変わる場合
count = 0
while count < 10:
print(f"while文: {count}")
count += random.randint(1, 3) # 不規則な増加
まとめ:while文をマスターするためのポイント
Pythonのwhile文は、条件に基づく柔軟なループ制御を可能にする強力な構文です。基本的な使い方から高度なアルゴリズム実装まで、様々な場面で活用できます。
習得のポイント
- 基礎固め: 基本構文と条件式の理解
- 制御構文: break, continue, elseの適切な使用
- エラー対策: 無限ループの回避と境界条件の処理
- 最適化: パフォーマンスとメモリ効率の考慮
実践での注意点
- 終了条件を明確にする
- 無限ループを避ける設計
- 適切なエラーハンドリング
- for文との使い分けを理解
継続的な練習と実践的なプロジェクトへの適用により、while文を効果的に活用できるようになります。
■らくらくPython塾 – 読むだけでマスター
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座



