【Python超入門】while文の使い方(練習問題あり)

Pythonのwhile文(繰り返し)の使い方を初心者向けに詳しく解説します。

while文(繰り返し)

while文とは?

プログラムの「流れ(処理の順番)」をコントロールする文を制御構文といいます。
通常、プログラムは上から下へ順番に実行されますが、while文という制御構文を使って「ある条件を満たすまで同じ処理を繰り返す」ことができます。

RPGゲームだと「敵かプレイヤーのHPが0になるまで、戦闘を続ける」ような処理を実装するときにwhile文が用いられます。

書式(基本構造)

以下は、while文を使う時の書式(基本構造)です。

while 条件式:
    処理①

処理②
  • 条件式True(真)の間、処理①を繰り返します。
  • 条件式False(偽)になると、繰り返し(ループ)を抜けて次の処理②へ進みます。
Pythonでは、インデント(字下げ)によって処理のまとまり(ブロック)を表します。C言語やJavaでは {} で囲みますが、PythonではインデントだけでOKなので、コードが自然と見やすくなります。

論理型(bool型)

Pythonでは、「はい」か「いいえ」のような、2択の答えを扱うためのデータ型があります。それが「論理型(bool型)」です。

意味 読み方
True 正しい(Yes) トゥルー
False 間違い(No) フォルス

条件式

条件式とは、「ある値や状態が特定の条件を満たしているかどうか」を判断するための式です。条件式は「True」か「False」のどちらかを返します。
while文では、条件式が「False(偽)」ならブロック内の処理を実行し、「True(真)」になれば終了します。

【例】
条件式が x == 10 だと「xが10と等しいか?」を判定します。

  • x = 10 のとき → True
  • x = 5 のとき → False

この == を条件演算子(比較演算子)といいます。その他、よく使う条件演算子(比較演算子)は以下のとおりです。

演算子 意味 結果
== 等しい x == 5 xが5ならTrue
!= 等しくない x != 5 xが5でなければTrue
> より大きい x > 5 xが6以上ならTrue
< より小さい x < 5 xが4以下ならTrue
>= 以上 x >= 5 xが5以上ならTrue
<= 以下 x <= 5 xが5以下ならTrue

論理演算子

論理演算子の「and(かつ)」「or(または)」 を使って、複数の条件を組み合わせることができます。
また、丸括弧 () を使って優先順位を決めることができます。

ゲームだと「レベルが高くて、職業が勇者ならクエスト解放!」みたいな判定に使えます。
演算子 意味 実行される条件
and かつ 両方がTrue
or または どちらかがTrue
() 優先順位 先に判定したい部分を囲む

加算代入演算子

level += 1 は「加算代入演算子」と呼ばれる書き方で、level = level + 1と同じ動作をします。

書き方 意味
level = level + 1 現在の level に 1 を足して、再び level に代入する
level += 1 上記を短く書いた省略形。読みやすく、書きやすい!

加算代入演算子(+=)は while文と相性が良く、ブロック内でよく使われます。特に「カウントアップしながら条件を満たすまで繰り返す」ような処理では、ほぼ定番の書き方です。この「+=」のような書き方は、他にも以下のようなものがあります。

演算子 意味 同じ意味の通常形
+= 加算して代入 x += 5 x = x + 5
-= 減算して代入 x -= 3 x = x - 3
*= 乗算して代入 x *= 2 x = x * 2
/= 除算して代入 x /= 4 x = x / 4

サンプルコード

以下のコードは、while文の基本的な使用例です。

# 勇者ぴこりのレベル(1からスタート)
level = 1

# レベルが4未満の間は訓練を繰り返す(4になると条件が偽になり訓練終了)
while level < 4:
    # 訓練を受けているメッセージ
    print(f"勇者ぴこりはレベル{level}の訓練を受けている…")

    # 訓練が終わるとレベルが1上がる
    level += 1

# 最後に「すべての訓練を終えた!」と表示。
print("勇者はすべての訓練を終えた!")
勇者ぴこりはレベル1の訓練を受けている…
勇者ぴこりはレベル2の訓練を受けている…
勇者ぴこりはレベル3の訓練を受けている…
勇者ぴこりはすべての訓練を終えた!

while文の条件式 level < 4 が True の間、繰り返し(ループ)が続きます。つまり、level が 1, 2, 3 のときは level < 4 が真なので、訓練が続きますlevel が 4 になると条件が偽になり、ループを抜けて終了メッセージが表示されます。level += 1 により、訓練が終わるたびにレベルが1上がります。これがないと level がずっと1のままで、ループが終わらず「無限ループ」になります。

無限ループに陥ったときの対応

無限ループとは、以下コードのようにループの条件が永遠に「True(真)」のままで、処理が止まらず延々と繰り返される状態のことです。

