MENU

4-03 繰り返し処理

学習目標

  • for文を使って決まった回数の繰り返し処理ができる
  • while文を使って条件に基づく繰り返し処理ができる
  • range()関数を理解し活用できる
  • ネストした繰り返し処理を理解する
  • 実際のプログラムで繰り返し処理を活用できる

前回の復習

前回学んだ内容を簡単に確認しましょう:

# User input and conditional statements
age = int(input("Please enter your age: "))

if age >= 18:
    print("You are an adult")
elif age >= 13:
    print("You are a teenager")
else:
    print("You are a child")

復習問題:上のコードを実行して、いろいろな年齢を入力してみよう


1. 繰り返し処理とは

同じ処理を何度も実行することを「繰り返し処理」または「ループ」と呼びます。プログラミングでは非常に重要な概念です。

繰り返し処理が必要な場面

  • 1から10まで数字を表示したい
  • ユーザーが正しい値を入力するまで入力を求め続けたい
  • リストの全ての要素に対して同じ処理をしたい

2. for文の基本

for文は「決まった回数」繰り返す時に使います。

基本的なfor文

# Display numbers from 0 to 4
for i in range(5):
    print("Number:", i)

重要:インデント(字下げ)について Pythonでは、for文のどこからどこまでが繰り返されるかを**インデント(字下げ)**で決めます。

# Indented parts are repeated
for i in range(3):
    print("This is repeated")    # Repeated
    print("This is also repeated")  # Repeated
print("This is NOT repeated")   # Not repeated (no indent)

実習1:上のコードを実行して、どの部分が繰り返されるか確認してみよう

range()関数の使い方

range()関数は数値の範囲を作る関数です。

# range(end) - from 0 to end-1
for i in range(3):
    print(i)  # 0, 1, 2 will be displayed

print("---")

# range(start, end) - from start to end-1
for i in range(2, 6):
    print(i)  # 2, 3, 4, 5 will be displayed

print("---")

# range(start, end, step) - with specified interval
for i in range(0, 10, 2):
    print(i)  # 0, 2, 4, 6, 8 will be displayed

実習2:range()関数の様々な使い方を試してみよう

なぜ終了値-1になるのか? プログラミングでは0から数え始めるため、range(5)は0, 1, 2, 3, 4の5個の数字を作ります。これにより要素数と一致して扱いやすくなります。

文字列を繰り返す

# Display Hello 5 times
for i in range(5):
    print("Hello, World!")

print("---")

# Display with numbers
for i in range(1, 6):
    print(f"Round {i}: Start!")

実習3:自分の名前を10回表示するプログラムを作ってみよう


3. for文の応用

計算の繰り返し

# Calculate sum from 1 to 10
total = 0
for i in range(1, 11):
    total = total + i
    print(f"i = {i}, total = {total}")

print("Final total:", total)

九九表を作る

# Display 5 times table
number = 5
for i in range(1, 10):
    result = number * i
    print(f"{number} x {i} = {result}")

実習4:好きな数字の段を作ってみよう


4. while文の基本

while文は「条件が真の間」繰り返し続けます。forが繰り返しの回数を指定しているのに対し、whileは条件で繰り返しを制御します。

基本的なwhile文

特定の条件を満たす間、同じ作業を繰り返す場合に while 使います。

# Display from 1 to 5
count = 1
while count <= 5:
    print("Count:", count)
    count = count + 1  # Increase count by 1

print("Loop finished")

重要:while文では必ず条件が偽になるように変数を更新しないと、無限ループになってしまいます!

無限ループから抜ける方法:

  • Windowsの場合Ctrl + C を押す
  • Macの場合Control + C を押す(CommandキーではなくControlキー)
  • PythonAnywhereの場合:上記で止まらない時は、ブラウザのタブを閉じて新しいコンソールを開く

実習5:上のコードを実行してみよう

ユーザー入力を繰り返す

# Repeat until correct password is entered
correct_password = "python123"

while True:
    password = input("Please enter password: ")
    if password == correct_password:
        print("Access granted!")
        break  # Exit the loop
    else:
        print("Wrong password. Try again.")

print("Welcome!")

実習6:パスワード認証プログラムを実行してみよう


5. break文とcontinue文

forwhile で繰り返し作業を、
ある条件で中断させるのに break を使います。
ある条件だけ除外させるのに continue を使います。

break文

breakが読み込まれると、ループを終了する

# Count from 1 to 10, but stop at 7
for i in range(1, 11):
    if i == 7:
        print("Breaking at 7")
        break
    print(i)

print("Loop ended")

while True: とbreak の組み合わせ

while True:と書くと条件はずっと trueになるので永遠にループは続けよという意味になります。ここから抜け出すために、ループの中にif文と上記のbreakと組み合わせます。何回繰り返せばよいのか不明なループの場合はこの仕組みを使います。

while True:   #Keep looping indefinitely
    n = int(input("Enter a number (press 0 to exit):"))
    if n == 0:
        break # ← Break out of the loop here

下の「課題1」では、0を入力するまで、同じ計算を続け、0が入力されたときにループから抜けるために、上記の仕組みを使います。

continue文

continueが読み込まれると、それ以降はスキップしてループを継続する。ループを継続中に、ある条件だけを除外したいときに使う。

