Pythonプログラミング パーフェクトマスター

概 要

Pythonはシンプルな文法でAI開発ができる優れたプログラミング言語です。いま、機械学習や人工知能ブームを受けて、Python技術者の需要が高まっています。本書は、人工知能を実際に作りながらPythonを基礎から学ぶプログラミングガイドです。基本的なデータ操作から、文字列の処理、プログラムの流れの制御を説明し、かんたんなシミュレーションゲームを作りながらオブジェクト指向を学習し、簡単な人工知能の開発まで解説します!

著者 金城俊哉
価格 本体2800円(税別)
ISBN 978-4-7980-4816-1
発売日 2016/11/9
判型 B5変
ページ数 510
CD/DVD
ダウンロード
表紙イメージ
購入 アマゾンで購入する
楽天で購入する

※リンク先によっては、販売ページが用意されていないことがあります。あらかじめご了承ください。

新しいウィンドウで開く 書籍購入のご案内

サポート

サポート情報は以下からご参照下さい。

サポート情報へのリンク

目次

Chapter0 いま、なぜPythonなのか

0.1 そもそもPythonって何のためのものなの?

0.1.1 まずは「Pythonって何?」

0.1.2 Pythonって他のプログラミング言語と何が違うの?

Pythonは書いたらすぐに実行できる「インタープリター型言語」

0.2 PHP、Ruby、Perlがあるのに、なぜPythonなの?

0.2.1 日本語対応もしっかり!

0.3 どうしてPythonはプログラミングの学習に向いているの?

0.3.1 Pythonが褒められる2つの理由

Pythonには面倒な手続きが少ない

「プログラマーの頭」になるための近道

Memo プログラミング言語

0.4 Pythonのコードが読みやすいって、どんなふうに?

0.4.1 階乗を求めるプログラムで比べてみよう

0.5 結局のところPythonで何が作れるの?

0.5.1 具体的にソフトウェアとしてはどんなものが作られているの?

統合開発環境

一般的なアプリケーション

Webアプリケーション

ビデオゲーム

Memo Pythonは書いたらすぐに実行できるインタープリター型言語

Webフレームワーク

科学/数学用のパッケージ/ライブラリ

0.6 Pythonを使えると、この先どんなメリットがあるのかな?

0.6.1 Pythonのいいところ1「ビッグな実績があるんです」

0.6.2 Pythonのいいところ2「強力なフレームワークがあるんです」

0.6.3 Pythonのいいところ3「そんなマイナーな言語使える人少ないんじゃないの?」

One point 実は「儲かる」Pythonプログラマー

0.7 ところでPythonでアプリを作って何がウレシいの?

Pythonにはイイことがいっぱい

0.8 Pythonプログラミングをゼロからスタート!

なるべく順番に読んでほしいけど、好きなところから始めてもかまいません!

Chapter1 Pythonを使えるようにしてプログラミングをはじめよう 環境構築とソースコードの入力

1.1 PythonをダウンロードしてPCにインストールしよう

1.1.1 PythonをダウンロードしてWindowsマシンにインストールしよう

Python3.x.xのダウンロードとインストール

1.2 IDLE(Python GUI)を起動してPythonを動かしてみよう

1.2.1 Python開発ツール「IDLE」でプログラムを実行してみよう

IDLEを起動して「Hello world!」プログラムを実行する

Memo Pythonのバージョン

1.2.2 もっとプログラムらしいことをやってみよう

Pythonのプログラム用ファイルを作る

保存したプログラムを実行する

1.2.3 さらにプログラムらしいことをやってみよう(アプリの画面を作る)

専用の画面を持つプログラムを作ってみる

Memo Macへのインストール

Memo 外部モジュール

Hint 本書で使う標準モジュール以外のモジュール

Memo Pythonのロゴ

Chapter2 Pythonプログラムの材料 オブジェクトとデータ型

2.1 データのかたち(データ型)

2.1.1 プログラムとデータは別のもの(リテラル)

値(リテラル)の姿

Memo プログラムを書くときにハマりやすいこと

2.1.2 整数も小数も正も負も(数値型)

数値型

2.1.3 文字も文字列も(文字列型)

文字列リテラル

Hint 「'」「""」のどっちがいい?

2.1.4 データではない文字列(コメント)

ソースコードのメモ書き「コメント」

2.1.5 YesかNoだけ(ブール(bool)型)

真偽リテラル

2.1.6 「値そのものが存在しない」は「None」

何もないことを示す特殊なリテラル「None」

