第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89...

9
1 バカな名前ジェネレータ 1 プロジェクト 1 ペンネームを生成せよ ............................................................... 1 プロジェクトを計画・設計する .............................................................................. 2 ......................................................................................................... 2 擬似コード ................................................................................................... 3 コード ............................................................................................................... 4 Python コミュニティのコーディング規約を使う................................................. 6 Pylint でコードをチェックする........................................................................ 7 docstring でコードを設計する ......................................................................... 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

Upload: others

Post on 28-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89 ≪プロジェクト10≫トレヴァニオン暗号を解読せよ..... 90 戦略と擬似コード

目 次

第 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

Page 2: 第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89 ≪プロジェクト10≫トレヴァニオン暗号を解読せよ..... 90 戦略と擬似コード

練習プロジェクト ................................................................................................ 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

Page 3: 第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89 ≪プロジェクト10≫トレヴァニオン暗号を解読せよ..... 90 戦略と擬似コード

第 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

Page 4: 第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89 ≪プロジェクト10≫トレヴァニオン暗号を解読せよ..... 90 戦略と擬似コード

≪プロジェクト 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

Page 5: 第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89 ≪プロジェクト10≫トレヴァニオン暗号を解読せよ..... 90 戦略と擬似コード

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

Page 6: 第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89 ≪プロジェクト10≫トレヴァニオン暗号を解読せよ..... 90 戦略と擬似コード

第 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

Page 7: 第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89 ≪プロジェクト10≫トレヴァニオン暗号を解読せよ..... 90 戦略と擬似コード

第 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

Page 8: 第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89 ≪プロジェクト10≫トレヴァニオン暗号を解読せよ..... 90 戦略と擬似コード

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

Page 9: 第3 章 アナグラムを解く...第5 章 清教徒革命の暗号の解読と生成 89 ≪プロジェクト10≫トレヴァニオン暗号を解読せよ..... 90 戦略と擬似コード

コード ............................................................................................................... 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