コース一覧
    Pythonループ・関数
    whileで繰り返す

    Pythonループ・関数

    ループと関数の基本を学び、繰り返し処理を分割して読みやすく書けるようにします。

    1
    ループ
    01. forで合計15分
    02. whileで繰り返す15分
    03. rangeとstep15分
    04. breakとcontinue15分
    05. enumerateで番号付け15分
    06. zipで組み合わせ15分
    07. 入れ子ループ15分
    08. つくる:何件でも記録15分
    09. 第5章クイズ10分
    2
    関数
    01. 関数を定義する15分
    02. 引数と戻り値15分
    03. デフォルト引数15分
    04. キーワード引数15分
    05. 複数の戻り値15分
    06. divmod15分
    07. 変数のスコープ15分
    08. lambda関数15分
    09. つくる:関数に分割15分
    10. 第6章クイズ10分

    whileで繰り返す

    while と無限ループ

    何件入力されるかは、使う人にしか分からない

    for は決まった数だけ回るループでした。並んでいるものが 3 件なら 3 周です。

    ところが、おこづかい帳に何件記録するかは使う人にしか分かりません。3 件で終わる日もあれば 20 件の日もあります。条件が続くかぎり回り続けるループが while です。

    Python

    while True:
        text = input("品名を入力してください ")
        if text == "おわり":
            break
        print(text + " を記録しました")

    while のうしろには条件を書き、それが真であるあいだ、下にインデントした処理を繰り返します。while True は条件がいつも成り立つので、そのままでは永遠に回ります。止める役目を担っているのが break で、その場でループを抜ける命令です。

    if は条件を 1 回だけ調べますが、while は 1 周まわるたびに調べ直します。形は似ていても、そこが決定的に違います。

    条件はどうやって偽になるのか

    while True ではない形では、条件が偽になる仕掛けを自分で用意します。

    Python

    count = 0
    while count < 3:
        print(count)
        count = count + 1

    0 1 2 を表示して止まります。4 周目に入ろうとしたとき count は 3 になっていて、3 < 3 が偽になるからです。

    count = count + 1 の行を書き忘れると count は 0 のままで、条件がいつまでも真になり、プログラムが止まらなくなります。これを 無限ループ と呼びます。手元で止まらなくなったら、Ctrl と C の同時押しで強制終了できます。

    解説

    while を書いたら、その場で「この条件はどうやって偽になるのか」を口に出して確認します。答えられないなら無限ループです。

    キーボードの代わりに、リストから 1 件ずつ読む

    このコースの採点は、関数が return した値を見ます。キーボードは繋がっていないので input() は使えません。そこで演習では、入力されるはずだった文字列の並びをリストで受け取り、input() を 1 回呼ぶ代わりにリストから 1 件取り出す、と読み替えます。

    そのために借りる道具が 3 つあります。

    Python

    names = ["りんご", "みかん"]
    print(len(names))
    print(names[0])
    names.append("パン")

    len は件数を返すので 2 が出ます。角かっこの中の数は位置で、0 が先頭、1 が次です。件数が 2 なら読める位置は 0 と 1 までで、2 を指すと IndexError になります。append はリストの末尾に 1 件足す命令です。

    読む位置を表す変数を 0 から始め、1 周ごとに 1 つ進めていけば、while で先頭から順にたどれます。位置が件数に届いたら、もう読むものが無いのでループが終わります。

    やってみよう

    関数 collect_until_end(inputs) を実装してください。引数 inputs は文字列のリストで、入力されるはずだった品名が順番に並んでいます。

    先頭から順に見ていき、"終了" に当たったらそこで止め、それより前の品名だけを並べたリストを return します。"終了" が含まれていない場合は、全部を並べたリストを返します。空のリストを渡されたときは [] を返します。

    for でも書けますが、今回は while で書いてみてください。位置を進める行を書き忘れないよう気をつけてください。

    要件

    1. 関数名は collect_until_end で、引数はリスト inputs の1つだけにする
    2. while を使って先頭から順に見ていく
    3. "終了" に当たったらそこで止め、それより前の品名だけを返す
    4. "終了" が無い場合と空のリストの場合も正しく動くようにする

    ヒント

    items = [] と i = 0 をループの前に用意します

    while i < len(inputs) が「まだ読むものがある」という条件です

    inputs[i] で i 番目の1件を取り出せます。取り込んだら i = i + 1 で位置を進めます

    "終了" のときは items に足さずに break でループを抜けます

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

    関連レッスン

    • rangeとstep

      range の刻み幅を使って1週間分の日付見出しを並べる day_labels を作る

    • breakとcontinue

      0円は continue で飛ばし、-1 は break で打ち切る total_skip_zero を作る

    • enumerateで番号付け

      enumerate で品名リストに1から始まる通し番号を振る numbered_list を作る

    • zipで組み合わせ

      zip で品名リストと金額リストを組にし、レシート行に整える pair_lines を作る

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • インデントPythonはインデント(通常スペース4つ)でコードブロックを定義する。
    • 処理計算や代入を表す長方形
    • リスト順序付きで複数の値を扱うデータ構造
    • 関数処理に名前を付けて再利用できる単位
    • 変数データに名前をつけて参照する仕組み
    • 引数位置引数=順番で渡す。
    main.py
    エディタを読み込んでいます

    メモ

    whileで繰り返す

    ⌘S で保存