2.2 オブジェクトと変数

2.2.1 オブジェクトを捕まえろ!

プログラムのデータはすべてオブジェクトになる

オブジェクトには関数(メソッド)が結び付けられている

2.2.2 3回続けてあいさつしてみよう??変数への代入

代入した値のデータ型は変更できないけれど値そのものを書き換えることはできる

Memo 変数名を付けるときのルール

Hint 変数名の命名規則

2.3 変数を使っていろんな計算をする

2.3.1 「入力した値を2倍にしてあげるよ」(算術演算子)

計算させるための記号、算術演算子

変数を使って演算する

単項プラス演算子(+)、単項マイナス演算子(?)

2.3.2 「僕の名前は'Python'です」(代入演算子)

代入演算子による値の代入

複合代入演算子による式の簡略化

多重代入

2.3.3 どこから手をつける?(演算子の優先順位)

演算子には優先順位があるけれど()でコントロールできる

Memo 演算子の優先順位

2.4 文字列や数値をPythonの道具で自在に操ろう(関数、メソッド)

2.4.1 Pythonの道具(関数、メソッド)

print()関数ってどこから呼んできたの?

Hint リテラルも変数もみんなオブジェクト

2.4.2 整数型への変換と浮動小数点数型への変換

整数以外の値をint型に変換する

浮動小数点数型(float型)への変換

2.4.3 え! 文字が逃げる?(エスケープシーケンス)

自動エコーとprint()関数による出力結果の違い

「¥」で文字をエスケープすれば改行やタブを入れられる

Hint 小数を含むstr型の「数字」をfloat型にする

2.4.4 「"こん"+"にちは"」「ようこそ*4」(文字列の連結と繰り返し)

文字列を連結したり繰り返したりする

2.4.5 会話の中から必要な文字だけ取り出そう

[]で1文字抽出する

[:]、[インデックス:]、[:インデックス]、[インデックス:インデックス:ステップ]で

文字列を切り出す

2.4.6 関数やメソッドを使えば文字列の分担、結合、置換、いろいろできる

len()関数で文字列の長さを調べる

split()メソッドで文字列を規則的に切り分ける

join()メソッドで文字列をジョイント!

replace()メソッドで文字列の一部を置き換える

format()メソッドで文字列を自動作成

Tips 逆さ言葉を答えてみよう

2.4.7 初恋したのはいつ?(input()関数)

インタラクティブシェルで入力された文字列はinput()関数で取得

2.4.8 あなたの標準体重は?

BMI(体格指数)を使って標準体重を計算してあげよう

Memo そのほかの便利な文字列操作関数

Chapter3 条件分離と繰り返し、関数を使う

3.1 テニスの攻撃パターンをシミュレートする

3.1.1 同じ技を10回繰り返す(forによる繰り返し)

スマッシュを連続10回繰り返す

3.1.2 2つの技を交互に繰り出す(ifによる条件分岐)

スマッシュとストロークを交互に繰り出す

Memo rangeオブジェクト(1)

Memo True/Falseと真/偽

3.1.3 3つの技を織り交ぜる(if...elif...else)

ifにelifを加えて条件を2つに増やす

ifの条件式を書く順番に気を付けよう

3.1.4 攻撃パターンをランダムにしよう

randomモジュールを使って疑似乱数を発生させる

3.2 もう一つの繰り返し技(whileによる繰り返し)

3.2.1 条件がTrueの間は繰り返すよ

スマッシュを連続10回繰り返す

3.2.2 ピティナ、入力された言葉を再生する

相手の言葉をそのまま再生、'さよなら'で終了

3.3 リスト

3.3.1 4種類のストロークを順に繰り出す(リスト)

リストで複数のオブジェクトをまとめて管理

インデックシング

スライス

イテレーション

Memo rangeオブジェクト(2)

リストの更新

2つのリストをforで処理してみる

リストのリスト

Memo リストの操作

リストの中に要素製造装置を入れる(内包表記)

3.3.2 いわゆる「定数リスト」(タプル)

タプルの使い方

3.4 辞書と集合

Memo リスト表示をランダムに抽出する

3.4.1 ボールを打ったら音を出す(名前と値のペア)

辞書(dict)型

イテレーションアクセス

Memo 辞書に使えるメソッド

複数のシーケンスのイテレーション

3.4.2 要素の重複を許さない集合

まずは集合を作ってみる

集合を使って重複した要素を削除する

3.5 装置を作る(関数)

3.5.1 呼び出すと擬音を付けてくれる関数