# 無限ループの例
while True:
    print("勇者ぴこりは永遠に走り続けている…")

上記コードは、while True: によって条件が常に真なので、ループが止まりません。
意図的に使う場合もありますが、以下のようなミスによって意図せずに意図せずに無限ループになってしまうことがあるので、注意しましょう。

  • 条件を変化させる処理(例:level += 1)を入れ忘れる
  • break文を入れ忘れる(条件が変わらない場合、強制終了の手段がない)

プログラムを実行後、無限ループに陥ったときの止め方は、ターミナルやコマンドプロンプト上で「Ctrl + C」を押します。このコマンドは、「割り込み命令」で、Pythonの実行を強制的に止めることができます。

while文 + break文(強制終了)

break文は、ループの途中でも強制的に抜けるための命令です。 while文の条件がまだTrueでも、breakが実行されるとループは即終了します。

書式(基本構造)

以下は、while文とbreak文を使う時の書式(基本構造)です。

while 条件式①:
    処理①
    if 条件式②:
        break  # 条件②が満たされたらループを強制終了
    処理②

処理③  # ループ終了後に実行される処理

サンプルコード

以下のコードは、while文のループをbreak文で抜ける例です。

# 勇者ぴこりのHP
hp = 100

# 敵の攻撃力
enemy_attack = 20

# HPが0以上ある間はループする(戦闘継続)
while hp > 0:
    # 勇者ぴこりのHPを表示
    print(f"勇者ぴこりのHP: {hp}")

    # 勇者ぴこり
    print(f"勇者ぴこりは敵の攻撃を受けて、HPが{enemy_attack}減った")

    # 勇者ぴこりのHPが敵の攻撃力分だけ減少
    hp -= enemy_attack

    # 勇者ぴこりのHPが40以下になったらループを強制終了(敵から逃げる)
    if hp <= 40:
        print("勇者ぴこりは危険を察知して撤退した!")
        break
勇者ぴこりのHP: 100
勇者ぴこりは敵の攻撃を受けて、HPが20減った
勇者ぴこりのHP: 80
勇者ぴこりは敵の攻撃を受けて、HPが20減った
勇者ぴこりのHP: 60
勇者ぴこりは敵の攻撃を受けて、HPが20減った
勇者ぴこりは危険を察知して撤退した!

上記コードは、 hp > 0 の間、ループが続きますが、 hp <= 40 になったら break 文によってループを強制終了します。

【Python】break文の使い方(for, whileループの途中終了)
Pythonのbreak文でfor, whileループを途中で終了する方法を入門者向けにソースコード付きでまとめました。

while文 + continue文(スキップ)

continue文は、その回の処理だけスキップして、次のループへ進む命令です。ループ全体は止まりません。

書式(基本構造)

while 条件式①:
    処理①
    if 条件式②:
        continue  # 条件式②がTrueならこの回の残り処理をスキップ
    処理②

処理③  # ループ終了後に実行される処理
ゲームでは「一時的な行動不能」や「条件付きスキップ」などに使えます。

サンプルコード

以下のコードは、while文 + continue文の使用例です。

# ターン数を管理する変数(初期値は0)
turn = 0

# ターンが5未満の間、ループを繰り返す(最大5ターン)
while turn < 5:
    # ターンを1進める(勇者ぴこりの行動フェーズ)
    turn += 1

    # ターン3だけは麻痺状態で行動できない
    if turn == 3:
        print("ターン3:勇者ぴこりは麻痺して動けない!")
        continue  # このターンの行動処理をスキップして次のターンへ

    # 通常の行動メッセージを表示
    print(f"ターン{turn}:勇者ぴこりは攻撃した")
ターン1:勇者ぴこりは攻撃した
ターン2:勇者ぴこりは攻撃した
ターン3:勇者ぴこりは麻痺して動けない!
ターン4:勇者ぴこりは攻撃した
ターン5:勇者ぴこりは攻撃した

ターン3だけ turn == 3 がTrueとなるため、if文内のcontinue文が実行されます。つまり、ターン3だけスキップされ、他のターンは通常通り処理されます。

【Python】continue文の使い方(処理スキップ)
この記事では、Python言語のontinue文を用いて特定の条件を満たす場合だけ処理をスキップする方法をソースコード付きで解説します。

while文 + pass文(何もしない)

while文の中で pass を使うと、「条件は満たしているけど、今は何もしない」という“待機状態”になります。

書式

while 条件式:
    pass
部分 説明
while 条件式 条件がTrueの間、繰り返し続ける
pass 何もしない(空の処理)

pass は「この場所に処理を書く予定だけど、今は空っぽにしておくよ」という意味の仮置きです。

サンプルコード

