Pythonのfor文・while文でループを理解しよう
PythonをコマンドプロンプトやPowerShellでPC上で動かすには、Pythonをダウンロードしてインストールする必要があります。
まだの方はPythonのインストールと開発環境の構築の記事を参考にして、Pythonをインストールしてください。
Webクリエイターの皆さん、こんにちは!Webサイト制作や日々の業務で「同じ作業を何度も繰り返しているな…」と感じたことはありませんか?そんな退屈な作業を自動化してくれるのが、プログラミングの「繰り返し処理(ループ)」です。
この記事では、Pythonの繰り返し処理の基本であるfor文とwhile文について、初心者の方でもすぐに試せる「動くコード」をたくさん用意しました。目的は、まず「動く」を体験してもらうこと。理屈は後からついてきます。ぜひ、コードをコピー&ペーストして、ループの便利さを実感してみてください!
1. for文:決まった回数だけ繰り返すのが得意!
for文は、リストや文字列など、複数の要素が集まったデータの中から、要素を一つずつ順番に取り出して処理するのが得意です。また、「10回繰り返す」のように、あらかじめ決まった回数の処理にも使われます。
一番基本的な形は for 変数 in データの集まり: です。早速、具体的なコードを見ていきましょう。
リストの要素を順番に取り出す
例えば、あなたが管理しているWebサイトのカテゴリ一覧があるとします。このカテゴリ名を一つずつ表示させてみましょう。
# 表示したいカテゴリ名のリストを作成
categories = ["HTML", "CSS", "JavaScript", "Python", "Webデザイン"]
# for文でリストから要素を一つずつ取り出し、画面に表示する
for category in categories:
print(f"カテゴリ名: {category}")
# 実行結果:
# カテゴリ名: HTML
# カテゴリ名: CSS
# カテゴリ名: JavaScript
# カテゴリ名: Python
# カテゴリ名: Webデザイン
決まった回数だけ繰り返す (range関数)
「ブログ記事のサンプルを5件作りたい」のように、単純に決まった回数だけ処理を繰り返したい場合はrange()関数を使うと便利です。range(5)と書くと、0から4までの数値を順番に生成してくれます(5は含まないのがポイント!)。
# 0から4まで、合計5回ループする
for i in range(5):
# f-stringを使って、何回目のループかを表示する(iは0から始まるので+1する)
print(f"{i + 1}回目の処理です。")
# 実行結果:
# 1回目の処理です。
# 2回目の処理です。
# 3回目の処理です。
# 4回目の処理です。
# 5回目の処理です。
何番目の要素かを知りながら繰り返す (enumerate関数)
リストの要素を取り出す際に、「今が何番目の要素か」という情報も一緒に欲しい場合があります。そんな時はenumerate()関数を使いましょう。ランキング形式で表示したい時などに役立ちます。
# 人気記事ランキングのリスト
ranking = ["Python入門", "CSSで作るレスポンシブデザイン", "JavaScriptの非同期処理"]
# enumerateを使って、順位(インデックス)と記事タイトル(要素)を同時に取り出す
# start=1 とすることで、順位を1から始められる
for rank, title in enumerate(ranking, start=1):
print(f"{rank}位: {title}")
# 実行結果:
# 1位: Python入門
# 2位: CSSで作るレスポンシブデザイン
# 3位: JavaScriptの非同期処理
2. while文:特定の条件が満たされている間、繰り返す
while文は、「この条件が真(True)である限り、処理を続ける」というタイプのループです。for文と違って、繰り返す回数が決まっていない場合によく使われます。例えば、「ユーザーが特定の文字を入力するまで処理を続ける」といった対話的なプログラムや、「処理時間が10秒を超えるまで続ける」といったケースで活躍します。
基本的な形は while 条件式: です。条件式がTrueの間、中の処理が実行され続けます。
カウンターが特定の数になるまで繰り返す
まずはシンプルな例です。カウンター用の変数を1つ用意し、その数値が特定の条件を満たす間だけループを続けます。ループ内でカウンターの値を変更し忘れると、無限ループ(後述)に陥るので注意が必要です。
# カウンター変数を0で初期化
count = 0
# countが5未満の間、ループを続ける
while count < 5:
print(f"現在のカウント: {count}")
# この行が重要! countの値を1増やす
count += 1
print("ループが終了しました。")
# 実行結果:
# 現在のカウント: 0
# 現在のカウント: 1
# 現在のカウント: 2
# 現在のカウント: 3
# 現在のカウント: 4
# ループが終了しました。
3. 応用例:ループ処理でHTMLファイルを生成してみよう
さて、ここまでの知識を応用して、Webクリエイターの皆さんにとってより実用的な例を見てみましょう。Pythonのループ処理を使って、WebサイトのナビゲーションメニューのHTMLコードを自動生成するプログラムです。
このコードを実行すると、`navigation.html`というファイルが作成され、その中にリスト形式のメニューが書き込まれます。手作業でタグを何個も書く手間が省けますね!
【まるっと動く完全HTMLの例】
以下のコードは、Pythonスクリプトそのものです。ローカル環境にPythonがインストールされていれば、このコードを `generate_html.py` のような名前で保存し、ターミナルやコマンドプロンプトで `python generate_html.py` と実行すると、同じ階層に `navigation.html` が生成されます。
# -*- coding: utf-8 -*-
# List of items to display in the menu
menu_items = {
"Home": "index.html",
"About Us": "about.html",
"Services": "services.html",
"Blog": "blog.html",
"Contact": "contact.html"
}
# Variable to store HTML fragments
html_content = """<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>自動生成されたナビゲーション</title>
<style>
body { font-family: sans-serif; }
nav ul { list-style: none; padding: 0; display: flex; gap: 1rem; }
nav a { text-decoration: none; color: #007BFF; padding: 0.5rem 1rem; border: 1px solid #ddd; border-radius: 5px; }
nav a:hover { background-color: #f0f0f0; }
</style>
</head>
<body>
<h1>ナビゲーションメニュー</h1>
<nav>
<ul>
"""
# forループを使って辞書からキー(テキスト)と値(リンク)を取り出し、<li>タグを生成
for text, link in menu_items.items():
html_content += f' <li><a href="{link}">{text}</a></li>\n'
# HTMLのフッター部分を追加
html_content += """ </ul>
</nav>
</body>
</html>
"""
# "navigation.html"という名前でファイルを開き、中身を書き込む
try:
with open("navigation.html", "w", encoding="utf-8") as f:
f.write(html_content)
print("✅ navigation.html の生成に成功しました!")
except IOError as e:
print(f"❌ ファイルの書き込み中にエラーが発生しました: {e}")
4. 気をつけるべき点:ループ制御のテクニック
ループ処理は非常に便利ですが、意図しない挙動を避けるために知っておくべき制御方法がいくつかあります。特に「無限ループ」「break」「continue」は重要な概念です。
無限ループに注意!
特にwhile文で発生しやすいのが「無限ループ」です。これは、ループを終了させるための条件式が永遠にTrueのままになってしまうことで、プログラムが停止しなくなる現象です。下の例では、countの値が変化しないため、count < 5という条件が永久に満たされてしまいます。
# ⚠️ このコードは無限ループに陥るため、実行には注意してください!
count = 0
while count < 5:
print("このメッセージは無限に表示され続けます…")
# countの値を更新する処理(count += 1 など)が抜けている!
ループを途中で抜け出す (break)
ループの途中で、ある特定の条件が満たされたら処理を完全に終了したい場合があります。そんなときはbreakを使いましょう。例えば、リストの中から特定の要素を見つけたら、それ以降の検索は不要ですよね。そんな時にbreakが役立ちます。
# 探したいファイル
target_file = "python.png"
file_list = ["style.css", "index.html", "script.js", "python.png", "logo.svg"]
# ファイルリストを順番にチェック
for filename in file_list:
print(f"チェック中: {filename}")
if filename == target_file:
print(f"🎉 見つけました!: {target_file}")
# 目的のファイルが見つかったので、ループを抜ける
break
# 実行結果:
# チェック中: style.css
# チェック中: index.html
# チェック中: script.js
# チェック中: python.png
# 🎉 見つけました!: python.png
breakが実行されると、"logo.svg"はチェックされずにループが終了しているのが分かります。
今回の処理だけをスキップする (continue)
breakがループ自体を終了させるのに対し、continueは「今回の処理だけをスキップして、次の繰り返しに進む」という命令です。例えば、大量のファイルの中から画像ファイル(.jpg, .png)だけを処理したい、といった場合に便利です。
file_list = ["memo.txt", "photo_01.jpg", "document.pdf", "photo_02.png", "archive.zip"]
# ファイルリストをループ
for filename in file_list:
# ファイル名の末尾が ".jpg" または ".png" でない場合は…
if not (filename.endswith(".jpg") or filename.endswith(".png")):
# …この回の処理をスキップして次のファイルへ
continue
# この行は、画像ファイルの場合のみ実行される
print(f"画像ファイルを処理中: {filename}")
# 実行結果:
# 画像ファイルを処理中: photo_01.jpg
# 画像ファイルを処理中: photo_02.png
まとめ
今回は、Pythonの繰り返し処理の基本であるfor文とwhile文について解説しました。
- for文: リストや
range()を使い、決まった回数や要素の数だけ繰り返すのに便利。 - while文: ある条件が満たされている間、繰り返しを続ける。回数が決まっていない場合に有効。
最初は難しく感じるかもしれませんが、まずはコピペで動かしてみて、少しずつ数値を変更したり、リストの中身を変えたりして、挙動の変化を観察することから始めてみてください。繰り返し処理をマスターすれば、あなたのWeb制作や業務は格段に効率化されるはずです!
次のステップとして、処理をひとまとめにする「関数」について学んでみませんか?
Pythonの関数の作り方と使い方を解説