edubun
日本語

forとwhileでくり返す

range(5)は0、1、2、3、4を作ります。数は5つで、5は含まれません。

3行のループを実行して、totalが増えるのを見る

説明を読む前に、このプログラムをIDLEにコピーして実行しましょう。次に、リストを自分の数に変えて、もう一度実行します。

total = 0
for n in [3, 5, 2]:
    total = total + n
    print(n, total)
print("done", total)
出力
3 3
5 8
2 10
done 10

for行は、リストの項目を1つずつ取ります。1回りするたびに、変数nは次の項目を指し、下のインデントされた行がその値で1回実行されます。インデントされた行を1回通ることを、反復と呼びます。最後の項目のあと、Pythonは、インデントされていない最初の行に進むので、「done」は最後に1回だけ出力されます。トレース表がパターンをはっきりさせます。

回nその回のあとのtotal出力された内容
(前)0
1333 3
2585 8
32102 10
(後)10done 10
1回ごとに、次の項目がnに入り、totalに足されます。累計は、最もよくあるループのパターンです。

変数totalは累積変数と呼ばれ、ループの前に0で始まり、毎回何かを集めます。total = total + nという行はとてもよくあるので、Pythonには短い形total += nがあります。数えるのも、count += 1で同じように働きます。

range()が数を作ってくれる

何かを決まった回数くり返すには、range()を使ってループします。range(5)は0、1、2、3、4を返します。0で始まり、スライスと同じく5の手前で止まります。range(1, 6)は1から5を返します。3つ目の数が歩幅を決め、range(0, 10, 2)は0から8の偶数を返します。韓国の子どもが全員、2年生で暗唱する7の段の九九は、2行のループです。

for i in range(1, 10):
    print(7, "x", i, "=", 7 * i)
出力
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63

forループは文字列の文字を順にたどることもできるので、文字を数えるのが簡単です。

count = 0
for ch in "banana":
    if ch == "a":
        count += 1
print(count)
出力
3

whileは、条件がTrueである限りくり返す

whileループには、たどるリストがありません。条件を調べ、Trueならインデントされた行を実行し、また調べることをくり返します。「合計が5万ウォンになるまで貯め続ける」のように、回数があらかじめわからない仕事に合います。ループの中で何かが条件を変えなければ、ループは終わりません。そうなったら、Ctrl+Cでプログラムを止めましょう。

saved = 0
weeks = 0
while saved < 50000:
    saved += 12000
    weeks += 1
print(weeks, saved)
出力
5 60000

breakは、途中でもすぐにループを抜けます。探していて、見つけたらすぐ止められるときに便利です。下のループは、60未満の最初の点数で止まり、88は見ません。

for s in [72, 91, 55, 88]:
    if s < 60:
        print("first below 60:", s)
        break
    print("ok", s)
出力
ok 72
ok 91
first below 60: 55
for x in ...各項目について、インデントされた行を1回ずつ実行する
range(a, b)aから、bは含まずにbの手前までの整数
while条件がTrueの間くり返す
累積変数回をまたいで合計を集める変数
+=total += nは、total = total + nの短縮形
breakすぐにループを抜ける
  1. このコードは何を出力しますか。
    for i in range(3):
        print(i)
    • 0
      1
      2
    • 1
      2
      3
    • 0
      1
      2
      3
    • 3
  2. このコードは何を出力しますか。
    total = 0
    for n in range(1, 5):
        total += n
    print(total)
  3. このコードは何を出力しますか。
    print(list(range(0, 10, 3)))
  4. このコードは何を出力しますか。
    total = 0
    for n in [1, 2, 3]:
        total += n
        print(total)
    • 6
    • 1
      3
      6
    • 1
      2
      3
    • 0
      1
      3
  5. このコードは何を出力しますか。
    count = 0
    for ch in "seoul":
        if ch in "aeiou":
            count += 1
    print(count)
  6. このコードは何を出力しますか。
    n = 1
    while n < 20:
        n = n * 2
    print(n)
  7. このコードは何を出力しますか。
    for s in [5, 8, 3, 9]:
        if s > 6:
            print(s)
            break
  8. このコードはhiを何回出力しますか。
    for i in range(2, 8):
        print("hi")
  9. このコードは何を出力しますか。
    word = ""
    for ch in "abc":
        word = ch + word
    print(word)
  10. プログラムが1から100までの合計を出力するように、行を並べてください。
    出力
    5050
