# 授業案：DQM4の配合をPythonで再現しよう（小学校高学年〜中学生）

> ひとことで言うと：配合表を「辞書」というデータの形で書き、作りたいモンスターから材料をさかのぼるプログラムを作る授業案です。「関数が自分自身を呼ぶ（再帰）」というむずかしい考え方を、子どもたちが大好きなゲームのしくみで体験できます。

- URL: https://dqm4.gmnavi.jp/teachers/fusion-python/
- 情報の対象: 教材（ゲームのデータは例として一部だけ使用）
- 確認方法: 資料確認
- 更新日: 2026-11-14

紙とペンで「この子の親はどれ？」とたどるところから始めます。答えが見えてきたら、親を調べる同じ手順を、Pythonの関数に一回分だけ書いてみましょう。

## ねらい

- 配合表を、データ（辞書）として表せる
- 作りたいものから、必要な材料をさかのぼって考えられる
- 関数が自分自身を呼ぶ「再帰」の動きを、図にかいて説明できる

## 進め方（45分 × 2回の例）

| 時間 | やること |
| --- | --- |
| 1回目の前半 | 配合表を紙にかき、「メタルハンターを作るには何がいる？」を手でさかのぼる |
| 1回目の後半 | 配合表をPythonの辞書にする |
| 2回目の前半 | さかのぼる関数を作って動かす |
| 2回目の後半 | 自分で考えた空想のモンスターと配合を足して、友だちと問題を出し合う |

## プログラム

```python
# 配合表：作れるモンスター → 親2体
recipes = {
    "スライムナイト": ("スライムタワー", "メソコボルト"),
    "さまようよろい": ("スライムナイト", "たけやりへい"),
    "トルトリーナ": ("メタッピー", "フェアリードラゴン"),
    "メタルハンター": ("トルトリーナ", "さまようよろい"),
}


def materials(name, depth=0):
    """name を作るのに必要な、配合で作れない材料を集める"""
    print("  " * depth + name)
    if name not in recipes:
        return [name]
    left, right = recipes[name]
    return materials(left, depth + 1) + materials(right, depth + 1)


if __name__ == "__main__":
    need = materials("メタルハンター")
    print("集める材料:", "、".join(need))
    print("配合の回数:", len(need) - 1)
```

動かすと、メタルハンターから材料までの「木」が、字下げつきで表示されます。最後に、集める材料の一覧が出ます。2体から1体を作るので、この教材のように、毎回2体から1体を作り、手持ちも使わずに最後の1体まで組み立てる場合、配合回数は「材料の数 − 1」になる、という発見も子どもたちと話し合えます。

### 子どもたちへの問いかけのれい

| 場面 | 問いかけ |
| --- | --- |
| 紙でさかのぼるとき | 「メタルハンターの親の、そのまた親はだれ？」 |
| 辞書にするとき | 「左がモンスター、右が親。表とどこが同じ？」 |
| 再帰を動かすとき | 「関数が自分をよんだら、次はどこから始まる？」 |
| ふり返り | 「材料が4つなら、配合は何回？どうしてそうなる？」 |

答えを先に教えるより、紙の木の図とプログラムの字下げを見くらべてもらうと、「同じ形だ！」と自分で気づく子が多くなります。

## 行き止まりの条件を、紙の図で確認する

「メタルハンター」を起点に、トルトリーナの先をたどります。メタッピーのように教材の辞書で親が定義されていない名前に行き着いたら、その枝はそこで止まります。子どもに止まる場所を丸で囲んでもらうと、コードの `if name not in recipes` がどこを担当しているか見つけやすくなります。

## もっとやってみたい人へ

- 同じ材料が2回出てきたら、数をかぞえる（Pythonの `collections.Counter` を使う）
- 持っているモンスターを辞書にして、持っているものは集めなくてよいようにする（このサイトの[配合プランナー](https://dqm4.gmnavi.jp/fusion/)と同じ計算です）

## 注意したいこと

ゲームのデータは、例として少しだけ使っています。授業では、子どもたちが空想のモンスターを考えて配合表を作る活動を中心にすると、権利の面でも安心です。出張授業やワークショップのご相談は[ご依頼](https://dqm4.gmnavi.jp/services/workshop/)からどうぞ。

## 評価のめやす

| 段階 | できること |
| --- | --- |
| A | 自分で考えた配合表を辞書にして、材料をさかのぼるプログラムを動かせる |
| B | 用意された辞書に1行足して、結果がどう変わるか説明できる |
| C | 紙の上で、材料をさかのぼれる |

プログラミングがはじめての子は、Cの「紙でさかのぼる」だけでも十分な学びです。ゲームが好きな気持ちを入口に、「調べて・整理して・伝える」力を育てていきましょう。
