コース一覧
    Pythonループ・関数
    複数の戻り値

    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分

    複数の戻り値

    複数の戻り値

    合計だけでは足りない

    支出の一覧を見るとき、知りたいのはたいてい 1 つではありません。合計も平均も両方ほしい、というのが普通です。関数を 2 つ作って同じリストを 2 回まわすのは、いかにも無駄です。

    Python の関数は、return のうしろにカンマで値を並べるだけで、複数の値をまとめて返せます。

    Python

    def min_and_max(a, b):
        if a <= b:
            return a, b
        return b, a
    
    low, high = min_and_max(300, 120)
    print(low, high)

    120 300 が出ます。return a, b と書くと、Python は (a, b) という タプル を作って返します。タプルは変更できない並びで、リストの親戚のようなものです。

    カンマで並べて、カンマで受け取る

    返ってきた 2 つの値は、左辺に変数を 2 つ並べて受け取れます。これを アンパック と呼びます。左辺の数と右辺の数が合っていないと ValueError になり、not enough values to unpack と出ます。1 つの変数で受ければ、並びがまるごと 1 つの値として入ります。

    アンパックはリストにも同じように効きます。この学習環境の判定はリスト形式なので、演習では リストで返す ことにします。書き方も受け取り方も、タプルのときと変わりません。

    return を 2 行並べても、2 行目には決して届きません。return は関数をその場で終わらせます。返したい値が 2 つあるなら、1 つの return にカンマで並べます。

    0 件で割ると止まる

    平均のように割り算が入る関数では、0 で割る可能性を先に片付けます。

    Python

    print(sum([1, 2, 3]))
    print(len([1, 2, 3]))
    print(round(3.14159, 2))

    6 3 3.14 が出ます。sum はリストの合計、len は要素の個数を返す組み込み関数です。round の 2 つ目の引数は、小数点以下を何桁残すかで、省略すると整数に丸められます。

    件数が 0 のとき len は 0 を返すので、そのまま割ると ZeroDivisionError でプログラムが止まります。関数の入口で件数を見て、決めておいた値をその場で返してしまえば、あとの計算は安心して書けます。

    解説

    エラーで止まるプログラムより、決めておいた答えを返すプログラムのほうが使えます。危ない入力を先に片付けてから本題に入る、という順番は実務でもそのまま使います。

    やってみよう

    関数 total_and_average(prices) を実装してください。金額のリスト prices を受け取り、[合計, 平均] というリストを return します。

    平均は round で小数第 1 位まで丸めます。prices が空のリストのときは [0, 0] を返します。

    手元では total, average = total_and_average([120, 80, 300]) と書いて受け取り、print(total) と print(average) の両方を見てみてください。500 と 166.7 になれば正解です。

    要件

    1. 関数名は total_and_average で、引数はリスト prices の 1 つ
    2. 戻り値は [合計, 平均] のリスト
    3. 平均は round で小数第 1 位まで丸める
    4. prices が空のリストのときは [0, 0] を返す

    ヒント

    合計は sum(prices)、件数は len(prices) で求まります

    平均は round(total / len(prices), 1) です

    空のリストを先に if で弾いておくと ZeroDivisionError を防げます

    戻り値は [total, average] の形のリストにします

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

    関連レッスン

    • divmod

      divmod で商と余りを 1 回の呼び出しで得る。割り勘の結果を返す split_even を作る

    • 変数のスコープ

      ローカル変数とグローバル変数の違い。外を書き換えるバグを引数と戻り値の形に直す

    • lambda関数

      名前のない小さな関数を式で書く。sorted の key に渡して金額順に並べ替える

    • つくる:関数に分割

      第6章の総仕上げ。件数・合計・残額・予算オーバー判定を辞書で返す summarize を作る

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

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

    • 関数処理に名前を付けて再利用できる単位
    • リスト順序付きで複数の値を扱うデータ構造
    • タプル順序付きで変更不可のシーケンス
    • 変数データに名前をつけて参照する仕組み
    • 引数位置引数=順番で渡す。
    • 戻り値呼び出し元への返答を表す点線矢印
    main.py
    エディタを読み込んでいます

    メモ

    複数の戻り値

    ⌘S で保存