diff --git a/docs/extras/1vscode/index.mdx b/docs/extras/1vscode/index.mdx
index 874762e4d..978557270 100644
--- a/docs/extras/1vscode/index.mdx
+++ b/docs/extras/1vscode/index.mdx
@@ -22,7 +22,7 @@ Visual Studio Code は、Microsoft が開発しているフリーかつオープ
     <video src={installVscode} controls width="100%" />
   </TabItem>
   <TabItem value="mac" label="macOS">
-    macOSでも、Windowsと同じようにすればできます。macOSを持っていないので、動画を撮れませんでした…。申し訳ありません。
+    macOSでも、Windowsと同じようにすればできます。macOSを持っていないので、動画は撮れませんでした…。申し訳ありません。
   </TabItem>
   {/* <TabItem value="ubuntu" label="Ubuntu"></TabItem> */}
 </Tabs>
diff --git a/docs/extras/2wsl/index.mdx b/docs/extras/2wsl/index.mdx
index 5dd99e995..f9a2f7d0d 100644
--- a/docs/extras/2wsl/index.mdx
+++ b/docs/extras/2wsl/index.mdx
@@ -12,7 +12,7 @@ import openTerminal from "./open_terminal.mov";
 
 macOS は、Linux という OS と源流を同じくするので、プログラミングの開発環境を整えるのは簡単です。
 
-しかし、多くの場合、プログラミングの開発環境を Windows にインストールするのはとても難しく大変です。そこで、プログラミング環境を簡単にインストールできるように Linux という OS を Windows 上で動かす必要が出てきます。
+しかし、Windows は、多くの場合プログラミングの開発環境をインストールするのはとても難しく大変です。そこで、プログラミング環境を簡単にインストールできるように Linux という OS を Windows 上で動かす必要が出てきます。
 
 昔は、Windows 上に Linux の環境を作ることはとても難しかったのですが、最近 Microsoft が Windows 上で簡単に Linux 環境を構築できる WSL という機能を開発して非常に簡単になりました。
 
@@ -21,14 +21,14 @@ macOS は、Linux という OS と源流を同じくするので、プログラ
 詳しくは、下記の動画を参考にしてください。
 簡単な流れを説明します。
 
-- コマンドプロンプトを `管理者として実行` する。
+- コマンドプロンプトを `管理者として実行` します。
 
-- コマンドプロンプト上で `wsl --install` を入力して `Enterキー` を押す。
+- コマンドプロンプト上で `wsl --install` と入力して `Enterキー` を押します。
 
-- 完了したら、コンピューターを再起動する。
+- 完了したら、コンピューターを再起動します。
 
-- しばらく待ってから、`username` と `password` を入力する。（これは、何でも構いません。）
-- もう一度 `password` を入力する。
+- しばらく待ってから、`username` と `password` を入力します。（これは、何でも構いません。）
+- もう一度 `password` を入力します。
 
 :::tip
 `new password` を求められたときに、入力しても画面上は何も変化しませんが正しく入力されています。そのまま入力して `Enterキー` を押してください。
@@ -38,11 +38,11 @@ macOS は、Linux という OS と源流を同じくするので、プログラ
 
 ## Remote WSL のインストール方法
 
-ここでは、VSCode で WSL 上のファイルに簡単にアクセスできる Remote WSL のインストール方法を紹介します。
+ここでは、VSCode で WSL 上のファイルに簡単にアクセスできる Remote WSL 拡張機能のインストール方法を紹介します。
 
 [VSCode をインストールの項](/docs/extras/1vscode/)を参考に Visual Studio Code をインストールしておいてください。
 
-下記の動画を参考に VSCode に Remote WSL をインストールしてください。
+下記の動画を参考に VSCode に Remote WSL 拡張機能をインストールしてください。
 
 VSCode で拡張機能を検索して、インストールします。
 
diff --git a/docs/python/08array/_samples/average.ipynb b/docs/python/08array/_samples/average.ipynb
index d79bc7786..53a07e98d 100644
--- a/docs/python/08array/_samples/average.ipynb
+++ b/docs/python/08array/_samples/average.ipynb
@@ -1,29 +1,29 @@
 {
- "nbformat": 4,
- "nbformat_minor": 2,
- "metadata": {},
- "cells": [
-  {
-   "metadata": {},
-   "source": [
-    "score1 = 96\n",
-    "score2 = 56\n",
-    "score3 = 42\n",
-    "score4 = 74\n",
-    "score5 = 86\n",
-    "print((score1 + score2 + score3 + score4 + score5) / 5)"
-   ],
-   "cell_type": "code",
-   "outputs": [
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
     {
-     "output_type": "stream",
-     "name": "stdout",
-     "text": [
-      "70.8\n"
-     ]
+      "metadata": {},
+      "source": [
+        "score1 = 96\n",
+        "score2 = 56\n",
+        "score3 = 42\n",
+        "score4 = 74\n",
+        "score5 = 86\n",
+        "print((score1 + score2 + score3 + score4 + score5) / 5)"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "70.8\n"
+          ]
+        }
+      ],
+      "execution_count": null
     }
-   ],
-   "execution_count": null
-  }
- ]
+  ]
 }