以下のコードは enemy_appeared がずっと True のままで、無限ループになります。実行中に止めるには Ctrl + C を使いましょう。

# 敵の出現フラグ(True:出現した)
enemy_appeared = True

while enemy_appeared:
    pass  # 後で敵を攻撃する処理を書く

print("勇者ぴこりは敵を倒した!")
【Python】pass文の使い方(何もしない処理)
この記事では、Pythonのpass文でfor, whileループを途中で終了する方法を入門者向けにソースコード付きでまとめました。

while文 + else文

Pythonでは、while文にelse文を組み合わせることができます。
ループが正常に終了したときだけ、elseブロックが実行されます。

書式(基本構造)

while 条件式:
    処理①
else:
    処理②

条件式が False になって正常終了したときに処理②が実行されます。
ただし、 break文で中断された場合、else は実行されません。

「すべての処理が終わったあとに報告する」というような動作に使うことができます。

サンプルコード

以下のコードは、while文 + else文の使用例です。

# 探索回数を管理する変数(初期値は0)
count = 0

# 探索回数が3未満の間、探索を繰り返す
while count < 3:
    # 現在の探索回数を表示(1回目〜3回目)
    print(f"勇者ぴこりは探索中…({count + 1}回目)")

    # 探索が終わるたびに回数を1増やす
    count += 1

# whileループが正常に終了したら、elseブロックが実行される
else:
    # 探索完了メッセージを表示
    print("勇者ぴこりの探索が完了した!勇者ぴこりは村へ戻った。")
勇者ぴこりは探索中…(1回目)
勇者ぴこりは探索中…(2回目)
勇者ぴこりは探索中…(3回目)
勇者ぴこりの探索が完了した!勇者ぴこりは村へ戻った。

while文 + input()関数

while文と input() 関数を組み合わると、「ユーザーが特定の入力をするまで処理を繰り返す」という実装ができます。

書式(基本構造)

input() 関数は「ユーザーの入力を待つ」組み込み関数です。

変数 = input("表示したいメッセージ")
  • ユーザーから文字列の入力を受け取る関数です。
  • 入力された内容は文字列型(str)で変数に代入されます。
  • 入力が終わるまで、プログラムは一時停止します(待機状態)。

サンプルコード

以下のコードは、while文と input() 関数を組み合せた例です。

# 無限ループを開始(Trueは常に真なので、ループが止まらない)
while True:
    # プレイヤーからコマンドを入力してもらう
    command = input("コマンドを入力してください(「諦める」で終了): ")

    # 入力されたコマンドが「諦める」だった場合、冒険を終了する
    if command == "諦める":
        print("ぴこりは冒険を終了した!")
        break  # ループを強制終了して、冒険から脱出

    # それ以外のコマンドは実行ログとして表示する
    print(f"→ {command} を実行しました")
  • while True: は条件が常にTrueなので、無限ループになります。
  • input()は、ユーザーから文字列を受け取る関数。入力待ちになります。
  • if command == "諦める": は、「諦める」の入力でブロック内のbreakを実行し、ループを終了します。

ネストされたwhile文

ネストされたwhile文(入れ子構造)」とは、while文の中にさらに別のwhile文が含まれている構造のことです。つまり、ループの中で別のループを動かすことになります。

書式(基本構造)

以下は、ネストされたwhile文の書式(基本構造)です。

while 条件A:
    # 外側のループ処理
    while 条件B:
        # 内側のループ処理
  • 外側の while が 1 回実行されるごとに、内側の while がすべて完了するまで繰り返されます。
  • ループの中にループがあることで、多段階の処理や複数条件の繰り返しが可能になります。

サンプルコード

以下のコードは、ネwhile文が二重構造となる場合の使用例です。

# マップの部屋番号(1〜3)
room = 1

# 外側のループ:部屋ごとの探索
while room <= 3:
    print(f"勇者ぴこりは部屋{room}に入った")

    # 内側のループ:各部屋にある宝箱を調べる(2つずつ)
    box = 1
    while box <= 2:
        print(f"  → 宝箱{box}を調べた")
        box += 1

    print(f"勇者ぴこりは部屋{room}の探索を終えた\n")
    room += 1
勇者ぴこりは部屋1に入った
→ 宝箱1を調べた
→ 宝箱2を調べた
勇者ぴこりは部屋1の探索を終えた

勇者ぴこりは部屋2に入った
→ 宝箱1を調べた
→ 宝箱2を調べた
勇者ぴこりは部屋2の探索を終えた

勇者ぴこりは部屋3に入った
→ 宝箱1を調べた
→ 宝箱2を調べた
勇者ぴこりは部屋3の探索を終えた

コード解説

