# Pythonの最初の一冊を選び、説明してテストできるプログラムを作る — 学習ワークシート

[学習ガイド](https://unireadinglist.com/ja/guides/python-programming/)

[科目・テーマ: プログラミング入門](https://unireadinglist.com/ja/subjects/computer-science/#course-intro-programming)

出典確認日: 2026-11-03

学習順路・例題の編集責任：University Reading List編集プロジェクト。

基本的な計算とファイル操作ができるプログラミング初学者向けです。Think Python第3版、Python Crash Course第3版、GuttagのIntroduction to Computation and Programming Using Python第3版を比較します。課題、データ、関数は当サイト独自の教材で、書籍の問題の転載や実運用の監視システムではありません。

## 出発点を選ぶ

- [ ] 無料で説明を重視する順路がよい
  著者のThink Pythonウェブ版で、ノートブックか自分の小さなファイルを実行します。実行前に予測を書き、違いを説明してください。無料のオンライン閲覧は印刷版が無料という意味ではありません。

- [ ] 目に見える作品を作りながら学びたい
  Python Crash Courseの第I部を終え、第II部から一つ選びます。小さな計算部分をテストしてから画像やウェブを足しましょう。三つの環境を同時に始めると、自分のロジックの誤りが見えにくくなります。

- [ ] 計算モデルとデータ分析へ進みたい
  Guttagの初期のプログラミングとテストから始めます。数学に慣れた初心者の一冊目にもできますが、後半のシミュレーションやデータ手法は基本構文より長い学習順路です。

## 三冊を比較する

### Pythonプログラミング入門: コンピュータ科学者として考える方法

Allen B. Downey · 3 · 2024
無料の概念中心の出発点

選ぶ場面: 短い実行例、明確な用語、段階的な説明から始め、大きなアプリは後にしたい。
別の教材が適する場面: 指定プロジェクトの環境や統計モデリング全体が直ちに必要な場合。
読む範囲: 1–3・5–7・9–10章を中心に、文字列は8章、ファイルは13章を参照。14–17章のオブジェクトは後回しにできます。
限界と注意点: 第3版は章順が変わり、ノートブックを使います。旧版の章番号は流用しません。無料本文と、任意の第三者サービスColabでの実行や修了証は別の話です。

#### 選ぶ前に試す

Think Pythonのリスト・辞書の章の後、\[("A",0),("A",None),("A",6)\]を実行せず追跡し、各行の後の合計と件数を図示します。
確認すること: 最終的に合計6、件数2、平均3.0。Noneは件数に入らず、ゼロは入ります。結果だけでなく状態変化を説明します。

自分のメモ:

________________________________

ISBN: 978-1-098-15543-8

[公式の無料教材](https://allendowney.github.io/ThinkPython/)

[書誌情報と入手方法](https://unireadinglist.com/ja/subjects/computer-science/think-python-how-to-think-like-a-computer-scientist/)

### Python Crash Course: A Hands-On, Project-Based Introduction to Programming（最短距離でゼロからしっかり学ぶ Python入門）

Eric Matthes · 3 · 2022
作品へ進む段階的な順路

選ぶ場面: ゲーム、可視化、ウェブアプリのどれかを作り、先に言語の基礎を練習できる。
別の教材が適する場面: 短いループや関数をまだ追えない場合。フレームワークから始めると理解の不足が隠れます。
読む範囲: 第I部1–8・10–11章が基礎。大型プロジェクトは12–14、15–17、18–20章です。小さなプログラムの後に一つ選びます。
限界と注意点: 出版社は第3版を2022年12月刊とします。依存関係と配備先は変わるので、印刷されたサービス名を永久の手順とせず著者の訂正・更新を確認します。

#### 選ぶ前に試す

Python Crash Course10–11章の後、計算をファイル・入力処理から分離し、空、ゼロだけ、全欠測の三つの小さなテストを書きます。
確認すること: 計算関数は行を受け取り、ファイルを開かずに値を返します。三ケースの契約と期待値を区別し、プロジェクトを手操作せず失敗を検出できます。

自分のメモ:

________________________________

ISBN: 9781718502703

[書誌情報と入手方法](https://unireadinglist.com/ja/subjects/computer-science/python-crash-course-matthes/)

### Pythonによる計算とプログラミング入門

John V. Guttag · 3 · 2021
計算問題の解法を深める教材

選ぶ場面: 数学的前提を明示し、プログラムをアルゴリズム、シミュレーション、データ解釈へ結びたい。
別の教材が適する場面: 最初の短いスクリプトだけが目標、または計算の授業より配備の手引きが必要な場合。
読む範囲: 1–5・7–9章から開始。11–12章はアルゴリズム、16–22章はシミュレーションと統計、23章はpandasです。
限界と注意点: 対象の第3版は2021年刊でPython 3.8の早見表を含みます。昔のライブラリ例が今も無変更で動くとは限りません。環境を記録し、配布コードと正誤表を確認します。

#### 選ぶ前に試す

Guttagの関数・テストの初期範囲で入力契約を明記し、合計・件数と処理済みの行を結ぶループ不変条件を書きます。
確認すること: 不変条件は処理済みの受理可能な行のみを数え、欠測と値の大小を分けます。契約外入力と、通常の単体テストでは保証できない数値的限界を一つずつ説明します。

自分のメモ:

________________________________

ISBN: 978-0-262-54236-4

[書誌情報と入手方法](https://unireadinglist.com/ja/subjects/computer-science/introduction-to-computation-and-programming-using-python/)

## 準備を確認する

### 文字列の「12」と数値12は同じ値？

自分のメモ:

________________________________

### ゼロと欠測は交換できる？

自分のメモ:

________________________________

### 実装前に関数が約束することは？

自分のメモ:

________________________________

## 成果物を作る六つの段階

- [ ] 1. 短い式の値と型を予測する

読む範囲: Think Python 1–2章、Crash Course 1–2章、Guttag 1–2章。

作るもの: 数値、文字列、比較、除算の式を六つ書き、実行前に値と型を予測します。違った結果について理由を書きます。

確認すること: 表示された結果を説明なしに正解とはしません。数値、印字された文字、入力された文字列を区別できます。

自分のメモ:

________________________________

- [ ] 2. データの規則を条件にする

読む範囲: Think Python 5・7章、Crash Course 4–5・7章、Guttag 2.3–2.6節。

作るもの: 例題の各行を手で追い、ゼロと欠測を数えるか決めてから、各行を一度ずつ訪れるループを書きます。

確認すること: ゼロを残し、Noneだけを除きます。順序を変えても有効な観測の判定は同じで、走査中の集合から要素を削除しません。

自分のメモ:

________________________________

- [ ] 3. 計算に契約を書く

読む範囲: Think Python 3・6章、Crash Course 8章、Guttag 4章。

作るもの: 入力、戻り値、空入力時の動作を先に定義し、値を返す処理と読みやすく印字する処理を分けます。

確認すること: 対話入力なしに関数を呼べ、戻り値を再利用できます。元の入力は変わりません。

自分のメモ:

________________________________

- [ ] 4. キー別に集計してから平均する

読む範囲: Think Python 9–10章、Crash Course 3–4・6章、Guttag 5章。

作るもの: 例題の合計用・件数用の辞書を作ります。新しい地点を加え、最初の有効値で項目が作られる過程を追います。

確認すること: 各有効行がその地点の合計と件数へ一度だけ寄与します。地点数や欠測を含む行数で割らないでください。

自分のメモ:

________________________________

- [ ] 5. ファイルと失敗を見える形にする

読む範囲: Think Python 8・13章、Crash Course 10章、Guttag 7・9章。

作るもの: 小さなローカル用データと別の読込処理を作り、空白・不正な行・数値でない欄の扱いを書きます。これを既に決めた平均関数の契約へ混ぜません。

確認すること: 読込失敗を成功した空結果に置き換えません。架空データでよく、個人情報や実運用の記録は必要ありません。

自分のメモ:

________________________________

- [ ] 6. 再実行できる小さな成果物を渡す

読む範囲: Think Python 7・9章を再読、Crash Course 11章、Guttag 8章。

作るもの: 関数、データ、テスト、実行手順を揃えます。基準例、空、全欠測、ゼロのみ、入力不変、順序変更または全体の複製を調べます。

確認すること: 期待値をプログラムから写さず独立に計算します。他の人が実行し、契約外の入力を特定できること。少数例の成功を実運用への準備完了とはしません。

自分のメモ:

________________________________

## 解答付きの例題: ゼロは観測値、Noneは欠測

\[("A", 12), ("B", None), ("A", 0), ("B", 8), ("A", 18)\]から地点ごとの有効値の平均を返します。ゼロを残し、Noneを除き、有効値がない地点を省き、入力は変えません。

前提: 各行は文字列の地点と有限の整数・浮動小数点数またはNoneです。真偽値、不正な行、NaNは本例の契約外です。単位はすべて同じ任意単位。空または全欠測なら空の辞書を返します。架空の学習用データです。 また、各地点の累計が有限に保たれる大きさ・件数の読数に限ります。この簡単な浮動小数点計算はオーバーフローを処理せず、すべての有限入力に対する厳密な計算を保証しません。

自分のメモ:

________________________________

## 前提を変えて考える: バッチを結合するには平均だけでなく件数が必要

元の架空データをbatch1=\[("A",12),("A",0),("B",None)\]とbatch2=\[("A",18),("B",8)\]に分けます。入力・欠測規則は維持します。元の行を保持せずバッチ要約を結合して地点別平均を求め、バッチ平均の単純平均で足りるか判断します。ここでは正確に表現できる小さな整数を使います。

自分のメモ:

________________________________

## 次に進む前に

- 概念中心、作品中心、モデル中心のどれかを選び、後回しにする内容も説明できる。
- 関数を追跡し、ゼロとNoneの違い、有効値がない地点の扱いを説明できる。
- 独立に求めた期待値、境界確認、実行手順を備え、少数の成功例を普遍的な正しさの証明と呼ばない。

## 解答と解釈

### 文字列の「12」と数値12は同じ値？

型と可能な操作が違います。入力は意図して変換し、不正な値の扱いを定めてから算術に使います。

### ゼロと欠測は交換できる？

できません。本例ではゼロも有効な観測で、Noneが欠測です。どちらも真偽値判定では偽なので、データの規則を条件に直接書きます。

### 実装前に関数が約束することは？

入力、出力、境界条件です。本例は有効な観測のない地点を省き、呼出側のデータを変えません。有効値がないことを平均ゼロと捏造しません。

### ゼロは観測値、Noneは欠測

1. 実装前に確認します。Aの12・0・18は合計30、件数3。Bの有効値は8のみで、Noneは合計にも件数にも寄与しません。
2. 合計と件数の辞書を別々に初期化し、value is Noneで除外します。if valueを有効値の条件にはしません。
3. 有効な行について、その地点の合計へ値を加え、件数を一つ増やします。ループ後に各合計を対応する件数で割ります。
4. Aは30 / 3 = 10.0、Bは8 / 1 = 8.0。有効値を持たない地点は項目を作らず省くため、分母ゼロは発生しません。
5. 真偽値で絞る誤実装はAのゼロを落とし、(12 + 18) / 2 = 15.0とします。例外なく動いても別の問いに答えてしまいます。

結果は\{"A": 10.0, "B": 8.0\}です。下の関数はこの規則を表現し、入力を変えず、ファイル、ノートブック、対話入力に計算を結びつけません。

## ゼロは観測値、Noneは欠測 — python

```python
def means_by_site(rows):
    totals = {}
    counts = {}
    for site, value in rows:
        if value is None:
            continue
        totals[site] = totals.get(site, 0) + value
        counts[site] = counts.get(site, 0) + 1
    means = {}
    for site in totals:
        means[site] = totals[site] / counts[site]
    return means
```

結果を検証する: \[\] → \{\}、\[("A", None)\] → \{\}、\[("A", 0)\] → \{"A": 0.0\}を確認します。提示した小整数では順序変更や全有効行の複製で平均は不変です。一般の浮動小数点では丸めを別途検討し、順序による厳密な不変性を約束しません。("A", "bad")のような入力には契約外の検証方針が必要です。

### 前提を変えて考える: バッチを結合するには平均だけでなく件数が必要

1. batch1はA:(合計12,件数2)、Bの有効要約なし。batch2はA:(18,1)、B:(8,1)。要約なしは観測されたゼロではありません。
2. 地点別に合計と件数を足すとA:(30,3)、B:(8,1)。最後に割ればA10.0、B8.0で、全行をまとめた計算と一致します。
3. Aのバッチ平均6と18の単純平均は12で誤りです。件数が違うため、重みつき平均(2×6+1×18)/(2+1)=10を使います。

地点ごとに(合計,件数)を保存し、成分別に加算して最後に割ります。件数を伴わない平均から一般に全体平均は復元できません。この例は\{"A":10.0,"B":8.0\}です。

結果を検証する: 一行を別バッチへ移して再計算します。この小整数例の全体平均は不変ですが、バッチ平均の単純平均は変わり得ます。一般の浮動小数点では数学的な括り替えがビット単位の一致を保証しないため、丸めと妥当な誤差境界を別途検討します。

## よくある誤り

### もっともらしい表示を検証済みとする

誤答A = 15.0も普通の数値です。意図した規則とありがちな誤実装を区別する手計算の例を残します。

### 教材の版と実行環境を混同する

章番号は版に固有ですが、依存関係や配備手順は変化します。実際のPython・ライブラリの版を記録し、著者の更新を読みます。

### ロジックを切り出す前にライブラリを足す

平均関数には組込み機能だけで十分です。描画、CSV読込、ウェブ画面を接続する前に単独でテストし、環境の問題と計算の誤りを分けます。

## 出典と版の確認

- [Allen B. Downey — free third-edition webbook and contents](https://allendowney.github.io/ThinkPython/)
  著者の第3版ウェブ版で無料本文、ノートブック、章順を確認しました。任意の実行サービスと本文閲覧は別で、元の練習問題は転載しません。

- [O’Reilly — third-edition publication and copyright details](https://www.oreilly.com/library/view/think-python-3rd/9781098155421/copyright-page01.html)
  出版社の著作権ページは2024年第3版と改訂履歴を記録します。オンライン商品のISBNと正誤表の参照番号が違うことだけを理由に、現存する印刷版ISBNを変えません。

- [No Starch Press — third-edition ISBN, date and contents](https://nostarch.com/python-crash-course-3rd-edition)
  出版社が第3版ISBN、2022年12月刊、全20章を確認します。作品の選択と当サイトの集計課題は独自の学習提案です。

- [Eric Matthes — third-edition corrections and project updates](https://ehmatthes.github.io/pcc_3e/updates/)
  著者は刷ごとの訂正と別の配備更新を公開します。更新されるページの古い導入文から現在の正確な刷数を推定しません。

- [MIT Press — Guttag third edition and format-specific ISBNs](https://mitpress.mit.edu/9780262542364/introduction-to-computation-and-programming-using-python/)
  MIT Pressが2021年第3版ペーパーバックISBN 9780262542364と別の電子版ISBN・日付を確認します。計算・データモデルの教材という説明は依存環境の永続的互換性の保証ではありません。

- [MIT Press — third-edition table of contents](https://mitp-content-server.mit.edu/books/content/sectbyfn/books_pres_0/13616/3E_TOC.pdf?dl=1)
  公式目次PDFで関数4章、構造化型5章、ファイル7章、テスト8章、例外9章、pandas 23章を確認しました。後半のモデルは任意の延長です。

- [Python documentation — truth values, including zero and None](https://docs.python.org/3/library/stdtypes.html#truth-value-testing)
  Python公式型文書でゼロとNoneがともに偽になることを確認しました。本例の関数、数値、誤例、チェックは独自に作成して実行しました。

- [Python documentation — floating-point representation and accumulation limits](https://docs.python.org/3/tutorial/floatingpoint.html)
  公式数値チュートリアルは表現誤差と累積誤差を説明しています。この小整数例は厳密に検算できますが、一般の浮動小数点契約で括り替え後の同一結果までは保証できません。

提案する学習活動であり、公式の課題や全巻通読の主張ではありません。

[編集と選定の方法](https://unireadinglist.com/ja/editorial/)