diff --git a/docs/python/08array/_samples/average10.ipynb b/docs/python/08array/_samples/average10.ipynb
index 974548b64..474367b6d 100644
--- a/docs/python/08array/_samples/average10.ipynb
+++ b/docs/python/08array/_samples/average10.ipynb
@@ -1,35 +1,32 @@
 {
- "nbformat": 4,
- "nbformat_minor": 2,
- "metadata": {},
- "cells": [
-  {
-   "metadata": {},
-   "source": [
-    "def average(scores):\n",
-    "    sum = 0\n",
-    "    for i in range(len(scores)):\n",
-    "        sum += scores[i]\n",
-    "    return sum / len(scores)\n",
-    "\n",
-    "\n",
-    "scores = [26, 78, 83, 20, 10, 11, 22, 16, 41, 95]\n",
-    "average(scores)"
-   ],
-   "cell_type": "code",
-   "outputs": [
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
     {
-     "output_type": "execute_result",
-     "data": {
-      "text/plain": [
-       "40.2"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 2
+      "metadata": {},
+      "source": [
+        "def average(scores):\n",
+        "    sum = 0\n",
+        "    for i in range(len(scores)):\n",
+        "        sum += scores[i]\n",
+        "    return sum / len(scores)\n",
+        "\n",
+        "\n",
+        "scores = [26, 78, 83, 20, 10, 11, 22, 16, 41, 95]\n",
+        "print(average(scores))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "40.2\n"
+          ]
+        }
+      ],
+      "execution_count": null
     }
-   ],
-   "execution_count": null
-  }
- ]
+  ]
 }
diff --git a/docs/python/08array/_samples/average_numpy.ipynb b/docs/python/08array/_samples/average_numpy.ipynb
index 3186bed88..2bc4a4b1a 100644
--- a/docs/python/08array/_samples/average_numpy.ipynb
+++ b/docs/python/08array/_samples/average_numpy.ipynb
@@ -9,19 +9,16 @@
         "import numpy\n",
         "\n",
         "scores = [26, 78, 83, 20, 10, 11, 22, 16, 41, 95]\n",
-        "numpy.mean(scores)"
+        "print(numpy.mean(scores))"
       ],
       "cell_type": "code",
       "outputs": [
         {
-          "output_type": "execute_result",
-          "data": {
-            "text/plain": [
-              "40.2"
-            ]
-          },
-          "metadata": {},
-          "execution_count": 1
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "40.2\n"
+          ]
         }
       ],
       "execution_count": null
diff --git a/docs/python/08array/_samples/average_statistics.ipynb b/docs/python/08array/_samples/average_statistics.ipynb
index c7077fdf4..b0a13ca8b 100644
--- a/docs/python/08array/_samples/average_statistics.ipynb
+++ b/docs/python/08array/_samples/average_statistics.ipynb
@@ -9,19 +9,16 @@
         "import statistics\n",
         "\n",
         "scores = [26, 78, 83, 20, 10, 11, 22, 16, 41, 95]\n",
-        "statistics.mean(scores)"
+        "print(statistics.mean(scores))"
       ],
       "cell_type": "code",
       "outputs": [
         {
-          "output_type": "execute_result",
-          "data": {
-            "text/plain": [
-              "40.2"
-            ]
-          },
-          "metadata": {},
-          "execution_count": 1
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "40.2\n"
+          ]
         }
       ],
       "execution_count": null
diff --git a/docs/python/08array/_samples/sum.ipynb b/docs/python/08array/_samples/sum.ipynb
index 0d9053bef..53f361c62 100644
--- a/docs/python/08array/_samples/sum.ipynb
+++ b/docs/python/08array/_samples/sum.ipynb
@@ -1,27 +1,24 @@
 {
- "nbformat": 4,
- "nbformat_minor": 2,
- "metadata": {},
- "cells": [
-  {
-   "metadata": {},
-   "source": [
-    "sum([1, 2, 3])"
-   ],
-   "cell_type": "code",
-   "outputs": [
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
     {
-     "output_type": "execute_result",
-     "data": {
-      "text/plain": [
-       "6"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 2
+      "metadata": {},
+      "source": [
+        "print(sum([1, 2, 3]))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "6\n"
+          ]
+        }
+      ],
+      "execution_count": null
     }
-   ],
-   "execution_count": null
-  }
- ]
+  ]
 }
diff --git a/docs/python/08array/_samples/sum2.ipynb b/docs/python/08array/_samples/sum2.ipynb
index a9c0953ee..1d0812d93 100644
--- a/docs/python/08array/_samples/sum2.ipynb
+++ b/docs/python/08array/_samples/sum2.ipynb
@@ -1,27 +1,24 @@
 {
- "nbformat": 4,
- "nbformat_minor": 2,
- "metadata": {},
- "cells": [
-  {
-   "metadata": {},
-   "source": [
-    "sum([2, 5, 7])"
-   ],
-   "cell_type": "code",
-   "outputs": [
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
     {
-     "output_type": "execute_result",
-     "data": {
-      "text/plain": [
-       "14"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 1
+      "metadata": {},
+      "source": [
+        "print(sum([2, 5, 7]))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "14\n"
+          ]
+        }
+      ],
+      "execution_count": null
     }
-   ],
-   "execution_count": null
-  }
- ]
+  ]
 }