上記コードには、「2つのwhile文」と「2つのカウント変数roombox)」が登場します。カウント変数とは、ループの回数を管理するための変数です。 勇者ぴこりの探索を「部屋単位」と「宝箱単位」で繰り返すために、2種類のカウント変数(roombox)を使っています。これにより、「部屋ごとに宝箱を調べる」という階層的な処理を行っています。

コードの流れをさらに詳しく見てみましょう。

① カウント変数 room は、外側のループでぴこりが訪れる部屋の番号を管理します。

# マップの部屋番号(1〜3)
room = 1

# 外側のループ:部屋ごとの探索
while room <= 3:
    ...
    room += 1
  • 初期値room = 1 → 最初は部屋1からスタート。
  • 終了条件room <= 3 → 部屋3まで探索したら終了。
  • 更新処理room += 1 → 探索が終わるたびに次の部屋へ進む。

② カウント変数 box は、内側のループで各部屋にある宝箱の番号を管理します。

    # 内側のループ:各部屋にある宝箱を調べる(2つずつ)
    box = 1
    while box <= 2:
        print(f"  → 宝箱{box}を調べた")
        box += 1
  • 初期値box = 1 → 各部屋で最初の宝箱から調査開始。
  • 終了条件box <= 2 → 2つの宝箱を調べたら終了。
  • 更新処理box += 1 → 1つ調べるごとに次の宝箱へ。

処理全体をまとめると、以下のとおりです。

  1. room = 1 → 部屋1に入る
  2. box = 1 → 宝箱1を調べる → box = 2 → 宝箱2を調べる → box = 3 → 内側ループ終了
  3. 部屋1の探索終了 → room = 2 → 部屋2に入る
  4. box = 1 → 宝箱1 → 宝箱2 → 探索終了
  5. room = 3 → 同様に処理
  6. room = 4 → 条件不成立 → 外側ループ終了

練習問題(基礎固め & 資格勉強用)

本ページで学んだ内容の基礎固め、また「Python 3 エンジニア認定基礎試験」や「基本情報技術者試験」などの資格対策にも役立つ練習問題を作成しました。

【問題1】while文の基本構文(難易度★★☆☆☆)

次のうち、Pythonのwhile文として正しく動作するコードはどれか。

A.

x = 0
while x < 5:
    print(x)
    x += 1

B.

x = 0
while x < 5
    print(x)
    x += 1

C.

x = 0
while x < 5:
print(x)
x += 1

D.

x = 0
while x < 5:
    print(x)

正解:A
解説:Pythonでは、`while` の後に「:」を付け、インデントで処理を記述します。Aは構文・インデント・変数更新すべて正しく、正常にループが終了します。
Bは「:」がないため構文エラー、Cはインデントがないためエラー、Dは変数 `x` が更新されないため無限ループになります。

【問題2】無限ループの原因(難易度★★☆☆☆)

次のコードが無限ループになる理由として正しいものはどれか。

x = 0
while x < 5:
    print(x)

A. 条件式が間違っている
B. xが更新されていない
C. print()がループ外にある
D. breakが使われている


正解:B
解説:`x`がループ内で変化しないため、条件がずっとTrueのままになり、無限ループになります。

【問題3】break文の役割(難易度★★☆☆☆)

break文の説明として正しいものはどれか。

A. 条件式を変更する
B. ループを一時停止する
C. ループを強制終了する
D. 次のループをスキップする


正解:C
解説:`break`文は、条件に関係なくループを強制的に終了させる命令です。

【問題4】continue文の動作(難易度★★★☆☆)

continue文が実行されるとどうなるか。

A. ループが終了する
B. その回の残り処理をスキップして次のループへ進む
C. 条件式がFalseになる
D. エラーになる


正解:B
解説:`continue`は現在のループ処理をスキップし、次の繰り返しへ進みます。

【問題5】while + else構文(難易度★★★☆☆)

while文にelseを組み合わせたとき、elseブロックが実行される条件はどれか。

A. 条件式がTrueのとき
B. break文が使われたとき
C. ループが正常に終了したとき
D. 条件式が常にFalseのとき


正解:C
解説:`while`ループが`break`で中断されずに終了した場合、`else`ブロックが実行されます。

【問題6】論理型の判定(難易度★☆☆☆☆)

次のうち、Pythonの論理型(bool型)として正しいものはどれか。

A. Yes, No
B. True, False
C. 1, 0
D. On, Off


正解:B
解説:Pythonでは、論理型は `True`(真)と `False`(偽)で表します。

【問題7】条件演算子(難易度★★☆☆☆)

x != 5 の意味として正しいものはどれか。

A. xが5と等しい
B. xが5でない
C. xが5以上
D. xが5以下


正解:B
解説:`!=` は「等しくない」という意味の条件演算子です。

