1. 1000 円を 3 人で割ると 333 円ずつで 1 円余る
  2. 1200 円を 4 人で割ると割り切れる
  3. 500 円を 3 人で割ると 166 円ずつで 2 円余る
  4. 0 円なら 1 人ぶんも余りも 0
  5. 人数が 0 のときはエラーにせず [0, 0] を返す
コース一覧
Python入門:基礎文法編
divmod

Python入門:基礎文法編

変数、条件分岐、ループ、関数、リスト・辞書、ファイル操作など Python の基礎文法を、ブラウザ上で毎レッスン実際にコードを書き、自分だけの「おこづかい帳アプリ」を育てながら学べる無料コースです。プログラミング完全未経験から始められ、環境構築や事前知識は一切不要です。約 18 時間 (1 日 30 分 × 37 日) で 74 レッスンを修了でき、修了後は入力・集計・ファイル保存まで備えたスクリプトを1から書けるようになります。

1
はじめての Python
01. printで表示15分
02. 文字列の連結15分
03. 四則演算15分
04. 実行順序15分
05. コメント15分
06. エラーを読んでみる15分
07. つくる:レシート表示15分
08. 第1章クイズ10分
2
変数とデータ型
01. 変数15分
02. typeで型を調べる15分
03. 数値への変換15分
04. 文字列への変換15分
05. boolとNone15分
06. f-string15分
07. 入力を受け取る15分
08. つくる:入力できるおこづかい帳15分
09. 第2章クイズ10分
3
演算子と式
01. 比較演算子15分
02. 論理演算子15分
03. in演算子15分
04. 剰余と切り捨て除算15分
05. 連鎖比較と優先順位15分
06. 三項演算子15分
07. つくる:予算チェック15分
08. 第3章クイズ10分
4
条件分岐
01. if文の基本15分
02. if / elif / else15分
03. 条件の組み合わせ15分
04. match文15分
05. 定番:FizzBuzz判定15分
06. デフォルト値とor15分
07. つくる:カテゴリ自動判定15分
08. 第4章クイズ10分
5
ループ
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分
6
関数
01. 関数を定義する15分
02. 引数と戻り値15分
03. デフォルト引数15分
04. キーワード引数15分
05. 複数の戻り値15分
06. divmod15分
07. 変数のスコープ15分
08. lambda関数15分
09. つくる:関数に分割15分
10. 第6章クイズ10分
7
リストと辞書
01. リストの追加と削除15分
02. スライス15分
03. 辞書の基本15分
04. 辞書を走査15分
05. keyでソート15分
06. setで重複除去15分
07. リスト内包表記15分
08. タプルアンパック15分
09. つくる:カテゴリ別集計15分
10. 第7章クイズ10分
8
ファイルとエラー処理
01. ファイルを読み込む15分
02. ファイルに書き込む15分
03. withで安全に扱う15分
04. CSV形式で保存15分
05. try-exceptで備える15分
06. 例外の種類15分
07. つくる:保存機能15分
08. 第8章クイズ10分
9
総合制作
01. 全機能を統合しよう15分
02. 月間レポート機能15分
03. 自由拡張15分
04. 完成と次のステップ10分

divmod

divmod で商とあまりを一度に

同じ割り算を 2 回書いている

友だち 3 人で 1000 円ぶんのお菓子を割り勘するとき、知りたいのは「1 人いくらか」と「いくら余るか」の 2 つです。第 3 章の道具だけで書くと、// と % で同じ割り算を 2 回することになります。

Python には、この 2 つを 1 回で返す組み込み関数 divmod があります。

Python

hour, minute = divmod(170, 60) print(hour, minute)

2 50 が出ます。170 分は 2 時間 50 分だと 1 行で分かりました。前回学んだ複数の戻り値の実物が、標準の関数として最初から用意されているわけです。

返ってくるのは 2 つ組

divmod が返すのはタプルで、前が商、うしろが余りです。前回と同じくアンパックで 2 つの変数に分けられます。この学習環境の判定はリスト形式なので、演習では受け取ったあとにリストへ入れ直して返します。

// と % を 2 回書くのと、答えはまったく同じです。違いは 2 つあります。1 つは意図が伝わることで、divmod と書いてあれば「商と余りをセットで使う」とすぐ分かります。もう 1 つは、割り算を 1 回で済ませていることです。

引数の順番を逆にすると、エラーは出ないのに答えだけが変わります。divmod(3, 1000) は商が 0、余りが 3 です。割られる数が先、割る数があと、という並びは // や % と同じです。

解説

商と余りをセットで使う場面は、割り勘のほかにもたくさんあります。秒を分と秒に、分を時間と分に、個数を箱と端数に。形が同じなら、同じ道具が使えます。

人数が 0 のとき

人数が 0 のとき、divmod は ZeroDivisionError になってプログラムが止まります。人数は外から来る値なので、0 が来ないという保証はどこにもありません。

前回と同じで、危ない入力は関数の入口で弾きます。0 以下が来たときに何を返すかを先に決めておけば、そのあとの行は安心して書けます。

割り算を書いたら、その場で「0 が来たらどうなるか」を考えます。あとから思い出すことは、まずありません。

やってみよう

関数 split_even(total, people) を実装してください。合計金額 total を people 人で割り勘したときの [1人ぶんの金額, 余り] というリストを return します。

商と余りは divmod で求めます。people が 0 以下のときは [0, 0] を返します。

手元では split_even(1000, 3) を実行して [333, 1] になることと、333 * 3 + 1 が 1000 に戻ることを確かめてみてください。

要件

  1. 関数名は split_even で、引数は total と people の 2 つ
  2. 戻り値は [1人ぶんの金額, 余り] のリスト
  3. divmod を使って商と余りを求める
  4. people が 0 以下のときは [0, 0] を返す

入出力例

split_even(1000, 3) → [333,1] split_even(1200, 4) → [300,0] split_even(500, 3) → [166,2] split_even(0, 5) → [0,0] split_even(1000, 0) → [0,0]

ヒント

divmod(total, people) は (商, 余り) のタプルを返します

q, r = divmod(total, people) でアンパックできます

戻り値はタプルではなく [q, r] のリストにします

people が 0 以下の場合を先に if で弾いておきます

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

関連レッスン

  • 変数のスコープ

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

  • lambda関数

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

  • つくる:関数に分割

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

  • 第6章クイズ

    関数の定義と呼び出し、デフォルト引数、複数の戻り値、スコープ、lambda を5問で確認する

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

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

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

メモ

divmod

⌘S で保存