diff --git a/docs/python/08array/_samples/variance.ipynb b/docs/python/08array/_samples/variance.ipynb
index dd050f61c..b5d0ecf52 100644
--- a/docs/python/08array/_samples/variance.ipynb
+++ b/docs/python/08array/_samples/variance.ipynb
@@ -1,43 +1,40 @@
 {
- "nbformat": 4,
- "nbformat_minor": 2,
- "metadata": {},
- "cells": [
-  {
-   "metadata": {},
-   "source": [
-    "def average(scores):\n",
-    "    sum = 0\n",
-    "    for i in range(len(scores)):\n",
-    "        sum += scores[i]\n",
-    "    return sum / len(scores)\n",
-    "\n",
-    "\n",
-    "def variance(scores):\n",
-    "    sum = 0\n",
-    "    calculated_average = average(scores)\n",
-    "    for i in range(len(scores)):\n",
-    "        sum += (scores[i] - calculated_average) ** 2\n",
-    "    return sum / len(scores)\n",
-    "\n",
-    "\n",
-    "scores = [26, 78, 83, 20, 10, 11, 22, 16, 41, 95]\n",
-    "variance(scores)"
-   ],
-   "cell_type": "code",
-   "outputs": [
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
     {
-     "output_type": "execute_result",
-     "data": {
-      "text/plain": [
-       "955.5600000000001"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 3
+      "metadata": {},
+      "source": [
+        "def average(scores):\n",
+        "    sum = 0\n",
+        "    for i in range(len(scores)):\n",
+        "        sum += scores[i]\n",
+        "    return sum / len(scores)\n",
+        "\n",
+        "\n",
+        "def variance(scores):\n",
+        "    sum = 0\n",
+        "    calculated_average = average(scores)\n",
+        "    for i in range(len(scores)):\n",
+        "        sum += (scores[i] - calculated_average) ** 2\n",
+        "    return sum / len(scores)\n",
+        "\n",
+        "\n",
+        "scores = [26, 78, 83, 20, 10, 11, 22, 16, 41, 95]\n",
+        "print(variance(scores))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "955.5600000000001\n"
+          ]
+        }
+      ],
+      "execution_count": null
     }
-   ],
-   "execution_count": null
-  }
- ]
+  ]
 }
diff --git a/docs/python/08array/_samples/variance2.ipynb b/docs/python/08array/_samples/variance2.ipynb
index 9137bd009..c7dddd341 100644
--- a/docs/python/08array/_samples/variance2.ipynb
+++ b/docs/python/08array/_samples/variance2.ipynb
@@ -1,42 +1,39 @@
 {
- "nbformat": 4,
- "nbformat_minor": 2,
- "metadata": {},
- "cells": [
-  {
-   "metadata": {},
-   "source": [
-    "def average(scores):\n",
-    "    sum = 0\n",
-    "    for i in range(len(scores)):\n",
-    "        sum += scores[i]\n",
-    "    return sum / len(scores)\n",
-    "\n",
-    "\n",
-    "def variance(scores):\n",
-    "    sum = 0\n",
-    "    for i in range(len(scores)):\n",
-    "        sum += (scores[i] - average(scores)) ** 2\n",
-    "    return sum / len(scores)\n",
-    "\n",
-    "\n",
-    "scores = [26, 78, 83, 20, 10, 11, 22, 16, 41, 95]\n",
-    "variance(scores)"
-   ],
-   "cell_type": "code",
-   "outputs": [
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
     {
-     "output_type": "execute_result",
-     "data": {
-      "text/plain": [
-       "955.5600000000001"
-      ]
-     },
-     "metadata": {},
-     "execution_count": 1
+      "metadata": {},
+      "source": [
+        "def average(scores):\n",
+        "    sum = 0\n",
+        "    for i in range(len(scores)):\n",
+        "        sum += scores[i]\n",
+        "    return sum / len(scores)\n",
+        "\n",
+        "\n",
+        "def variance(scores):\n",
+        "    sum = 0\n",
+        "    for i in range(len(scores)):\n",
+        "        sum += (scores[i] - average(scores)) ** 2\n",
+        "    return sum / len(scores)\n",
+        "\n",
+        "\n",
+        "scores = [26, 78, 83, 20, 10, 11, 22, 16, 41, 95]\n",
+        "print(variance(scores))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "955.5600000000001\n"
+          ]
+        }
+      ],
+      "execution_count": null
     }
-   ],
-   "execution_count": null
-  }
- ]
+  ]
 }
diff --git a/docs/python/08array/index.mdx b/docs/python/08array/index.mdx
index 45f905f77..f2aa30d0d 100644
--- a/docs/python/08array/index.mdx
+++ b/docs/python/08array/index.mdx
@@ -15,7 +15,7 @@ import Answer from "@site/src/components/Answer";
 
 一応、作ることができましたが、生徒の数が増えてしまうと大変です。前項の for 文を使うと簡単にできそうですが変数を for 文ではうまく扱えないので、繰り返し処理を用いて書くことができません。
 
-ここで、配列を使います。配列は、複数のデータを順番に並べたもので、大量のデータを扱うことができます。
+ここで、配列を使います。配列は、複数のデータを順番に並べたもので、大量のデータを扱うことができます。数学におけるベクトルと同じようなものです。
 
 配列を用いると、先程のプログラムは、次のように書くことができます。
 
@@ -33,10 +33,10 @@ import Answer from "@site/src/components/Answer";
 配列名 = [一つ目のデータ, 二つ目のデータ, 三つ目のデータ, … , nつ目のデータ]
 ```
 
-配列から、n 番目のデータを取り出すときは次のようにして取り出すことができます。ここで、n-1 となっているのは、配列の添字は **0 から始まっている**からです。
+配列から、i 番目のデータを取り出すときは次のようにして取り出すことができます。ここで、i-1 となっているのは、配列の添字は **0 から始まっている**からです。
 
 ```python
