プログラムを作れるようになりたい、そしてより良いプログラム作成ができるようになりたいと願うPythonプログラマにベストマッチなのが「穴埋め問題集」の本書です。簡単な穴埋めもありますが、ひねった問題や難問もあり、初心者の基本学習から熟練者の力試しまで、楽しいクイズ形式で進められます。解答には詳細な解説があるので、基礎固めからハイレベルな仕組みまでしっかりと習得できます。問題数は99問。
※下記GitHubに、問題のプログラム一式をアップしてあります。
https://github.com/agrodet/python-drill-questions
※姉妹書のご案内
JavaScript基礎ドリル穴埋め式
https://www.ohmsha.co.jp/book/9784274225154/
正誤表やDLデータ等がある場合はこちらに掲載しています
Chapter 1 基本文法 −リテラル、変数、文字列、式−
Chapter 2 実行制御 −繰り返し、条件分岐、関数、ラムダ−
Chapter 3 データ構造 −リスト、タプル、辞書、集合、クラス−
Chapter 4 例外処理とエラー対応
Chapter 5 正規表現
Chapter 6 入力と出力 −ファイル、システム−
Chapter 7 並行処理
Chapter 8 データサイエンスと機械学習
Pythonで書かれたプログラムを実行する方法
本書の凡例など/Pythonのインストール
Chapter 1 基本文法 −リテラル、変数、文字列、式−
1.1 リテラル
1.2 変数と式
1.3 数値の型とデータ処理
1.4 文字の型と書式化文字列
1.5 標準出力への出力
1.6 別ライブラリの読み込み
問1-1(No.01) 円の面積を求める
問1-2(No.02) 整数の割り算で商と余りを求める
問1-3(No.03) 平方根とべき乗の関係をプログラムで利用する
問1-4(No.04) 型ヒントの効果を予測する
問1-5(No.05) 部分文字列の取り出しや文字列の結合を行う
問1-6(No.06) 文字列の置き換え
問1-7(No.07) 乱数を利用してランダムなパスワードを生成する
問1-8(No.08) ランダムな文字列を生成する
問1-9(No.09) 数値範囲を指定して乱数を生成する
問1-10(No.10) 文字列をもとにしてまとまった文章を生成する
問1-11(No.11) ファイル名がライブラリとして利用できるかどうか
問1-12(No.12) 識別子はどのように使えるのか
問1-13(No.13) プログラム中にコメントを記述する
問1-14(No.14) ロボットが経路を進むのにかかる時間を求める
問1-15(No.15) 正五角形の面積を補助線を指定された状態で求める
Chapter 2 実行制御 −繰り返し、条件分岐、関数、ラムダ−
2.1 条件分岐
2.2 繰り返し
2.3 繰り返しとリスト
2.4 関数の定義と呼び出し
2.5 関数のデコレータ
2.6 ラムダ式
問2-1(No.16) 関数定義
問2-2(No.17) 可変長引数
問2-3(No.18) キーワード引数
問2-4(No.19) 条件分岐と繰り返し
問2-5(No.20) for文による検索1
問2-6(No.21) while文による検索
問2-7(No.22) for文による検索2
問2-8(No.23) while文による繰り返し操作
問2-9(No.24) 二重のfor文
問2-10(No.25) 高階関数(関数を扱う関数)
問2-11(No.26) 組み込みの高階関数
問2-12(No.27) ラムダ式
問2-13(No.28) 関数を返す関数
問2-14(No.29) デコレータ
問2-15(No.30) 再帰の練習
問2-16(No.31) 再帰による列挙
問2-17(No.32) 再帰による探索
問2-18(No.33) 再帰による構文解析
Chapter 3 データ構造 −リスト、タプル、辞書、集合、クラス−
3.1 タプル
3.2 リスト
3.3 辞書
3.4 集合
3.5 クラス
問3-1(No.34) オブジェクトのメソッド
問3-2(No.35) クラスメソッド
問3-3(No.36) リストの内包表記 - 偶数
問3-4(No.37) 偶数、再考
問3-5(No.38) float変換
問3-6(No.39) 平方数
問3-7(No.40) forループでコレクションの変更
問3-8(No.41) 継承
問3-9(No.42) Time + int = Time
問3-10(No.43) 学生のリストのソート
問3-11(No.44) 学生のリストのより簡潔なソート
問3-12(No.45) 学生のリストのより複雑なソート
問3-13(No.46) 果物
問3-14(No.47) タグ
問3-15(No.48) 単純化されたゲーム
問3-16(No.49) ゲームの改善
問3-17(No.50) 挨拶
Chapter 4 例外処理とエラー対応
4.1 例外は常に発生している
4.2 例外の発生を受けて処理を行う
4.2 tryブロックの様々な処理
4.3 例外を発生させる
問4-1(No.51) 例外オブジェクトの把握
問4-2(No.52) リスト、辞書、集合でのエラー
問4-3(No.53) if文でのエラー回避の代わりに例外を使う
問4-4(No.54) 発生したエラーからプログラムを推測
問4-5(No.55) 繰り返しの途中で例外が発生
問4-6(No.56) リストと例外
Chapter 5 正規表現
5.1 パターンマッチングと特殊文字
5.2 文字クラス
5.3 パターンの繰り返し
5.4 パターンを並列して記述する
5.5 正規表現をプログラムで利用する
5.6 グループを使った正規表現とその取り出し
5.7 フラグ
問5-1(No.57) 日本の郵便番号
問5-2(No.58) 整数を見つけろ
問5-3(No.59) Kitty Kat
問5-4(No.60) 16進トリプレット
問5-5(No.61) フランスの電話番号
問5-6(No.62) 倍増したワード
問5-7(No.63) HTMLを書き直す
問5-8(No.64) パスワード検証
問5-9(No.65) 値段を見つける
問5-10(No.66) Markdownのリンク
問5-11(No.67) Wikipediaのページのパージング
問5-12(No.68) 犬を探せ
Chapter 6 入力と出力 −ファイル、システム−
6.1 ファイルを開くopen 関数
6.2 ファイルの読み書き
6.3 ファイル情報の取得
6.4 ディレクトリ情報の取得
6.5 コマンドラインツールの作成
6.6 システム情報の取得とプログラムの終了
6.7 シグナルの利用
問6-1(No.69) ファイルを読む
問6-2(No.70) チョコレートを探す
問6-3(No.71) CSVファイルを読む
問6-4(No.72) openのモード
問6-5(No.73) オブジェクトの保存
問6-6(No.74) オブジェクトのロード
問6-7(No.75) .mclファイルのリスト
問6-8(No.76) ファイルの情報をJSONで保存する
問6-9(No.77) コマンドでスクリプトの実行1
問6-10(No.78) コマンドでスクリプトの実行2
問6-11(No.79) コマンドでスクリプトの実行3
問6-12(No.80) シグナル
Chapter 7 並行処理
7.1 スレッドの利用
7.2 単一のスレッドからの実行だけにロック
7.3 Global Interpreter Lock(GIL)による制限
7.4 本当に並列処理を行うmultiprocessingライブラリ
7.5 プロセス間でのデータ共有
問7-1(No.81) スレッドの生成と処理の終了の待機
問7-2(No.82) 問7-1でresult を使わない
問7-3(No.83) 問7-1の引数指定方法の変更
問7-4(No.84) 問7-2のadd_value関数の変更
問7-5(No.85) Barrierクラスを利用した同期処理
問7-6(No.86) multiprocessingモジュールを利用した並行処理
問7-7(No.87) multiprocessingモジュールで共有メモリを利用する
問7-8(No.88) ワーカーのプールを利用した並行処理
問7-9(No.89) キューを利用した並行処理間での値の受け渡し
Chapter 8 データサイエンスと機械学習
8.1 scikit-learn、NumPy、pandas の利用
問8-1(No.90) ランダムフォレストによる学習
問8-2(No.91) 予測モデルの比較
問8-3(No.92) さまざまな評価尺度
問8-4(No.93) 交差検証(Cross Validation)による評価
問8-5(No.94) データフレームの操作
問8-6(No.95) データの前処理
問8-7(No.96) 特徴選択と次元削減
問8-8(No.97) パイプラインで処理をまとめる
問8-9(No.98) ハイパーパラメータの探索(チューニング)
問8-10(No.99) 自作クラスを含めたパイプライン
付録
索引
筆者紹介
--------------
Pythonミニ知識
インデックスの数え方と「最初」や「最後」の指定
識別子とキーワード
Unicodeの識別子
2, 8, 16進数の表現
高階関数の結果をリストで得る
selfについて
型名や関数名でも変数名に使えてしまう
+演算子のオーバーロード
ソートの安定性
変更できない集合
関数のデコレータとラムダ式
イテレータについて
長い行の改行
日本の電話番号
日本語を正規表現で扱う
複数行を続けて記述する場合
Contrast is beautiful
否定後読みアサーション
CSVの読み書き
argparseモジュールとhelpコマンド
ロックのためのオブジェクト
--------------
プログラミングミニ知識
Key-Valueペア
オブジェクトをバイト列にする異なる方法
--------------
数学ミニ知識
極小曲面
機械学習の用語