パラメーターの指定

デフォルトパラメーター

Hint リストをデフォルトパラメーターにするときの注意

伸縮自在のパラメーター

キーと値がセットになったパラメーター

関数オブジェクトと高階関数

関数内関数とクロージャー

小さな関数は処理部だけの「式」にしてしまう(ラムダ式)

ジェネレーター

Tips デコレーター

Chapter4 オブジェクト、そして人工知能へ向けての第一歩

4.1 オリジナルのオブジェクト

4.1.1 「鬼コーチオブジェクト」登場!(クラスの作成)

オリジナルのクラス=オブジェクト

4.1.2 「鬼コーチ」を呼んでこよう(オブジェクトの生成)

MichaelクラスからMichaelオブジェクトを作る

4.1.3 打ち返した回数を覚えておいてもらおう(クラス変数)

オブジェクト同士で共有するクラス変数

クラス変数を外部で初期化する

teach()をクラスメソッドに変更する

Memo メソッドやクラス変数を動的に追加する

4.1.4 大事な変数は隠しておこう(カプセル化)

インスタンス変数へのアクセスはすべてプロパティ経由にする

プロパティを使うことに意味はあるの?

4.2 ほんとに知能?

4.2.1 人工知能ってなに? えっ知能? 無脳?

絶妙トークは続く

Ptna(ピティナ)、君は人工ピーポー?

Ptnaオブジェクトの動作原理

Ptnaクラスと応答クラス

Memo ソースコードのドキュメント化

4.2.2 最初のピティナ

ピティナ、オウム返しボットバージョン

4.2.3 「オウム返し」+「ランダム応答」の2本立てで反応する(継承とオーバーライド)

ピティナ・バージョン2の実行モジュール「prototype.py」

Memo モジュール(Pytonファイル)の取り込み

Ptnaのモジュール「ptna.py」

応答オブジェクトのモジュール「responder.py」

Memo WhatResponderへの切り替え

Chapter5 ピティナのGUI化と[人工感情]を移植する

5.1 GUI版ピティナ

5.1.1 ピティナをGUIモジュールに移植するよ

ピティナを画面に表示する

GUIを作成するrun()関数

Memo 名前付きパラメーター

核心の対話処理

プロンプトの生成とログの出力

すべてのモジュールを確認してピティナを起動してみよう

5.1.2 Responderをランダムに切り替える

応答時にRandomResponderとRepeatResponderをランダムに実行する

Memo mainloop()メソッド

5.2 辞書を片手に

5.2.1 ファイルのオープンと読み込み

ファイルの中身を読み込んで画面に出力してみよう

Memo ユニバーサル改行モード

ピティナ、辞書を読み込む

5.3 ピティナ、パターンに反応する

5.3.1 正規表現ことはじめ

正規表現のパターン

パターン辞書ファイルを作ろう

5.3.2 「パターン辞書」「ランダム辞書」「オウム返し」の三つ巴の反応だ!

match()

Dictionaryクラス

Responderクラス

Ptnaクラス

5.4 感情の創出

5.4.1 ピティナに「感情」を与えるためのアルゴリズム

感情の「揺れ」はパラメーター値を変化させる仕組みで実現

感情の表現はイメージを取り換えることで伝える

5.4.2 パターン辞書の変更

パターン辞書のフォーマットを変更

Memo pack()メソッドで部品を配置する

5.4.3 感情モデルの移植(Emotionクラス)

機嫌値を管理するEmotionクラス

Memo pack()メソッドのsideオプション

5.4.4 感情モデルの移植(Dictionaryクラス)

パターン辞書の各行をParseltemオブジェクトとして保持する

Memo pack()メソッドでウィンドウの上下左右に部品を配置する

5.4.5 感情モデルの移植(Parseltemクラス)

パターンや応答例から機嫌変動値を取り出す

Parseltemクラスの_init_()によるオブジェクトの初期化

match()、choice()、suitable()の追加

5.4.6 感情モデルの移植(Responderクラス、PatternResponderクラス、Ptnaクラス)

ResponderクラスとWhatResponder、RandomResponderの修正

パターン辞書を扱うPatternResponderクラスの修正

5.4.7 感情モデルの移植(ピティナの本体クラス)

Memo メッセージボックス

5.4.8 ピティナ、笑ったり落ち込んだり

感情によって表情を変える(グローバル変数の追加とrun()関数の修正)

感情の揺らぎを表情で表す

Memo grid()メソッドでグリッド状に部品を配置する