-配列名[n-1]
+配列名[i-1]
 ```
 
 配列の長さは、次のようにして取得することができます。
@@ -73,7 +73,7 @@ len(配列名)
 </Answer>
 
 :::info
-実は for 文を書くときに出てきた range は、配列のようなものを作る関数です。ここで、配列のようなものと言ったのは厳密には配列ではないからですが、ひとまず配列と考えて問題ないでしょう。そのため、例えば `range(1, 11)` は `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` を生成します。下のプログラムでは、range 関数の返り値を配列にしています。
+実は for 文を書くときに出てきた range は、配列のようなものを作る関数です。ここで、配列のようなものと言ったのは厳密には配列ではないからですが、ひとまず配列と考えて問題ないでしょう。そのため、例えば `range(1, 11)` は `[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]` を生成します。list 関数は range 関数の返り値を配列にしています。
 
 <ViewSource path="_samples/range.ipynb" />
 
@@ -93,7 +93,7 @@ len(配列名)
 <Answer>
 <ViewSource path="_samples/average10.ipynb" />
 
-実は、平均点を求めるライブラリもあります。[statistics ライブラリの mean 関数](https://docs.python.org/ja/3/library/statistics.html#statistics.mean)や[numpy ライブラリの mean 関数](https://numpy.org/doc/stable/reference/generated/numpy.mean.html)があります。
+実は、平均点を求めるライブラリもあります。[statistics ライブラリの mean 関数](https://docs.python.org/ja/3/library/statistics.html#statistics.mean)や[NumPy ライブラリの mean 関数](https://numpy.org/doc/stable/reference/generated/numpy.mean.html)があります。
 
 <ViewSource path="_samples/average_statistics.ipynb" />
 
@@ -119,7 +119,7 @@ $$
 
 <ViewSource path="_samples/variance2.ipynb" />
 
-実は、分散を計算するライブラリがあります。[statistics ライブラリの pvariance 関数](https://docs.python.org/ja/3/library/statistics.html#statistics.pvariance)を使う方法や[NumPy ライブラリの var 関数](https://numpy.org/doc/stable/reference/generated/numpy.var.html)があります。
+実は、分散を計算するライブラリがあります。[statistics ライブラリの pvariance 関数](https://docs.python.org/ja/3/library/statistics.html#statistics.pvariance)や[NumPy ライブラリの var 関数](https://numpy.org/doc/stable/reference/generated/numpy.var.html)があります。
 
 <ViewSource path="_samples/variance_statistics.ipynb" />
 
diff --git a/docs/python/09multi-array/_samples/2_dim_array_revised.ipynb b/docs/python/09multi-array/_samples/2_dim_array_revised.ipynb
new file mode 100644
index 000000000..a15276a6e
--- /dev/null
+++ b/docs/python/09multi-array/_samples/2_dim_array_revised.ipynb
@@ -0,0 +1,34 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
+    {
+      "metadata": {},
+      "source": [
+        "def sum(scores):\n",
+        "    s = 0\n",
+        "    for i in range(len(scores)):\n",
+        "        for j in range(len(scores[i])):\n",
+        "            s += scores[i][j]\n",
+        "    return s\n",
+        "\n",
+        "\n",
+        "SCORES = [[83, 75, 32], [73, 53, 84], [63, 48, 64]]\n",
+        "\n",
+        "print(sum(SCORES))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "575\n"
+          ]
+        }
+      ],
+      "execution_count": null
+    }
+  ]
+}
diff --git a/docs/python/09multi-array/_samples/2_dim_array_sample.ipynb b/docs/python/09multi-array/_samples/2_dim_array_sample.ipynb
new file mode 100644
index 000000000..27bfd04e0
--- /dev/null
+++ b/docs/python/09multi-array/_samples/2_dim_array_sample.ipynb
@@ -0,0 +1,35 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
+    {
+      "metadata": {},
+      "source": [
+        "def sum(scores):\n",
+        "    s = 0\n",
+        "    for i in range(len(scores)):\n",
+        "        s += scores[i]\n",
+        "    return s\n",
+        "\n",
+        "\n",
+        "A_SCORES = [83, 75, 32]\n",
+        "B_SCORES = [73, 53, 84]\n",
+        "C_SCORES = [63, 48, 64]\n",
+        "\n",
+        "print(sum(A_SCORES) + sum(B_SCORES) + sum(C_SCORES))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "575\n"
+          ]
+        }
+      ],
+      "execution_count": null
+    }
+  ]
+}
diff --git a/docs/python/09multi-array/_samples/3_dim_array_sample.ipynb b/docs/python/09multi-array/_samples/3_dim_array_sample.ipynb
new file mode 100644
index 000000000..9496868c0
--- /dev/null
+++ b/docs/python/09multi-array/_samples/3_dim_array_sample.ipynb
@@ -0,0 +1,35 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
+    {
+      "metadata": {},
+      "source": [
+        "def sum(scores):\n",
+        "    s = 0\n",
+        "    for i in range(len(scores)):\n",
+        "        for j in range(len(scores[i])):\n",
+        "            for k in range(len(scores[i][j])):\n",
+        "                s += scores[i][j][k]\n",
+        "    return s\n",
+        "\n",
+        "\n",
+        "SCORES = [[[51, 56, 10], [47, 52, 58]], [[24, 92, 34], [28, 44, 19]]]\n",
+        "\n",
+        "print(sum(SCORES))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "515\n"
+          ]
+        }
+      ],
+      "execution_count": null
+    }
+  ]
+}
diff --git a/docs/python/09multi-array/_samples/average_of_sum.ipynb b/docs/python/09multi-array/_samples/average_of_sum.ipynb
new file mode 100644
index 000000000..e407dc96b
--- /dev/null
+++ b/docs/python/09multi-array/_samples/average_of_sum.ipynb
@@ -0,0 +1,40 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
+    {
+      "metadata": {},
+      "source": [
+        "def sum(scores):\n",
+        "    s = 0\n",
+        "    for i in range(len(scores)):\n",
+        "        s += scores[i]\n",
+        "    return s\n",
+        "\n",
+        "\n",
+        "def average_sum(scores):\n",
+        "    s = 0\n",
+        "    for i in range(len(scores)):\n",
+        "        s += sum(scores[i])\n",
+        "    return s / len(scores)\n",
+        "\n",
+        "\n",
+        "SCORES = [[83, 75, 32], [73, 53, 84], [63, 48, 64]]\n",
+        "\n",
+        "print(average_sum(SCORES))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "191.66666666666666\n"
+          ]
+        }
+      ],
+      "execution_count": null
+    }
+  ]
+}
diff --git a/docs/python/09multi-array/index.mdx b/docs/python/09multi-array/index.mdx
new file mode 100644
index 000000000..b3424100f
--- /dev/null
+++ b/docs/python/09multi-array/index.mdx
@@ -0,0 +1,89 @@
+---
+sidebar_position: 9
+---
+
+import ViewSource from "@site/src/components/ViewSource/ViewSource";
+import Answer from "@site/src/components/Answer";
+
+# 多次元配列
+
+## 二次元配列
+
+前項では生徒の**数学**の点数のみについて考えましたが、生徒の**全教科**の点数について考えたら、どうなるでしょう。
+
+A、B、C の 3 人の生徒がいて、それぞれの国語、数学、英語の点数が次のようになっているとします。
+
+|       | 国語 | 数学 | 英語 |
+| ----- | ---- | ---- | ---- |
+| **A** | 83   | 75   | 32   |
+| **B** | 73   | 53   | 84   |
+| **C** | 63   | 48   | 64   |
+
+前項の内容を使って、点数の合計を計算してみましょう。
+
+<ViewSource path="_samples/2_dim_array_sample.ipynb" />
+
+一応できましたが、生徒の人数が増えてしまうと大変ですし、生徒の人数が変わるごとにプログラムを書き直さないといけません。
+
+ここで、二次元配列を使います。二次元配列は名前の通り配列が二次元となったもので、配列の配列です。数学における行列と同じようなものです。
+
+上のプログラムを二次元配列を使って記述すると、次のようになります。
+
+<ViewSource path="_samples/2_dim_array_revised.ipynb" />
+
+二次元配列を作るときは、配列の要素を配列にすれば作ることができます。
+
+```python
+配列名 = [第一行の配列, 第二行の配列, 第三行の配列, … , 第i行の配列]
+```
+
+$i$ 行、$j$ 列の数字を取り出すには、次のようにします。
+
+```python
+配列名[i][j]
+```
+
+## 三次元配列
+
+二次元配列をさらに発展させて、三次元配列を考えることもできます。
+
+例えば、1 組に A と B が所属していて、2 組に C と D が所属しているとします。
+その時、それぞれの生徒の国語と数学、英語の点数が次のように与えられたとします。
+
+1 組
+
+|       | 国語 | 数学 | 英語 |
+| ----- | ---- | ---- | ---- |
+| **A** | 51   | 56   | 10   |
+| **B** | 47   | 52   | 58   |
+
+2 組
+
+|       | 国語 | 数学 | 英語 |
+| ----- | ---- | ---- | ---- |
+| **C** | 24   | 92   | 34   |
+| **D** | 28   | 44   | 19   |
+
+三次元配列を用いて、これの合計点を求めてみましょう。
+
+<ViewSource path="_samples/3_dim_array_sample.ipynb" />
+
+## 多次元配列
+
+さらに発展させて、多次元配列を考えることもできます。
+
+### 練習問題 1
+
+A、B、C の 3 人の生徒がいて、それぞれの国語、数学、英語の点数が次のようになっているとします。
+
+|       | 国語 | 数学 | 英語 |
+| ----- | ---- | ---- | ---- |
+| **A** | 83   | 75   | 32   |
+| **B** | 73   | 53   | 84   |
+| **C** | 63   | 48   | 64   |
+
+それぞれの生徒の合計点を出して、その平均値を求めてみましょう。
+
+<Answer>
+  <ViewSource path="_samples/average_of_sum.ipynb" />
+</Answer>
diff --git a/docs/python/10if/_samples/abs.ipynb b/docs/python/10if/_samples/abs.ipynb
new file mode 100644
index 000000000..60d47fa46
--- /dev/null
+++ b/docs/python/10if/_samples/abs.ipynb
@@ -0,0 +1,31 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "def abs_val(n):\n",
+    "    if n >= 0:\n",
+    "        return n\n",
+    "    else:\n",
+    "        return -n\n",
+    "\n",
+    "\n",
+    "print(abs_val(-10))"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "10\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/abs2.ipynb b/docs/python/10if/_samples/abs2.ipynb
new file mode 100644
index 000000000..2dae729b6
--- /dev/null
+++ b/docs/python/10if/_samples/abs2.ipynb
@@ -0,0 +1,30 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "def abs_val(n):\n",
+    "    if n < 0:\n",
+    "        n = -n\n",
+    "    return n\n",
+    "\n",
+    "\n",
+    "print(abs_val(-10))"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "10\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/abs_default.ipynb b/docs/python/10if/_samples/abs_default.ipynb
new file mode 100644
index 000000000..273bba124
--- /dev/null
+++ b/docs/python/10if/_samples/abs_default.ipynb
@@ -0,0 +1,24 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
+    {
+      "metadata": {},
+      "source": [
+        "print(abs(-10))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "10\n"
+          ]
+        }
+      ],
+      "execution_count": null
+    }
+  ]
+}
diff --git a/docs/python/10if/_samples/abs_math.ipynb b/docs/python/10if/_samples/abs_math.ipynb
new file mode 100644
index 000000000..e6981fc87
--- /dev/null
+++ b/docs/python/10if/_samples/abs_math.ipynb
@@ -0,0 +1,26 @@
+{
+  "nbformat": 4,
+  "nbformat_minor": 2,
+  "metadata": {},
+  "cells": [
+    {
+      "metadata": {},
+      "source": [
+        "import math\n",
+        "\n",
+        "print(math.fabs(-10))"
+      ],
+      "cell_type": "code",
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "10.0\n"
+          ]
+        }
+      ],
+      "execution_count": null
+    }
+  ]
+}
diff --git a/docs/python/10if/_samples/alcohol.ipynb b/docs/python/10if/_samples/alcohol.ipynb
new file mode 100644
index 000000000..dc1fcaab5
--- /dev/null
+++ b/docs/python/10if/_samples/alcohol.ipynb
@@ -0,0 +1,30 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "def can_drink(age):\n",
+    "    if age < 20:\n",
+    "        print(\"お酒は二十歳になってから！\")\n",
+    "\n",
+    "\n",
+    "age = 19\n",
+    "can_drink(age)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "お酒は二十歳になってから！\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/and.ipynb b/docs/python/10if/_samples/and.ipynb
new file mode 100644
index 000000000..bbab926d3
--- /dev/null
+++ b/docs/python/10if/_samples/and.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age >= 20 and age < 30)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "False\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/below.ipynb b/docs/python/10if/_samples/below.ipynb
new file mode 100644
index 000000000..758b3d204
--- /dev/null
+++ b/docs/python/10if/_samples/below.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age <= 20)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "True\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/comparison_operator.ipynb b/docs/python/10if/_samples/comparison_operator.ipynb
new file mode 100644
index 000000000..5f4879fed
--- /dev/null
+++ b/docs/python/10if/_samples/comparison_operator.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age > 20)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "False\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/eq.ipynb b/docs/python/10if/_samples/eq.ipynb
new file mode 100644
index 000000000..908e2ded1
--- /dev/null
+++ b/docs/python/10if/_samples/eq.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age == 20)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "False\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/false.ipynb b/docs/python/10if/_samples/false.ipynb
new file mode 100644
index 000000000..e7a91d576
--- /dev/null
+++ b/docs/python/10if/_samples/false.ipynb
@@ -0,0 +1,25 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "f = False\n",
+    "print(f)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "False\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/fizzbuzz.ipynb b/docs/python/10if/_samples/fizzbuzz.ipynb
new file mode 100644
index 000000000..31200c93b
--- /dev/null
+++ b/docs/python/10if/_samples/fizzbuzz.ipynb
@@ -0,0 +1,65 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "def fizzbuzz(n):\n",
+    "    for i in range(1, n + 1):\n",
+    "        if i % 15 == 0:\n",
+    "            print(\"FizzBuzz\")\n",
+    "        elif i % 3 == 0:\n",
+    "            print(\"Fizz\")\n",
+    "        elif i % 5 == 0:\n",
+    "            print(\"Buzz\")\n",
+    "        else:\n",
+    "            print(i)\n",
+    "\n",
+    "\n",
+    "fizzbuzz(30)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "1\n",
+      "2\n",
+      "Fizz\n",
+      "4\n",
+      "Buzz\n",
+      "Fizz\n",
+      "7\n",
+      "8\n",
+      "Fizz\n",
+      "Buzz\n",
+      "11\n",
+      "Fizz\n",
+      "13\n",
+      "14\n",
+      "FizzBuzz\n",
+      "16\n",
+      "17\n",
+      "Fizz\n",
+      "19\n",
+      "Buzz\n",
+      "Fizz\n",
+      "22\n",
+      "23\n",
+      "Fizz\n",
+      "Buzz\n",
+      "26\n",
+      "Fizz\n",
+      "28\n",
+      "29\n",
+      "FizzBuzz\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/fizzbuzz2.ipynb b/docs/python/10if/_samples/fizzbuzz2.ipynb
new file mode 100644
index 000000000..4db6057ab
--- /dev/null
+++ b/docs/python/10if/_samples/fizzbuzz2.ipynb
@@ -0,0 +1,65 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "def fizzbuzz(n):\n",
+    "    for i in range(1, n + 1):\n",
+    "        s = \"\"\n",
+    "        if i % 3 == 0:\n",
+    "            s += \"Fizz\"\n",
+    "        if i % 5 == 0:\n",
+    "            s += \"Buzz\"\n",
+    "        if s == \"\":\n",
+    "            s = i\n",
+    "        print(s)\n",
+    "\n",
+    "\n",
+    "fizzbuzz(30)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "1\n",
+      "2\n",
+      "Fizz\n",
+      "4\n",
+      "Buzz\n",
+      "Fizz\n",
+      "7\n",
+      "8\n",
+      "Fizz\n",
+      "Buzz\n",
+      "11\n",
+      "Fizz\n",
+      "13\n",
+      "14\n",
+      "FizzBuzz\n",
+      "16\n",
+      "17\n",
+      "Fizz\n",
+      "19\n",
+      "Buzz\n",
+      "Fizz\n",
+      "22\n",
+      "23\n",
+      "Fizz\n",
+      "Buzz\n",
+      "26\n",
+      "Fizz\n",
+      "28\n",
+      "29\n",
+      "FizzBuzz\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/greater.ipynb b/docs/python/10if/_samples/greater.ipynb
new file mode 100644
index 000000000..5f4879fed
--- /dev/null
+++ b/docs/python/10if/_samples/greater.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age > 20)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "False\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/legal_age.ipynb b/docs/python/10if/_samples/legal_age.ipynb
new file mode 100644
index 000000000..65b7ea6c7
--- /dev/null
+++ b/docs/python/10if/_samples/legal_age.ipynb
@@ -0,0 +1,29 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "if age >= 18:\n",
+    "    print(\"成人です。\")\n",
+    "else:\n",
+    "    print(\"未成年です。\")"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "成人です。\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/less_than.ipynb b/docs/python/10if/_samples/less_than.ipynb
new file mode 100644
index 000000000..acbf1f5bf
--- /dev/null
+++ b/docs/python/10if/_samples/less_than.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age < 20)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "True\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/logical_operator.ipynb b/docs/python/10if/_samples/logical_operator.ipynb
new file mode 100644
index 000000000..66795def6
--- /dev/null
+++ b/docs/python/10if/_samples/logical_operator.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age > 20 or age == 20)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "False\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/logical_operator2.ipynb b/docs/python/10if/_samples/logical_operator2.ipynb
new file mode 100644
index 000000000..544c6c871
--- /dev/null
+++ b/docs/python/10if/_samples/logical_operator2.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age >= 20)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "False\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/max.ipynb b/docs/python/10if/_samples/max.ipynb
new file mode 100644
index 000000000..802ec9a1f
--- /dev/null
+++ b/docs/python/10if/_samples/max.ipynb
@@ -0,0 +1,35 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "def max(scores):\n",
+    "    m = scores[0]\n",
+    "    for i in range(len(scores) - 1):\n",
+    "        if scores[i] > scores[i + 1]:\n",
+    "            m = scores[i]\n",
+    "        else:\n",
+    "            m = scores[i + 1]\n",
+    "    return m\n",
+    "\n",
+    "\n",
+    "SCORES = [55, 32, 16, 51, 80, 19]\n",
+    "print(max(SCORES))"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "80\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/neq.ipynb b/docs/python/10if/_samples/neq.ipynb
new file mode 100644
index 000000000..40bcd18f9
--- /dev/null
+++ b/docs/python/10if/_samples/neq.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age != 20)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "True\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/not.ipynb b/docs/python/10if/_samples/not.ipynb
new file mode 100644
index 000000000..0178c661b
--- /dev/null
+++ b/docs/python/10if/_samples/not.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(not age >= 20)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "True\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/or.ipynb b/docs/python/10if/_samples/or.ipynb
new file mode 100644
index 000000000..094635618
--- /dev/null
+++ b/docs/python/10if/_samples/or.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age < 20 or age > 70)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "True\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/over.ipynb b/docs/python/10if/_samples/over.ipynb
new file mode 100644
index 000000000..544c6c871
--- /dev/null
+++ b/docs/python/10if/_samples/over.ipynb
@@ -0,0 +1,26 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "\n",
+    "print(age >= 20)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "False\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/the_right_to_vote.ipynb b/docs/python/10if/_samples/the_right_to_vote.ipynb
new file mode 100644
index 000000000..1e1eaccf6
--- /dev/null
+++ b/docs/python/10if/_samples/the_right_to_vote.ipynb
@@ -0,0 +1,22 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "age = 18\n",
+    "if age < 18:\n",
+    "    print(\"選挙権はありません。\")\n",
+    "elif age < 25:\n",
+    "    print(\"投票することができます。\")\n",
+    "else:\n",
+    "    print(\"衆議院議員に立候補することができます。\")"
+   ],
+   "cell_type": "code",
+   "outputs": [],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/_samples/true.ipynb b/docs/python/10if/_samples/true.ipynb
new file mode 100644
index 000000000..a9d76fae5
--- /dev/null
+++ b/docs/python/10if/_samples/true.ipynb
@@ -0,0 +1,25 @@
+{
+ "nbformat": 4,
+ "nbformat_minor": 2,
+ "metadata": {},
+ "cells": [
+  {
+   "metadata": {},
+   "source": [
+    "t = True\n",
+    "print(t)"
+   ],
+   "cell_type": "code",
+   "outputs": [
+    {
+     "output_type": "stream",
+     "name": "stdout",
+     "text": [
+      "True\n"
+     ]
+    }
+   ],
+   "execution_count": null
+  }
+ ]
+}
diff --git a/docs/python/10if/index.mdx b/docs/python/10if/index.mdx
new file mode 100644
index 000000000..7541cd3a5
--- /dev/null
+++ b/docs/python/10if/index.mdx
@@ -0,0 +1,155 @@
+---
+sidebar_position: 10
+---
+
+import ViewSource from "@site/src/components/ViewSource/ViewSource";
+import Answer from "@site/src/components/Answer";
+
+# 条件分岐
+
+## 論理値
+
+Python では、文字列や数字以外にも論理値という真か偽かを表す値があります。真は `True`、偽は `False` と表せ、これは変数などにも代入できます。
+
+下のプログラムでは、`True` と `False` を表示しています。`"True"`、`"False"` のようにダブルクォーテーション（ `"` ）がついていないことに気をつけましょう。
+
+<ViewSource path="_samples/true.ipynb" />
+
+<ViewSource path="_samples/false.ipynb" />
+
+## 比較演算子
+
+Python では、次のように比較演算子を用いて真偽を判定することができます。次のプログラムでは、`age > 20` が偽なので、`False` が返されています。
+
+<ViewSource path="_samples/comparison_operator.ipynb" />
+
+他にも様々な比較演算子があります。
+
+| 比較演算子 | 説明       | 例                                             |
+| ---------- | ---------- | ---------------------------------------------- |
+| `==`       | 等しい     | <ViewSource path="_samples/eq.ipynb" />        |
+| `!=`       | 等しくない | <ViewSource path="_samples/neq.ipynb" />       |
+| `<`        | 小なり     | <ViewSource path="_samples/less_than.ipynb" /> |
+| `<=`       | 以下       | <ViewSource path="_samples/below.ipynb" />     |
+| `>`        | 大なり     | <ViewSource path="_samples/greater.ipynb" />   |
+| `>=`       | 以上       | <ViewSource path="_samples/over.ipynb" />      |
+
+## 論理演算子
+
+論理値に対して、論理演算子を使ってさらに複雑な計算をすることができます。
+
+<ViewSource path="_samples/logical_operator.ipynb" />
+
+このプログラムは、`>=` 一つを使って書き換えた次と同じです。
+
+<ViewSource path="_samples/logical_operator2.ipynb" />
+
+他にも様々な論理演算子があります。
+
+| 論理演算子 | 説明   | 例                                       |
+| ---------- | ------ | ---------------------------------------- |
+| `not`      | 否定   | <ViewSource path="_samples/not.ipynb" /> |
+| `and`      | かつ   | <ViewSource path="_samples/and.ipynb" /> |
+| `or`       | または | <ViewSource path="_samples/or.ipynb" />  |
+
+## 条件分岐
+
+### if
+
+年齢に応じて、飲酒可能な年齢かを判定するプログラムを作りましょう。しかし、今までに学習した内容ではこのようなプログラムを作ることはできそうにありません。このような処理をするために、if 文が使えます。飲酒可能な年齢かを判定するプログラムを見てみましょう。
+
+<ViewSource path="_samples/alcohol.ipynb" />
+
+if 文は、次のようにして作ることができます。
+条件式には、先程の比較演算子や論理演算子が使えます。
+
+```python
+if 条件式:
+    真の時の処理
+```
+
+### if ~ else
+
+条件が偽の時にも行いたい処理がある場合は、if ~ else 文を用いて、次のようにすることができます。
+
+未成年か成人かを判定するプログラムを作ってみましょう。
+
+<ViewSource path="_samples/legal_age.ipynb" />
+
+if ~ else 文の構文は次のとおりです。
+
+```python
+if 条件式:
+    真の時の処理
+else:
+    偽の時の処理
+```
+
+### if ~ elif ~ else
+
+条件が偽の時でさらに条件分岐を行いたい場合は、if ~ elif ~ else 文を用いて、次のようにすることができます。
+
+選挙権を判定するプログラムを作ってみましょう。
+
+<ViewSource path="_samples/the_right_to_vote.ipynb" />
+
+if ~ elif ~ else 文の構文は次のとおりです。
+
+```python
+if 条件式:
+    真の時の処理
+elif:
+    偽の時である条件が真の時の処理
+else:
+    すべてが偽の時の処理
+```
+
+## 練習問題
+
+### 練習問題 1
+
+Fizz Buzz 問題を解くプログラムを作ってみましょう。
+これは、プログラミング初心者向けの簡単な例題としてとても有名です。初歩的なプログラムを作成する能力があるのかを判定するためによく使われます。
+
+Fizz Buzz のルールは、次のようになっています。
+
+> プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの発言した数字に 1 を足した数字を発言していく。ただし、3 の倍数の場合は「Fizz」（Bizz Buzz の場合は「Bizz」）、5 の倍数の場合は「Buzz」、3 の倍数かつ 5 の倍数の場合（すなわち 15 の倍数の場合）は「Fizz Buzz」（Bizz Buzz の場合は「Bizz Buzz」）を数の代わりに発言しなければならない。発言を間違えた者や、ためらった者は脱落となる。
+> Wikipedia フリー百科事典 より
+
+$n$ 番目まで Fizz Buzz での正しい解を表示するプログラムを作ってみましょう。
+
+<Answer>
+<ViewSource path="_samples/fizzbuzz.ipynb" />
+
+もう一つの有名な解法を見てみましょう。
+
+<ViewSource path="_samples/fizzbuzz2.ipynb" />
+</Answer>
+
+### 練習問題 2
+
+絶対値を求めるプログラムを作ってみましょう。
+
+<Answer>
+<ViewSource path="_samples/abs.ipynb" />
+
+別解
+
+<ViewSource path="_samples/abs2.ipynb" />
+
+実は、組み込み関数で abs 関数があります。また、[math ライブラリの fabs 関数](https://docs.python.org/ja/3/library/math.html#math.fabs)もあります。
+
+<ViewSource path="_samples/abs_default.ipynb" />
+
+<ViewSource path="_samples/abs_math.ipynb" />
+
+</Answer>
+
+### 練習問題 3
+
+数学の得点の配列が与えられた時、その配列中での最大値を求めるプログラムを作ってみましょう。
+与えられる配列を `[55, 32, 16, 51, 80, 19]` として実際に求めてみましょう。
+
+<Answer>
+  <ViewSource path="_samples/max.ipynb" />
+</Answer>
