第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89...
TRANSCRIPT
目 次
第 1章 バカな名前ジェネレータ 1≪プロジェクト 1≫ ペンネームを生成せよ ............................................................... 1プロジェクトを計画・設計する .............................................................................. 2戦 略 ......................................................................................................... 2擬似コード ................................................................................................... 3
コード ............................................................................................................... 4Pythonコミュニティのコーディング規約を使う................................................. 6Pylintでコードをチェックする ........................................................................ 7docstringでコードを設計する ......................................................................... 10コードスタイルをチェックする ........................................................................ 12
まとめ ............................................................................................................... 14さらに読むなら ................................................................................................... 14練習プロジェクト ................................................................................................ 15挑戦プロジェクト ................................................................................................ 16
第 2章 回文を見つける 18辞書を入手して開く ............................................................................................. 19ファイルを開くときの例外を処理する ............................................................... 19辞書ファイルを読み込む ................................................................................. 20
≪プロジェクト 2≫ 単語の回文を探せ ..................................................................... 22戦略と擬似コード .......................................................................................... 22単語の回文を見つけるコード ........................................................................... 23
≪プロジェクト 3≫ 語句の回文を探せ ..................................................................... 24戦略と擬似コード .......................................................................................... 24語句の回文を見つけるコード ........................................................................... 27回文のプロファイリング ................................................................................. 29回文の最適化 ................................................................................................ 31
にりわ終 ............................................................................................................ 32さらに読むなら ................................................................................................... 32
目 次x
実用的でないPythonプログラミング―楽しくコードを書いて賢くなろう!― Lee Vaughan 著・高島 亮祐訳
https://www.kyoritsu-pub.co.jp/bookdetail/9784320124615
練習プロジェクト ................................................................................................ 33挑戦プロジェクト ................................................................................................ 33
第 3章 アナグラムを解く 34≪プロジェクト 4≫ 単語のアナグラムを探せ ............................................................ 34戦略と擬似コード .......................................................................................... 35単語のアナグラムを見つけるコード .................................................................. 37
≪プロジェクト 5≫ 語句のアナグラムを探せ ............................................................ 38戦略と擬似コード .......................................................................................... 39語句のアナグラムを見つけるコード .................................................................. 43
≪プロジェクト 6≫ ヴォルデモートを探せ:ガリア式策略 .......................................... 49≪プロジェクト 7≫ ヴォルデモートを探せ:イギリス式総当たり ................................. 50戦 略 ......................................................................................................... 51イギリス式総当たり ....................................................................................... 53
まとめ ............................................................................................................... 60さらに読むなら ................................................................................................... 60練習プロジェクト ................................................................................................ 61挑戦プロジェクト ................................................................................................ 61
第 4章 南北戦争の暗号を解読する 62≪プロジェクト 8≫ ルート暗号を解読せよ ............................................................... 62戦 略 ......................................................................................................... 65擬似コード ................................................................................................... 67ルート暗号の復号コード ................................................................................. 67ルート暗号をハックする ................................................................................. 70ユーザーインタフェースを追加する .................................................................. 72
≪プロジェクト 9≫ レールフェンス暗号を解読せよ ................................................... 78戦 略 ......................................................................................................... 79レールフェンス暗号の暗号化コード .................................................................. 79レールフェンス暗号の復号コード ..................................................................... 82
まとめ ............................................................................................................... 84さらに読むなら ................................................................................................... 84練習プロジェクト ................................................................................................ 85挑戦プロジェクト ................................................................................................ 87
目 次 xi
実用的でないPythonプログラミング―楽しくコードを書いて賢くなろう!― Lee Vaughan 著・高島 亮祐訳
https://www.kyoritsu-pub.co.jp/bookdetail/9784320124615
第 5章 清教徒革命の暗号の解読と生成 89≪プロジェクト 10≫ トレヴァニオン暗号を解読せよ.................................................. 90戦略と擬似コード .......................................................................................... 91トレヴァニオン暗号のコード ........................................................................... 92
≪プロジェクト 11≫ null暗号を書け ...................................................................... 96リスト暗号のコード ....................................................................................... 97リスト暗号の出力 .......................................................................................... 98
まとめ ............................................................................................................... 99さらに読むなら ................................................................................................... 99練習プロジェクト ................................................................................................ 100
第 6章 見えないインクで書く 102≪プロジェクト 12≫ ヴィジュネル暗号を隠せ ........................................................... 102プラットフォーム ................................................................................................ 104戦 略 ............................................................................................................... 104見えないインクを作る .................................................................................... 105python-docxでWord文書を操作する ............................................................. 107アセットをダウンロードする ........................................................................... 109
擬似コード ......................................................................................................... 111コード ............................................................................................................... 111python-docxをインポートし,リストを作り,レターヘッドを追加する ................ 111メッセージを整形して差し込む ........................................................................ 113ヴィジュネル暗号を追加する ........................................................................... 115
隠れたメッセージを特定する ................................................................................. 116まとめ ............................................................................................................... 119さらに読むなら ................................................................................................... 120練習プロジェクト ................................................................................................ 120挑戦プロジェクト ................................................................................................ 120
第 7章 遺伝的アルゴリズムで巨大なネズミを育てる 121すべての解の中から最高のものを見つける ............................................................... 121≪プロジェクト 13≫ スーパーラットを育てろ ........................................................... 122戦 略 ......................................................................................................... 122スーパーラットのコード ................................................................................. 125まとめ ......................................................................................................... 131
目 次xii
実用的でないPythonプログラミング―楽しくコードを書いて賢くなろう!― Lee Vaughan 著・高島 亮祐訳
https://www.kyoritsu-pub.co.jp/bookdetail/9784320124615
≪プロジェクト 14≫ ハイテク金庫を破れ ................................................................. 132戦 略 ......................................................................................................... 134金庫破りのコード .......................................................................................... 135まとめ ......................................................................................................... 137
さらに読むなら ................................................................................................... 138挑戦プロジェクト ................................................................................................ 138
第 8章 俳句のために音節を数える 139日本の俳句 ......................................................................................................... 140≪プロジェクト 15≫ 音節を数えろ .......................................................................... 141戦 略 ............................................................................................................... 141コーパスを使う ............................................................................................. 142NLTKをインストールする.............................................................................. 142CMUdictをダウンロードする ......................................................................... 143音節の代わりに音を数える .............................................................................. 144複数の発音で単語を扱う ................................................................................. 144
足りない単語を考慮する ....................................................................................... 144訓練コーパス ................................................................................................ 145足りない単語のコード .................................................................................... 145
音節を数えるコード ............................................................................................. 151準備して,読み込んで,数える ........................................................................ 151main()関数を定義する .................................................................................. 152
プログラムをチェックするプログラム ..................................................................... 153まとめ ............................................................................................................... 154さらに読むなら ................................................................................................... 154練習プロジェクト ................................................................................................ 155
第 9章 マルコフ連鎖解析で俳句を詠む 156≪プロジェクト 16≫ マルコフ連鎖解析 .................................................................... 157戦 略 ............................................................................................................... 159単語を選択して破棄する ................................................................................. 160行から行へ続ける .......................................................................................... 161
擬似コード ......................................................................................................... 162訓練コーパス ...................................................................................................... 163デバッグ ............................................................................................................ 164スキャフォールド .......................................................................................... 164
目 次 xiii
実用的でないPythonプログラミング―楽しくコードを書いて賢くなろう!― Lee Vaughan 著・高島 亮祐訳
https://www.kyoritsu-pub.co.jp/bookdetail/9784320124615
loggingモジュールを使う ............................................................................. 165コード ............................................................................................................... 166準 備 ......................................................................................................... 166マルコフモデルを構築する .............................................................................. 167ランダムに単語を選ぶ .................................................................................... 168マルコフモデルを適用する .............................................................................. 169俳句の行を生成する ....................................................................................... 170ユーザーインタフェースを書く ........................................................................ 173
結 果 ............................................................................................................... 176佳作の俳句 ................................................................................................... 177期待賞の俳句 ................................................................................................ 178
まとめ ............................................................................................................... 178さらに読むなら ................................................................................................... 179挑戦プロジェクト ................................................................................................ 179
第 10章 地球人は孤独なのか?
フェルミのパラドックスを探る 182≪プロジェクト 17≫ 天の川銀河をモデリングせよ..................................................... 183戦 略 ............................................................................................................... 184文明の数を見積もる ............................................................................................. 184電波バブルの大きさを選択する .............................................................................. 185検知確率を求める式を生成する .............................................................................. 186検知確率のコード ................................................................................................ 188文明の数に対して検知確率を計算する ............................................................... 189予測のための公式を生成して結果をチェックする ................................................ 191
グラフィカルモデルを構築する .............................................................................. 192グラフィカルモデルを拡大・縮小する ............................................................... 194銀河系シミュレータのコード ........................................................................... 195
結 果 ............................................................................................................... 204まとめ ............................................................................................................... 205さらに読むなら ................................................................................................... 205練習プロジェクト ................................................................................................ 205挑戦プロジェクト ................................................................................................ 207
目 次xiv
実用的でないPythonプログラミング―楽しくコードを書いて賢くなろう!― Lee Vaughan 著・高島 亮祐訳
https://www.kyoritsu-pub.co.jp/bookdetail/9784320124615
第 11章 モンティ・ホール問題 209モンテカルロシミュレーション .............................................................................. 210≪プロジェクト 18≫ ボス・サバントを検証せよ........................................................ 211戦 略 ......................................................................................................... 212ボス・サバントを検証するコード ..................................................................... 212
≪プロジェクト 19≫ モンティ・ホールゲーム ........................................................... 214オブジェクト指向プログラミングへの第一歩 ...................................................... 215戦略と擬似コード .......................................................................................... 218ゲームのアセット .......................................................................................... 219モンティ・ホールゲームのコード ..................................................................... 219
まとめ ............................................................................................................... 230さらに読むなら ................................................................................................... 230練習プロジェクト ................................................................................................ 230
第 12章 老後資金を守る 231≪プロジェクト 20≫ 引退生活をシミュレーションせよ............................................... 232戦 略 ............................................................................................................... 232過去の収益が重要だ ....................................................................................... 234最大の不確実性 ............................................................................................. 236結果を定性的に提示する方法 ........................................................................... 237
擬似コード ......................................................................................................... 239過去のデータを見つける ....................................................................................... 240コード ............................................................................................................... 241データを読み込む関数と入力を取得する関数を定義する ....................................... 241ユーザー入力を取得する ................................................................................. 242ほかに間違った入力がないかチェックする ......................................................... 244モンテカルロエンジンを定義する ..................................................................... 244あるケースの各年をシミュレーションする ......................................................... 247破産確率を計算する ....................................................................................... 248main()関数を定義して呼び出す ...................................................................... 249
シミュレータを使う ............................................................................................. 250まとめ ............................................................................................................... 254さらに読むなら ................................................................................................... 254挑戦プロジェクト ................................................................................................ 255
目 次 xv
実用的でないPythonプログラミング―楽しくコードを書いて賢くなろう!― Lee Vaughan 著・高島 亮祐訳
https://www.kyoritsu-pub.co.jp/bookdetail/9784320124615
第 13章 異星の火山活動を再現する 257≪プロジェクト 21≫ イオの噴煙 ............................................................................. 258pygameを一切れ ................................................................................................. 258戦 略 ............................................................................................................... 259ゲームスケッチを使って計画する ..................................................................... 260Particleクラスを計画する............................................................................ 261
コード ............................................................................................................... 262モジュールをインポートし,pygameを初期化し,色を定義する............................ 262Particleクラスを定義する............................................................................ 263粒子を噴出する ............................................................................................. 265粒子を更新して境界条件を制御する .................................................................. 267main()関数を定義する .................................................................................. 268main()関数を完成させる ............................................................................... 269
シミュレーションを実行する ................................................................................. 271まとめ ............................................................................................................... 272さらに読むなら ................................................................................................... 272練習プロジェクト ................................................................................................ 273挑戦プロジェクト ................................................................................................ 273
第 14章 マーズオービターを操縦する 276ゲーマーのための宇宙力学 .................................................................................... 276万有引力の法則 ............................................................................................. 277惑星の運動に関するケプラーの法則 .................................................................. 277軌道力学 ...................................................................................................... 278
≪プロジェクト 22≫ マーズオービターゲーム ........................................................... 283戦 略 ............................................................................................................... 283ゲームのアセット ................................................................................................ 285コード ............................................................................................................... 286インポートしてカラーテーブルを作成する ......................................................... 287Satelliteクラスの初期化メソッドを定義する .................................................. 287衛星の初期位置,速度,燃料,音声を設定する ................................................... 288スラスターに点火してプレイヤーの入力をチェックする ....................................... 290衛星を配置する ............................................................................................. 291衛星を回転させて軌道を描く ........................................................................... 292satelliteオブジェクトを更新する ................................................................. 293Planetクラスの初期化メソッドを定義する ....................................................... 293惑星を自転させる .......................................................................................... 295
目 次xvi
実用的でないPythonプログラミング―楽しくコードを書いて賢くなろう!― Lee Vaughan 著・高島 亮祐訳
https://www.kyoritsu-pub.co.jp/bookdetail/9784320124615
gravity()メソッドと update()メソッドを定義する ........................................ 296離心率を計算する .......................................................................................... 297ラベルを作る関数を定義する ........................................................................... 298土壌水分の地図を作る .................................................................................... 300影をつける ................................................................................................... 300main()関数を定義する .................................................................................. 301オブジェクトをインスタンス化し,様々な変数を用意する .................................... 303ゲームループを開始して音を鳴らす .................................................................. 304重力を適用し,離心率を計算し,失敗を処理する ................................................ 305成功報酬を与え,スプライトを更新して描画する ................................................ 307説明と遠隔測定データを表示して影をつける ...................................................... 308
まとめ ............................................................................................................... 309挑戦プロジェクト ................................................................................................ 309
第 15章 ぼやけた天体写真を精細化する 313≪プロジェクト 23≫ 木星をスタッキングせよ ........................................................... 314pillowモジュール .............................................................................................. 314ファイルとフォルダを扱う .................................................................................... 315ディレクトリパス .......................................................................................... 315シェルユーティリティモジュール ..................................................................... 317
動画から画像を抜き出す ....................................................................................... 317戦 略 ............................................................................................................... 318コード ............................................................................................................... 319切り取って拡大するコード .............................................................................. 319スタッキングのコード .................................................................................... 325画像を補正するコード .................................................................................... 327
まとめ ............................................................................................................... 330さらに読むなら ................................................................................................... 330挑戦プロジェクト ................................................................................................ 331
第 16章 ベンフォードの法則で不正を見つける 333≪プロジェクト 24≫ 先頭の数字についてのベンフォードの法則 .................................. 334ベンフォードの法則を適用する ........................................................................ 335カイ二乗検定を実行する ................................................................................. 337
データセット ...................................................................................................... 339戦 略 ............................................................................................................... 339
目 次 xvii
実用的でないPythonプログラミング―楽しくコードを書いて賢くなろう!― Lee Vaughan 著・高島 亮祐訳
https://www.kyoritsu-pub.co.jp/bookdetail/9784320124615
コード ............................................................................................................... 340モジュールをインポートしてデータを読み込む ................................................... 340先頭の数字を数える ....................................................................................... 341個数の期待値を取得する ................................................................................. 342適合度を計算する .......................................................................................... 343棒グラフを描く関数を定義する ........................................................................ 344棒グラフを描く関数を完成させる ..................................................................... 344main()関数を定義して実行する ...................................................................... 346
まとめ ............................................................................................................... 349さらに読むなら ................................................................................................... 349練習プロジェクト ................................................................................................ 349挑戦プロジェクト ................................................................................................ 351
練習プロジェクトの解答 353第 1章 バカな名前ジェネレータ .......................................................................... 353第 2章 回文を見つける ...................................................................................... 354第 3章 アナグラムを解く ................................................................................... 354第 4章 南北戦争の暗号を解読する ....................................................................... 355第 5章 清教徒革命の暗号の解読と生成 ................................................................. 359第 6章 見えないインクで書く ............................................................................. 361第 8章 俳句のために音節を数える ....................................................................... 362第 10章 地球人は孤独なのか? フェルミのパラドックスを探る ................................ 363第 11章 モンティ・ホール問題 ............................................................................ 368第 13章 異星の火山活動を再現する ...................................................................... 368第 16章 ベンフォードの法則で不正を見つける....................................................... 370
謝 辞 373
訳者あとがき 374
索 引 375
目 次xviii
実用的でないPythonプログラミング―楽しくコードを書いて賢くなろう!― Lee Vaughan 著・高島 亮祐訳
https://www.kyoritsu-pub.co.jp/bookdetail/9784320124615