「1万回の作業」を、一瞬で終わらせる魔法。
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
前回(第3回)は、プログラムに判断力を与える「条件分岐(if文)」を学びました。
これで、状況に応じて動きを変える賢いプログラムが作れるようになりましたね。
さて、今回はコンピュータの最も得意な分野、「繰り返し処理(ループ)」のお話です。
もし上司から「この1万行のログファイルから、エラーの行だけ抜き出して」と言われたらどうしますか?
人間がやれば数日かかり、ミスも多発するでしょう。
しかし、Pythonのループ処理を使えば、この作業はたった数行のコードで、しかも一瞬で完了します。
先生、VPSに接続しました!
ループって「for文」とかですよね?
でも、「終わらないループ(無限ループ)」を作っちゃって、パソコンが固まった怖い思い出があるんですけど…。
VPSでやっても大丈夫ですか?
トラウマがあるのね、コウ君。
サーバーでの無限ループは確かに危険よ。CPUを100%使い切って、他のサービスまで道連れにしてしまうからね。
今回は、安全なループの回し方や、万が一暴走した時の止め方もしっかりレクチャーするわ。
自動化エンジニアへの必須スキルよ、頑張りましょう!
本記事では、Python初心者にとって最適な勉強方法である「実機(VPS)でのコーディング」を通して、for文とwhile文を完全にマスターします。
🚀 【全8回】Python VPSマスターコース カリキュラム
- 【第1回】環境構築とHello World:AlmaLinux 9でPythonを動かす
- 【第2回】変数とデータ型:コンピュータにおける「データ」の扱い方
- 【第3回】条件分岐(if文):プログラムに「判断」させる
- 【第4回】繰り返し処理(for/while)(今回):コンピュータの得意技「ループ」
- 【第5回】関数とモジュール:コードを部品化して再利用する
- 【第6回】外部ライブラリの活用(pip):便利な道具をインターネットから入手する
- 【第7回】ファイル操作とWebアクセス:ログ保存とデータ収集
- 【第8回】自動化システム構築:定期実行(Cron)でボットを作成する
目次
1. ループの基本:for文とwhile文の違い
Pythonには、繰り返し処理を行うための構文として for と while の2種類があります。
それぞれの特徴と使い分けを理解しましょう。
| 構文 | 特徴 | 使いどころ |
|---|---|---|
| for文 | 決まった回数や、データの個数分だけ繰り返す。 | リストの中身を順番に処理する、10回繰り返す、など。 (実務での使用率:90%) |
| while文 | ある条件が満たされている間、ずっと繰り返す。 | ユーザーが「終了」と入力するまで待機する、サーバーを常時監視する、など。 (無限ループのリスクあり) |
基本的には 「for文で書けないか?」 を最初に考え、どうしても条件で制御したい場合のみ while を使うのが安全な設計です。
2. 実践:VPSでfor文を書いてみよう
それでは、VPS(AlmaLinux 9)に接続して、実際にコードを書いてみましょう。
前回の続きから作業します。
2-1. 仮想環境の有効化
作業用ユーザー(python_user)でログインし、仮想環境に入ります。
cd ~/python_study source .venv/bin/activate
2-2. 基本的なfor文 (range関数)
まずは「指定回数繰り返す」基本形です。vi basic_for.py を作成し、以下のコードを入力してください。
# range(5) は 0, 1, 2, 3, 4 という5つの数字を作る
print("--- カウント開始 ---")
for i in range(5):
print(f"現在のカウント: {i}")
print("--- 終了 ---")
解説:
for 変数 in データセット: という書き方をします。range(5) は「0から始まり、5の手前まで」の数字を作ります。「5」は含まれない点に注意してください。
2-3. 実行と確認
python basic_for.py
実行結果:
--- カウント開始 --- 現在のカウント: 0 現在のカウント: 1 現在のカウント: 2 現在のカウント: 3 現在のカウント: 4 --- 終了 ---
2-4. リスト(配列)の中身を処理する
実務では、数字のカウントよりも「データリストの中身を順に処理する」ことの方が多いです。vi list_for.py を作成します。
# サーバー名のリスト
servers = ["web-server", "db-server", "mail-server", "backup-server"]
print("サーバーの再起動を開始します...")
for server_name in servers:
print(f"対象: {server_name} ... 再起動完了")
print("全台完了しました。")
実行結果:
サーバーの再起動を開始します... 対象: web-server ... 再起動完了 対象: db-server ... 再起動完了 対象: mail-server ... 再起動完了 対象: backup-server ... 再起動完了 全台完了しました。
このように、Pythonのfor文はリストの要素を一つずつ取り出して変数(ここでは server_name)に入れてくれるため、非常に直感的です。
3. 実践:while文と無限ループの制御
次は、条件が True である限り回り続ける while 文です。
3-1. 基本的なwhile文
vi basic_while.py を作成します。
count = 0
# countが3未満の間、繰り返す
while count < 3:
print(f"Wait... {count}")
count = count + 1 # これを忘れると無限ループ!
print("Go!")
解説:
count = count + 1(インクリメント)がないと、count は永遠に0のままで、条件 0 < 3 が常に真となり、無限ループに陥ります。
3-2. 【重要】無限ループからの脱出方法
プログラミング学習中に必ず一度はやってしまう「無限ループ」。
VPS上で実行中のプログラムが止まらなくなった時の対処法を覚えておきましょう。
- キーボードショートカット:
実行中のターミナルでCtrl + cを押します。これで強制停止(KeyboardInterrupt)できます。 - プロセス停止(別画面):
どうしても止まらない場合は、別のターミナルを開いてps aux | grep pythonでプロセスIDを探し、killコマンドで強制終了します。
⚠️ プロの助言:サーバーでの無限ループ
while True: を使って常駐プログラム(ボットなど)を作る際は、必ずループ内に time.sleep(1) などの待機処理を入れてください。
これを入れないとCPU使用率が100%に張り付き、サーバーが応答不能になる事故(通称:暴走)が起きます。
4. ループの流れを変える:breakとcontinue
ループの途中で「もうやめたい(中断)」や「今回は飛ばしたい(スキップ)」という場合があります。
それを制御するのが break と continue です。
break: ループを即座に終了し、外に出る。continue: 今回の処理をスキップし、次の回のループへ進む。
実践コード (loop_control.py)
「エラーが出たら停止する」シチュエーションを想定したコードです。
logs = ["INFO: 起動", "INFO: 接続", "ERROR: データベース応答なし", "INFO: 終了"]
print("ログ解析開始...")
for log in logs:
if "ERROR" in log:
print(f"異常検知!処理を中断します -> {log}")
break # ループを抜ける
print(f"確認OK: {log}")
print("ログ解析終了")
実行結果:
ログ解析開始... 確認OK: INFO: 起動 確認OK: INFO: 接続 異常検知!処理を中断します -> ERROR: データベース応答なし ログ解析終了
「INFO: 終了」まで行かずにループが終わっていることが分かります。
逆に、特定の条件だけスキップしたい場合(例:コメント行は無視する)は continue を使います。
5. プロのノウハウ:Pythonらしいループの書き方
他の言語経験者がPythonに来て驚くのが、「インデックス(添字)を使わないループ」です。
enumerate関数の活用
「リストの中身」と同時に「何番目か」も知りたい時、C言語などではこう書きます(Pythonでは非推奨)。
# 非推奨(Pythonらしくない)
i = 0
for item in items:
print(i, item)
i += 1
Pythonでは enumerate() 関数を使うのがスマートです。vi smart_loop.py で試してみましょう。
fruits = ["apple", "banana", "cherry"]
# インデックス(idx)と値(fruit)を同時に取り出す
for idx, fruit in enumerate(fruits, 1): # 1は開始番号
print(f"No.{idx}: {fruit}")
実行結果:
No.1: apple No.2: banana No.3: cherry
このように、便利な組み込み関数を使いこなすのが「Pythonic(パイソニック:Pythonらしい)」なコードへの近道です。
6. 演習問題:FizzBuzz問題に挑戦
プログラマの採用試験でも使われる有名な問題「FizzBuzz」に挑戦しましょう。
ここまでの知識(for, if, 演算子)を総動員すれば解けるはずです。
【課題】FizzBuzz問題
1から20までの数字を順番に出力してください。
ただし、以下の条件に従ってください。
- 3の倍数の時は数字の代わりに "Fizz" と表示。
- 5の倍数の時は数字の代わりに "Buzz" と表示。
- 3と5の両方の倍数(15など)の時は "FizzBuzz" と表示。
- それ以外は普通に数字を表示。
解答例 (fizzbuzz.py)
まずは自分で考えてみて、その後に以下の解答を見てください。
ヒント:倍数の判定には「割り算の余り(%)」を使います。x % 3 == 0 なら3の倍数です。
# 1から20まで(21の手前まで)繰り返す
for num in range(1, 21):
# 3と5の両方で割り切れる(15の倍数)
if num % 3 == 0 and num % 5 == 0:
print("FizzBuzz")
# 3で割り切れる
elif num % 3 == 0:
print("Fizz")
# 5で割り切れる
elif num % 5 == 0:
print("Buzz")
# それ以外
else:
print(num)
💡 ポイント
条件の順番が重要です。「FizzBuzz」の判定(最も厳しい条件)を最初に書かないと、15の時に先に「Fizz」の条件に引っかかってしまいます。
「特殊なケースから先に判定する」のがif文の鉄則です。
まとめ:自動化への扉が開かれた
お疲れ様でした! 第4回では、プログラムのパワーの源泉である「繰り返し処理」を習得しました。
今回の達成項目:
forとwhileの使い分けを理解した。range()を使って指定回数のループが書けるようになった。- リストの中身を順次処理する方法を学んだ。
breakとcontinueでループの流れを制御した。enumerate()を使ったスマートな書き方を知った。- FizzBuzz問題を自力で解くロジックを学んだ。
変数、if文、そしてループ。この3つ(順次、分岐、反復)はプログラミングの「三大要素」と呼ばれます。
これらを組み合わせることで、理論上はどんなプログラムでも作ることができます。
次回は、書いたコードを部品化して整理整頓する「関数とモジュール」について学びます。
コードが長くなってきてもスパゲッティにならず、効率よく管理するための技術です。
次回、【第5回】関数とモジュール:コードを部品化して再利用する でお会いしましょう!
🔗 参考リンク(公式サイト)
▼ Pythonを学ぶならVPSで ▼
AlmaLinuxが使える
「おすすめVPS」
Pythonスキルを活かす
「ITエンジニア転職」


コメント