# Display only even numbers from 1 to 10
for i in range(1, 11):
    if i % 2 == 1:  # If odd number
        continue    # Skip
    print("Even number:", i)

%演算子(余りを求める)について:

  • i % 2は、iを2で割った余りを求める
  • 例:5 % 2 = 1(5÷2=2余り1)、6 % 2 = 0(6÷2=3余り0)
  • 奇数は2で割ると余りが1、偶数は余りが0になる

実習7:break文とcontinue文を試してみよう


6. ループの中にループ

ループの中にさらにループを書くことができます。これを「ネスト(入れ子構造)」と呼びます。

基本的なループの中のループ

# Create a 3x3 table
for row in range(1, 4):
    for col in range(1, 4):
        print(f"({row}, {col})", end=" ")
    print()  # New line

end=" "について:

  • 通常、print()は出力後に自動的に改行する
  • end=" "を指定すると、改行の代わりにスペースを出力する
  • これにより横一列に並べて表示できる
  • カンマ(,)は引数(パラメータ)を区切る記号

九九表を完全に作る

print("=== Multiplication Table ===")
for i in range(1, 10):
    for j in range(1, 10):
        result = i * j
        print(f"{result:2}", end=" ")  # Display aligned in 2 digits
    print()  # New line

実習8:ネスト(ループの中のループ)で図形を作ってみよう


7. 実践的なプログラム

例1:数当てゲーム

import random

print("=== Number Guessing Game ===")
secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 10

print("I'm thinking of a number between 1 and 100")
print(f"You have {max_attempts} attempts")

while attempts < max_attempts:
    try:
        guess = int(input("Enter your guess: "))
        attempts = attempts + 1
        
        if guess == secret_number:
            print(f"Congratulations! You found it in {attempts} attempts!")
            break
        elif guess < secret_number:
            print("Too low!")
        else:
            print("Too high!")
            
        remaining = max_attempts - attempts
        if remaining > 0:
            print(f"Attempts remaining: {remaining}")
    
    except ValueError:
        print("Please enter a valid number")
        attempts = attempts - 1  # Do not count invalid input attempts

if attempts == max_attempts and guess != secret_number:
    print(f"Game over! The number was {secret_number}")

例2:星でピラミッドを作る

# Enter pyramid height
height = int(input("Enter pyramid height: "))

for i in range(1, height + 1):
    # Display spaces
    for j in range(height - i):
        print(" ", end="")
    
    # Display stars
    for k in range(i):
        print("* ", end="")
    
    print()  # New line

実習9:数当てゲームまたはピラミッドプログラムを実行してみよう


8. 課題

課題1:合計計算プログラム

ユーザーが数値を入力し続け、「0」が入力されたら入力を終了して、それまでに入力された数値の合計と平均を表示するプログラムを作ってください。

解答例
total = 0      # Total (initially 0)
count = 0      # The number of entries entered (initially 0)

while True:
    n = float(input("Please enter a number (0 to exit):"))

    if n == 0:
        break  # Exit when 0 is entered

    total = total + n   # Add to Total
    count = count + 1  # Count the number of n

# Average Calculation
    average = total / count

print("total:", total)
print("average:", average)

課題2:倍数判定プログラム

1から100までの数字について、以下の条件で表示するプログラムを作ってください:

  • 3の倍数の時:「Fizz」
  • 5の倍数の時:「Buzz」
  • 3と5の両方の倍数の時:「FizzBuzz」
  • それ以外:そのまま数字を表示
解答例
for i in range(1, 101):
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

課題3:パターン表示プログラム

以下のようなパターンを表示するプログラムを作ってください:

*
**
***
****
*****
解答例
for i in range(5):
    for  j in range(i+1):
        print("*",end="")
    print()

発展課題:メニュー式計算機

以下の機能を持つ計算機を作ってください:

  1. 足し算
  2. 引き算
  3. 掛け算
  4. 割り算
  5. 終了

ユーザーがメニューから選択し、計算を実行後、再びメニューを表示する(5を選ぶまで繰り返す)

ヒント

  • while Trueでメインループを作る
  • if-elif文でメニュー選択を処理
  • break文で終了処理
解答例
while True:
    print("\n===== Calculator Menu =====")
    print("1: Addition")
    print("2: Subtraction")
    print("3: Multiplication")
    print("4: Division")
    print("5: Exit")
    print("===========================")

    choice = input("Select an option (1-5): ")

    if choice == "5":
        print("Exiting the program.")
        break

    # Input numbers
    num1 = float(input("Enter the first number: "))
    num2 = float(input("Enter the second number: "))

    if choice == "1":
        print("Result:", num1 + num2)

    elif choice == "2":
        print("Result:", num1 - num2)

    elif choice == "3":
        print("Result:", num1 * num2)

    elif choice == "4":
        if num2 == 0:
            print("Error: Cannot divide by zero.")
        else:
            print("Result:", num1 / num2)

    else:
        print("Invalid choice. Please enter a number from 1 to 5.")

まとめ

今日学んだこと:

  • for文を使った決まった回数の繰り返し
  • range()関数の様々な使い方
  • while文を使った条件付きの繰り返し
  • break文とcontinue
  • ネストしたループ
  • 実践的なプログラムでの繰り返し処理の活用

次回は、リストと辞書について学習します。

宿題:課題1〜3を完成させ、可能であれば発展課題にもチャレンジしてみましょう。

コメント

コメントする