Chapter6 「記憶」のメカニズムを実装する(機械学習)

6.1 機械学習のススメ

6.1.1 まるごと覚える

辞書の学習を実現するためにクリアすべき課題

「学習メソッド」と「記憶メソッド」の追加

ピティナの本体クラスの修正

プログラム終了時の処理

6.2 形態素解析入門

6.2.1 形態素解析モジュール「Jamone」の導入

「PyPl」はPytonライブラリの宝庫

pipコマンドで「Janome」をインストールする

「Janome」で形態素解析いってみよう

Memo datetimeモジュール

6.2.2 キーワードで覚える

形態素解析を行うanalyzerモジュールを作ろう

ピティナの本体クラスを改造する

Dictionaryクラスを改造する

パターン辞書ファイルへの保存

Parseltemクラスのadd_phrase()とmake_line()

形態素解析版ピティナと対話してみる

6.3 テンプレートとして覚える

6.3.1 テンプレート学習用の辞書をつくろう

テンプレート辞書の構造

6.3.2 Dictionaryクラスの改造

テンプレート辞書ファイルの読み込み

テンプレートの学習

テンプレート辞書ファイルへの保存

Responderクラス群の新入り、TemplateResponderクラス

Ptnaクラスの変更

テンプレート学習を実装したピティナと対話してみる

Chapter7 マルコフ連鎖で文章を作り出す

7.1 無限のサル定理をマルコフ連鎖で実証する

7.1.1 マルコフ連鎖を使って文章を生成する

単語がつながっていくときの法則

マルコフ連鎖、マルコフモデルとは

7.1.2 3単語プレフィックスのマルコフ辞書

「わたしが好きなプログラムの女の子です。」って?

7.1.3 マルコフ辞書の実装

形態素解析とファイルの読み込み

マルコフ辞書の作成

マルコフ辞書から文章を作り出す

Memo もとになる文章量が少ないと文章が作れないことがある

重複した文章を取り除く

プログラムを実行して文章を作ってみる

Hint 著作権の切れた作品を公開する青空文庫

7.2 マルコフ連鎖を利用した会話ボットの作成

7.2.1 小説を題材にマルコフ連鎖で生成した文章で応答する

Markovクラス

7.2.2 入力した文字列に反応するようにしてみる

markov_botモジュールの改造

入力したマルコフ辞書が反応するか確かめる

7.3 ピティナ、マルコフ辞書を使う

7.3.1 マルコフ連鎖文を生成するMarkovクラス

Markovクラス

7.3.2 Ptnaクラスの改造

Ptnaクラス

7.3.3 Responderに新たに加わったサブクラスMarkovResponder

MarkovResponderクラス

7.4.4 Dictionaryクラスにload_markov()メソッドを追加

Dictionaryクラス

7.4.5 マルコフ辞書を手にしたピティナ、その反応は?

最後に処理の流れを確認してみよう

Chapter8 インターネットアクセス

8.1 外部モジュール「Requests」を利用してネットに接続する

8.1.1 外部モジュール「Requests」

Requestsのインストール

8.1.2 Yahoo!JAPANにアクセスしてみよう

Requestsを利用してWebサイトにアクセスする

レスポンスメッセージからデータを取り出すメソッド

8.1.3 WebAPIで役立つデータを入手

Webサービスを利用するためのWeb API

NTT docomoが提供しているWeb APIがオモシロイ

8.2 Requestsでネット上の情報を収集しよう

8.2.1 天気予報を配信するWebサービス「Weather Hacks」

東京の天気予報を知るためのURLを作ろう

requestsのget()で天気予報をゲット!

今日と明日と明後日の天気だけを抜き出す

8.2.2 ウィキ(Wiki)るプログラム

MediaWikiのAPI

Hint APIサンドボックスでどんなデータが返ってくるのかを調べる

Wikipediaから情報を収集しよう

8.2.3 「Yahoo!ニュース」のヘッドラインを取得してみよう

スクレイピング専用のBeautifulSoup4モジュール

BeautifulSoup4で「Yahoo!ニュース」のRSSをスクレイピング

Memo Twitterの開発者向けサイト

8.2.4 ピティナ、ネットにつながる

ピティナが今日と明日の天気を教えてくれる

天気予報のデータを取得するWeatherResponderクラス

ptnaFormモジュールの改造

Webにつながるピティナを実行してみる

Appendix

Appendix 1 Pythonの標準ライブラリ

Appendix 2 Pythonの外部ライブラリ

PR

秀和システム