【問題8】論理演算子の組み合わせ(難易度★★★☆☆)

level > 5 and job == "勇者" の意味として正しいものはどれか。

A. レベルが5以上ならTrue
B. 職業が勇者ならTrue
C. レベルが5以上「かつ」職業が勇者ならTrue
D. レベルが5以上「または」職業が勇者ならTrue


正解:C
解説:`and` は「かつ」を意味し、両方の条件がTrueである場合のみTrueになります。

【問題9】インデントの役割(難易度★★☆☆☆)

Pythonでインデントが正しくないとどうなるか。

A. 自動的に補正される
B. 無視される
C. エラーになる
D. コメントとして扱われる


正解:C
解説:Pythonではインデントが構文の一部なので、正しくないと構文エラーになります。

【問題10】while文の実行順(難易度★☆☆☆☆)

次のコードの出力結果として正しいものはどれか。

x = 1
while x < 3:
    print(x)
    x += 1

A. 1
B. 1 2
C. 1 2 3
D. 2 3


正解:B
解説:初期値 `x = 1` からスタートし、`x < 3` の間ループが続きます。
  • 1回目:`x = 1` → 条件成立 → `print(1)` → `x = 2`
  • 2回目:`x = 2` → 条件成立 → `print(2)` → `x = 3`
  • 3回目:`x = 3` → 条件不成立 → ループ終了

したがって、出力されるのは「1」「2」の2回です。

【問題11】ネストされたwhile文の実行順(難易度★★★★☆)

次のコードの出力結果として正しいものはどれか。

room = 1
while room <= 2:
    box = 1
    while box <= 3:
        print(f"部屋{room}の宝箱{box}")
        box += 1
    room += 1

A. 部屋1の宝箱1〜3のみ表示される
B. 部屋1と部屋2の宝箱1〜3が表示される
C. 部屋1の宝箱1〜2、部屋2の宝箱1〜2が表示される
D. エラーになる


正解:B
解説:外側のループで `room` が1〜2まで繰り返され、各部屋ごとに `box = 1` で初期化されてから3回繰り返されます。

  • 部屋1 → 宝箱1, 2, 3
  • 部屋2 → 宝箱1, 2, 3

ネストされたループの中で、内側のカウント変数を毎回初期化している点が重要です。

【問題12】break文の位置による影響(難易度★★★★☆)

次のコードの出力結果として正しいものはどれか。

x = 1
while x <= 3:
    y = 1
    while y <= 3:
        if y == 2:
            break
        print(f"x={x}, y={y}")
        y += 1
    x += 1

A. x=1〜3すべてで y=1〜3 が表示される
B. x=1〜3すべてで y=1 のみ表示される
C. x=1〜3すべてで y=2 のみ表示される
D. x=1〜3すべてで y=1, y=2 が表示される


正解:B
解説:`y == 2` のとき `break` により内側のループが終了します。
そのため、`y = 1` のときだけ `print()` が実行され、`y = 2` でループが止まります。

  • x=1 → y=1 表示 → y=2 で break
  • x=2 → y=1 表示 → y=2 で break
  • x=3 → y=1 表示 → y=2 で break

【問題13】continue文の影響(難易度★★★☆☆)

次のコードの出力結果として正しいものはどれか。

i = 0
while i < 5:
    i += 1
    if i % 2 == 0:
        continue
    print(i)

A. 1 2 3 4 5
B. 1 3 5
C. 2 4
D. 0 1 2 3 4


正解:B
解説:`i % 2 == 0` のとき `continue` により `print(i)` がスキップされます。
偶数(2, 4)は表示されず、奇数(1, 3, 5)のみ出力されます。

【問題14】変数の初期化位置(難易度★★★★☆)

次のコードの出力結果として正しいものはどれか。

box = 1
room = 1
while room <= 2:
    while box <= 2:
        print(f"部屋{room}の宝箱{box}")
        box += 1
    room += 1

A. 部屋1と部屋2の宝箱1〜2が表示される
B. 部屋1の宝箱1〜2のみ表示される
C. エラーになる
D. 部屋1の宝箱1〜2、部屋2の宝箱3〜4が表示される


正解:B
解説:`box = 1` が外側のループの外にあるため、2回目の部屋では `box = 3` になっており、`box <= 2` がFalseになって内側のループが実行されません。 内側のループ用のカウント変数は、外側ループの中で初期化する必要があります。

【問題15】while + else構文の理解(難易度★★★☆☆)

次のコードの出力結果として正しいものはどれか。

x = 1
while x < 3:
    print(f"x={x}")
    x += 1
else:
    print("ループ終了")

A. x=1 x=2 のみ表示される
B. x=1 x=2 ループ終了 が表示される
C. x=1 x=2 x=3 が表示される
D. エラーになる