よくある間違い
  • 「range(1, 10)は10まで行く。」 10の手前で止まるので、最後の値は9です。1から10なら、range(1, 11)と書きます。
  • 「私のwhileループは問題ない。時間がかかるだけ。」 ループの中で何も条件を変えなければ、止まりません。条件の中の変数が毎回更新されているかを確かめ、暴走したループはCtrl+Cで止めましょう。
  • 「printをループの中に置いても外に置いても変わらない。」 forの下にインデントされていれば毎回実行され、左端にあれば、ループのあとで1回実行されます。毎ステップが必要か、最終的な答えだけでよいかを決めましょう。
先生からひとこと説明の前に学習者にループを実行させ、そのあと黒板でトレース表を一緒に埋めましょう。この表が、「インデントされた行は項目ごとに1回実行される」を具体的にします。つまずく場所は2つ、range()の終わりの値と、最後のprintのインデントです。whileループでは、Runを押す前に、最終的に条件をFalseにする行を指させましょう。7の段の九九は、期待される出力を暗記していて一目で確かめられる韓国の学習者にとって、手軽に自信がつく例です。
ポイント
  • for x in list:インデントされた行を、項目ごとに1回実行する。
  • range(a, b)はbの手前で止まる。range(n)は0からn - 1。
  • 累積変数はループの前に始まり、ループの中で増える。
  • whileは条件がTrueの間くり返す。何かがそれを変えなければならない。
  • breakはすぐにループを抜ける。
このコースの出典 (6)
  • Python Software Foundation, The Python Tutorial for Python 3.12 (docs.python.org/3.12/tutorial: 2 Using the Python Interpreter, 3 An Informal Introduction to Python (numbers, text, lists), 4 More Control Flow Tools (if, for, range, break and continue, defining functions, default argument values, 4.10 coding style: 4-space indentation), 5 Data Structures (list methods, 5.5 dictionaries, insertion order), 8 Errors and Exceptions (syntax errors, exceptions, reading the traceback, handling exceptions), 15 Floating-Point Arithmetic (0.1 + 0.2))
  • Built-in Functions (docs.python.org/3.12/library/functions.html: print, input, len, int, float, str, type, round (round half to even: round(0.5) and round(-0.5) are 0, round(1.5) is 2), range, sum, min, max, sorted)
  • Built-in Types (str methods upper, lower, replace, strip; dict.get; list.append, pop, remove, sort returning None)
  • General Python FAQ (docs.python.org/3.12/faq/general.html: Guido van Rossum began Python in the 1989 Christmas holidays, posted it to USENET in February 1991, named it after Monty Python's Flying Circus)
  • Curriculum for the Korean pages: 교육부 고시 제2022-33호 [별책 10] 정보과 교육과정 (PDF read 2026-10-19: 중학교 정보 [9정03-05] 리스트 등 데이터를 순차적으로 저장하는 구조, [9정03-06] 논리 연산과 중첩 제어 구조, [9정03-07] 함수 활용과 디버거로 오류 수정, [9정03-08] 실생활 문제를 프로그래밍으로 해결, 적용 시 고려 사항 「학생의 수준을 고려하여 적합한 프로그래밍 언어를 선정」; 고등학교 정보 [12정03-04] 자료형, [12정03-05] 표준입출력, [12정03-07] 제어 구조)
  • Bug story only: Smithsonian National Museum of American History, Log Book With Computer Bug, 1947, Harvard Mark II, "first actual case of bug being found", probably not Hopper's log book (americanhistory.si.edu/collections/object/nmah_334663, read 2026-10-19)

確認日: 2026-10-19