正解:B
解説:`while` が正常に終了した場合、`else` ブロックが実行されます。
`x = 1` → `x = 2` → `x = 3` で条件がFalseになり、`else:` の「ループ終了」が表示されます。

課題(実践力強化用)

Pythonプログラミングの実践力を強化したい人向けの課題を用意しました。特にエラーメッセージを読んでコードを修正するという作業は、プログラミングおいて重要ですので、初心者の方は是非チャレンジしてみてください。

課題① 条件付きループ(難易度★☆☆☆☆)

以下の仕様を満たすコードを作成してください。

  • ぴこりのHPを100からスタート
  • 毎ターンHPが15ずつ減る
  • HPが0以下になるまで「ぴこりは戦っている!」と表示する
ぴこりのHP: 100
ぴこりは戦っている!
ぴこりのHP: 85
ぴこりは戦っている!

ぴこりのHP: 0
ぴこりは戦っている!

# ぴこりの初期HPを100に設定
hp = 100

# HPが0以上の間、ループを続ける
while hp >= 0:
    # 現在のHPを表示
    print(f"ぴこりのHP: {hp}")
    # 行動メッセージを表示
    print("ぴこりは戦っている!")
    # HPを15減らす(ダメージ処理)
    hp -= 15

課題② continue文の応用(難易度★★☆☆☆)

以下の仕様を満たすコードを作成してください。

  • ターン数を1〜6まで表示
  • ターン4と6は「ぴこりは眠っている…」と表示し、行動をスキップ
  • それ以外は「ぴこりは行動した」と表示する
ターン1:ぴこりは行動した
ターン2:ぴこりは行動した
ターン3:ぴこりは行動した
ターン4:ぴこりは眠っている…
ターン5:ぴこりは行動した
ターン6:ぴこりは眠っている…

# ターン数の初期値を1に設定
turn = 1

# ターンが6以下の間、ループを続ける
while turn <= 6:
    # ターン4と6は眠っていて行動できない
    if turn == 4 or turn == 6:
        print(f"ターン{turn}:ぴこりは眠っている…")
        turn += 1  # 次のターンへ進める
        continue   # このターンの残り処理をスキップ

    # 通常の行動メッセージを表示
    print(f"ターン{turn}:ぴこりは行動した")
    turn += 1  # 次のターンへ進める

課題③ input()で選択肢分岐(難易度★★★☆☆)

以下の仕様を満たすコードを作成してください。

  • ユーザーに「攻撃」「回復」「逃げる」のいずれかを入力させる
  • 入力に応じて異なるメッセージを表示
  • 「終了」と入力されたらループを終了する
コマンドを入力してください(終了で終了): 攻撃
ぴこりは剣を振った!
コマンドを入力してください(終了で終了): 回復
ぴこりは薬草を使った!
コマンドを入力してください(終了で終了): 終了
ぴこりは冒険を終えた。

# 無限ループでコマンドを受け付ける
while True:
    # ユーザーからコマンドを入力してもらう
    command = input("コマンドを入力してください(終了で終了): ")

    # 「終了」が入力されたら冒険を終える
    if command == "終了":
        print("ぴこりは冒険を終えた。")
        break  # ループを終了

    # コマンドに応じた分岐処理
    elif command == "攻撃":
        print("ぴこりは剣を振った!")
    elif command == "回復":
        print("ぴこりは薬草を使った!")
    elif command == "逃げる":
        print("ぴこりは森へ逃げ込んだ!")
    else:
        # 未知のコマンドに対する対応
        print("不明なコマンドです")

課題④ while + else構文(難易度★★★☆☆)

以下の仕様を満たすコードを作成してください。

  • ぴこりが宝箱を3回調べる
  • 毎回「ぴこりは宝箱を調べた」と表示
  • 調査が終わったら「ぴこりはすべての宝箱を調べ終えた」と表示
ぴこりは宝箱を調べた(1回目)
ぴこりは宝箱を調べた(2回目)
ぴこりは宝箱を調べた(3回目)
ぴこりはすべての宝箱を調べ終えた

# 調査回数の初期値を0に設定
count = 0

# 調査回数が3未満の間、ループを続ける
while count < 3:
    # 現在の調査回数を表示
    print(f"ぴこりは宝箱を調べた({count + 1}回目)")
    count += 1  # 調査回数を1増やす

# ループが正常終了したら、elseブロックが実行される
else:
    print("ぴこりはすべての宝箱を調べ終えた")

課題⑤ breakで異常終了(難易度★★★★☆)

以下の仕様を満たすコードを作成してください。

  • ぴこりが探索を5回繰り返す
  • 3回目に「モンスターが出現!」と表示して探索を中断
  • それまでの探索ログを表示する
探索1:ぴこりは洞窟を進んだ
探索2:ぴこりは洞窟を進んだ
探索3:モンスターが出現!探索を中断!

# 探索回数の初期値を1に設定
count = 1

# 探索回数が5以下の間、ループを続ける
while count <= 5:
    # 3回目にモンスターが出現して探索を中断
    if count == 3:
        print("探索3:モンスターが出現!探索を中断!")
        break  # ループを強制終了

    # 通常の探索メッセージを表示
    print(f"探索{count}:ぴこりは洞窟を進んだ")
    count += 1  # 次の探索へ進める

課題⑥ ネストされたwhile文(難易度★★★★★)

以下の仕様を満たすコードを作成してください。

  • ぴこりが3つの部屋を順番に探索する(部屋1〜3)
  • 各部屋には宝箱が2つある(宝箱1〜2)
  • 宝箱2は罠付きで、調査をスキップする
  • 各部屋の探索ログを表示する
部屋1に入った
→ 宝箱1を調べた
→ 宝箱2は罠が仕掛けられていた!スキップ
部屋1の探索を終えた

部屋2に入った
→ 宝箱1を調べた
→ 宝箱2は罠が仕掛けられていた!スキップ
部屋2の探索を終えた

部屋3に入った
→ 宝箱1を調べた
→ 宝箱2は罠が仕掛けられていた!スキップ
部屋3の探索を終えた


# 部屋番号の初期値を1に設定
room = 1

# 外側のループ:部屋ごとの探索
while room <= 3:
    print(f"部屋{room}に入った")

    # 宝箱番号の初期値を1に設定(部屋ごとに初期化)
    box = 1

    # 内側のループ:宝箱の調査
    while box <= 2:
        if box == 2:
            print(f"  → 宝箱{box}は罠が仕掛けられていた!スキップ")
            box += 1
            continue  # 調査をスキップして次へ
        print(f"  → 宝箱{box}を調べた")
        box += 1

    print(f"部屋{room}の探索を終えた\n")
    room += 1  # 次の部屋へ進める

課題⑦ while + else構文(難易度★★★★☆)

以下の仕様を満たすコードを作成してください。

  • ぴこりが5回の訓練を行う
  • 毎回「ぴこりは訓練した」と表示する
  • 訓練がすべて終わったら「訓練完了!ぴこりは強くなった」と表示する
  • while + else構文を使うこと
訓練1:ぴこりは訓練した
訓練2:ぴこりは訓練した
訓練3:ぴこりは訓練した
訓練4:ぴこりは訓練した
訓練5:ぴこりは訓練した
訓練完了!ぴこりは強くなった

# 訓練回数の初期値を1に設定
training = 1

# 訓練回数が5以下の間、ループを続ける
while training <= 5:
    print(f"訓練{training}:ぴこりは訓練した")
    training += 1  # 次の訓練へ進める

# ループが正常終了したら、elseブロックが実行される
else:
    print("訓練完了!ぴこりは強くなった")

課題⑧ 三角形の表示(難易度★★★★☆)

以下の仕様を満たすコードを作成してください。

  • 三角形を表示する
  • 行数は3行とする
  • 各行に「*」を中央揃えで表示する(1, 3, 5個)
  • ネストされた while 文を使うこと
    *
  ***
 *****

# 表示する行数を指定
rows = 3
line = 1  # 行番号の初期化

# 外側のループ:行ごとの処理
while line <= rows:
    stars = 1 + (line - 1) * 2  # 表示する「*」の数(奇数)
    spaces = rows - line       # 左側の空白数

    # 内側のループ:空白の表示
    s = 1
    while s <= spaces:
        print(" ", end="")
        s += 1

    # 内側のループ:星の表示
    a = 1
    while a <= stars:
        print("*", end="")
        a += 1

    print()  # 改行
    line += 1  # 次の行へ

【コード解説】
三角形は3行で構成され、1行目に「*」が1個、2行目に3個、3行目に5個と、行が進むごとに星の数が奇数で増えていきます。
上記コードでは、まず rows = 3 で三角形の高さ(行数)を指定し、line = 1 で現在の行番号を初期化します。

# 表示する行数を指定
rows = 3
line = 1  # 行番号の初期化

外側の while 文は、行番号が rows 以下の間、繰り返し処理を行います。
各行では、まず表示する星の数を stars = 1 + (line - 1) * 2 で計算します。これは、1行目が1個、2行目が3個、3行目が5個というように、奇数列を生成する式です。次に、左側の空白の数を spaces = rows - line で求め、星の前に空白を表示することで中央揃えの形を作ります。

# 外側のループ:行ごとの処理
while line <= rows:
    stars = 1 + (line - 1) * 2  # 表示する「*」の数(奇数)
    spaces = rows - line       # 左側の空白数

    # 内側のループ:空白の表示
    s = 1

空白の表示は、内側の while 文を使って1文字ずつ出力します。print(" ", end="") によって改行せずに空白を並べ、次に星の表示も同様に while 文で1文字ずつ出力します。星の表示が終わったら print() で改行し、line += 1 によって次の行へ進みます。

    # 内側のループ:空白の表示
    s = 1
    while s <= spaces:
        print(" ", end="")
        s += 1

    # 内側のループ:星の表示
    a = 1
    while a <= stars:
        print("*", end="")
        a += 1

    print()  # 改行
    line += 1  # 次の行へ

このように、外側のループが行を管理し、内側のループが空白と星の描画をすることで、三角形が表示されます。

課題⑨ トライフォース(三角形×3)の表示(難易度★★★★★)

以下の仕様を満たすコードを作成してください。

  • トライフォース(三角形が3つ)を表示する
  • 上段に1つ、下段に2つの三角形を並べる
  • 各三角形は高さ3、中央揃えで表示する
  • ネストされた while 文を使うこと
        *
      ***
    *****
    *      *
   ***   ***
 ***** *****

# 三角形の高さ
height = 3

# 上段の三角形(中央)
row = 1
while row <= height:
    # 空白の数(中央揃え)
    space = height * 2 - row
    s = 1
    while s <= space:
        print(" ", end="")
        s += 1

    # 星の数(奇数)
    star = 1 + (row - 1) * 2
    a = 1
    while a <= star:
        print("*", end="")
        a += 1

    print()
    row += 1

# 下段の三角形(左右)
row = 1
while row <= height:
    # 左側の空白(中央揃え)
    space = height - row
    s = 1
    while s <= space:
        print(" ", end="")
        s += 1

    # 左の三角形の星
    star = 1 + (row - 1) * 2
    a = 1
    while a <= star:
        print("*", end="")
        a += 1

    # 中央の空白(左右の三角形の間)
    gap = (height - row) * 2 + 1
    g = 1
    while g <= gap:
        print(" ", end="")
        g += 1

    # 右の三角形の星
    a = 1
    while a <= star:
        print("*", end="")
        a += 1

    print()
    row += 1

【コード解説】
トライフォースは、上段に1つ、下段に左右2つの三角形が並ぶ構造になっており、各三角形は高さ3のピラミッド型になります。

まず、上段の中央三角形を描画するために、以下の処理を行います。

height = 3
row = 1
while row <= height:
    ...
    row += 1

ここで height は三角形の高さ(行数)を表し、row は現在の行番号を管理するカウント変数です。

各行では、まず左側の空白を表示して中央揃えを実現します。

space = height * 2 - row
s = 1
while s <= space:
    print(" ", end="")
    s += 1

この空白の数は、三角形の幅に合わせて調整されており、1行目では最も多く、下に行くほど減っていきます。

次に、星(*)を奇数個表示します。

star = 1 + (row - 1) * 2
a = 1
while a <= star:
    print("*", end="")
    a += 1

この式により、1行目は1個、2行目は3個、3行目は5個の星が表示され、ピラミッド型の三角形が形成されます。
続いて、下段に左右2つの三角形を並べて描画します。こちらも row = 1 から始まり、while row <= height の外側ループで行ごとの処理を行います。

まず、左側の空白を表示して全体の中央揃えを整えます。

space = height - row
s = 1
while s <= space:
    print(" ", end="")
    s += 1

次に、左側の三角形の星を表示します。

star = 1 + (row - 1) * 2
a = 1
while a <= star:
    print("*", end="")
    a += 1

その後、左右の三角形の間に空白を挿入します。

gap = (height - row) * 2 + 1
g = 1
while g <= gap:
    print(" ", end="")
    g += 1

この gap の計算によって、左右の三角形が適切な距離で並ぶようになります。

最後に、右側の三角形の星を同じ数だけ表示します。

a = 1
while a <= star:
    print("*", end="")
    a += 1

そして print() によって改行し、次の行へ進みます。
つまり、外側の whileは行ごとの処理、内側の whileは、空白・星・間隔の描画を行っています。

関連ページ(もっと学びたい人へ)

Pythonの基礎から応用例まで、以下ページから学ぶことができます。

【Python超入門】基礎から応用例まで幅広く解説
Pythonの使い方について、基礎文法から応用例まで入門者向けに解説します。
この記事を書いた人
西住技研

プログラミング言語「Python」を研究、仕事、趣味でデータ分析や作業自動化などに活用してきたノウハウを情報発信しています。
筆者の詳しいプロフィールやお問合せはこちらのページまで。
YoutubeX(旧Twitter)でも情報発信中です!

西住技研をフォローする
Python基礎

コメント