2018.06.07

【正誤情報】『わかるPython[決定版]』

わかるPython[決定版]

■本書の内容に下記のような誤りがありました。お詫びの上、訂正いたします。
※初版第7冊

●目次 iv
複合代入演算子(累算代入演算子)

累算代入文

●p.9 Memo
公式サイトでは、現在でも旧バージョンの「Python 2」と最新バージョンの「Python 3」の両方をダウンロードできます。しかし、Python 2は一部の言語仕様がPython 3と異なるので、これから新たにPythonを学ぶのであれば、Python 2ではなく、Python 3をインストールすることをおすすめします。

本書のChapter10~12で紹介する、機械学習・ニューラルネットワーク・ディープラーニングのサンプルプログラムを実行するには、最新バージョンの実行環境ではなく、Python 3.7(例えば3.7.9)の64bit版、またはPython 3.6(例えば3.6.8)の64bit版をインストールしてください。

●p.9
Chapter12で紹介する

Chapter11~12で紹介する

●p.10
2 [Latest Python 3 Release ~]をクリックする

2 最新バージョンは[Latest Python 3 Release ~]をクリックし、他のバージョンはページの下方にある[Python 3.~]をクリックする

●p.11  Column
クリックするか、Pythonの公式サイトで[ダウンロード]タブ→[Download Python 3.x]をクリックします。

クリックします。

※図を削除

●p.15
2 [Latest Python 3 Release ~]をクリックする

2 最新バージョンは[Latest Python 3 Release ~]をクリックし、他のバージョンはページの下方にある[Python 3.~]をクリックする

●p.20 Memo
本書と同じバージョンのPythonをダウンロードしてお使いください。

本書で動作を確認したバージョン(3.7または3.6)のPythonをダウンロードしてお使いください。

●p.41 表 //
除算(結果の小数点以下は切り捨て)

除算(結果以下で最大の整数を返す)

●p.42
計算結果の小数点以下を切り捨てます。計算結果は次のように整数になります。

計算結果以下で最大の整数を返します。次の例では、1.33…以下で最大の整数である1を返しています。

●p.45
ずっと後ろの桁は切り捨てられます。

後方の桁は、「丸め」と呼ばれる処理によって省略されます。丸めというのは、元の値を表現可能な値に置き換えることです。

●p.45
計算した時点で切り捨てが行われているので

計算した時点で丸めが行われているので

●p.45
複合代入演算子(累算代入演算子)

累算代入文

●p.46
書式 複合代入演算子
[変数] [複合代入演算子] [値]

書式 累算代入文
[変数] [累算代入演算子] [値]

●p.46
主な複合代入演算子を表にまとめました。練習問題では、表から複合代入演算子を1つ選んで、[複合代入演算子]の欄に書き込んでください。

累算代入文を使うと、変数と値の間で計算を行い、結果を変数に代入することができます。主な累算代入演算子を表にまとめました。練習問題では、表から累算代入演算子を1つ選んで、[累算代入演算子]の欄に書き込んでください。なお累算代入演算子は、Pythonの文法ではデリミタ(区切り文字)に分類されています。

●p.46
表 複合代入演算子の例

表 累算代入演算子の例

●p.46  表  //=
除算(結果の小数点以下は切り捨て)

除算(結果以下で最大の整数を返す)

●p.46  練習問題
複合代入演算子を書き込んでください。

累算代入演算子を書き込んでください。

●p.48  Memo
複合代入演算子の一部

累算代入演算子の一部

●p.71
複合代入演算子の「+=」

累算代入演算子の「+=」

●p.71
書式 複合代入演算子を使ったリストの連結

書式 累算代入文を使ったリストの連結

●p.75
※見出し「要素の削除」の末尾(見出し「要素の個数を数える」の直前)に追加。

なお、指定した位置の要素を削除するには、del文またはpopメソッドを使います。

書式 指定した位置の要素を削除(del文)
del リスト[インデクス]

書式 指定した位置の要素を削除(popメソッド)
リスト.pop(インデクス)

●p.91
[文字列]や[リスト]の中に指定した部分文字列が含まれない場合や、リストの中に指定した値の要素が含まれない場合はTrue

[文字列]の中に指定した部分文字列が含まれない場合や、[リスト]の中に指定した値の要素が含まれない場合はTrue

●p.118  最下部
疑問 位置引数と…
できます。lunch関数で…

※次ページに移動

●p.133
代入させる変数と値の個数は一致させる必要があります。

代入に使う変数と値の個数は一致させるのが基本ですが、「*変数」のように書くことで、1個の変数に複数の値をまとめて代入する機能もあります。

●p.141
複合代入演算子の一種です。

累算代入演算子の一種です。

●p.156、練習問題
前問を参考に、

※削除

●p.157
[イテラブル]から値を取り出し、[条件]を評価します。[条件]がTrueの場合だけ、値を[変数]に代入し、[式]を評価した結果を出力します。

[イテラブル]から値を取り出し、[変数]に代入して、[条件]を評価します。[条件]がTrueの場合だけ、[式]を評価した結果を出力します。

●p.158
返り値を戻すつもりで

戻り値を返すつもりで

●p.166
・半角の英文字…
・クラス名の2文字目以降には…

・半角の英文字…
・クラス名の1文字目は英大文字にする
・クラス名の2文字目以降には…

●p.183
一部’abc’のような

一部’three’のような

●p.185  1行目
処理Aの実行中に例外が発生した場合、エラーメッセージを発信して処理Aの実行を中断します。

処理Aの実行中に例外が発生した場合、処理Aの実行を中止して、except節に進みます。

●p.209
演算子をオーバーライドするための

演算子をオーバーロードするための

●p.232 プログラム①と②の間の段落
繰り返し結合できます

繰り返し連結できます

●p.233 下の練習問題
変数oldから減算して

変数oldを減算して

●p.234 最下行
文字列はメモリ上に格納しますが、文字列が長くなると、より大きなメモリ領域が必要になります。その場合は、元のメモリ領域を拡大するか、元のメモリ領域よりも大きな別のメモリ領域を確保したうえで元のメモリ領域から引っ越しする(文字列をコピーする)か、いずれかの処理が必要になります。文字列の連結を何度も繰り返すと、この処理が何度も行われることになり、実行時間が長くなる原因になります。

文字列はイミュータブル(変更不可能)なので、文字列を連結する場合は、古い(連結前の)文字列とは別に、新しい(連結後の)文字列を作成します。新しい文字列のために、古い文字列よりも大きなメモリ領域を確保した上で、古い文字列の内容をコピーし、さらに連結する文字列を書き込む必要があります。文字列の連結を何度も繰り返すと、このような処理が何度も行われることになり、実行時間が長くなる原因になります。

●p.235
これは最終的な文字列に

これは最終的に文字列に

●p.235
メモリ領域の拡大や文字列のコピーといった処理が行われず

メモリ領域の確保や古い文字列のコピーといった処理が行われず

●p.274
アンインストールすることもできます。

アンインストールすることができます。

●p.274
再度インストールしてください。

再度インストールしてください。なお以下の「-y」は、アンインストールの確認に対して自動的に「はい」と答えるためのオプションです。

●p.274  書式  パッケージのアンインストール
pip uninstall [パッケージ名]

pip uninstall -y [パッケージ名]

●p.282 コマンドライン
※以下に差し替え

$ pip install “scikit-learn<0.21”
Collecting scikit-learn<0.21
Downloading scikit_learn-0.20.4-cp37-cp37m-win_amd64.whl (4.8 MB)
|????????????????????????????????| 4.8 MB 3.2 MB/s

Installing collected packages: scikit-learn
Successfully installed scikit-learn-0.20.4

 

●p.283 Memo
本書で使用しているバージョンは0.19.1ですが

本書で使用しているバージョンは0.20.4ですが

●p.283 Memo
0.20.0未満のバージョンを指定して

0.21未満のバージョンを指定して

●p.312 コマンドライン
※以下に差し替え

$ pip install “tensorflow<1.15”
Collecting tensorflow<1.15
Downloading tensorflow-1.14.0-cp37-cp37m-win_amd64.whl (68.3 MB)
|????????????????????????????????| 68.3 MB 6.8 MB/s

Installing collected packages: tensorflow
Successfully installed tensorflow-1.14.0

●p.312 上のMemo
本書で使用しているバージョンは1.4

本書で使用しているバージョンは1.14

●p.312 上のMemo
1.5未満のバージョンを指定して

1.15未満のバージョンを指定して

●p.312 下のMemo
※以下に差し替え

Pythonのバージョンによって、インストールできるTensorFlowのバージョンが異なります。本書では「Python 3.7とTensorFlow 1.14」および「Python 3.6とTensorFlow 1.5」の組み合わせについて、サンプルプログラムの動作を確認しました。Python 3.7では「pip install “tensorflow<1.15″」として、Python 3.6では「pip install “tensorflow<1.6″」として、それぞれTensorFlowをインストールしてください。

●p.314 Memo
バージョン1.4や1.5をインストールしてください。

Python 3.6にTensorFlow 1.5をインストールしてください。

※初版第5刷

●p.20 Memoを追加

Memo
Pythonは随時バージョンアップされています。基本的には最新版のPythonを使うことがおすすめですが、本書とは異なるバージョンのPythonを使用すると、バージョンの違いが原因でプログラムが動かないことがあります。この場合には、本書と同じバージョンのPythonをダウンロードしてお使いください。

●p.95 Memoを追加
Memo
andの代わりに、複数の比較演算子を組み合わせることもできます。例えば「tempが15以上かつ25未満」という条件式は、次のようにも書けます。

15 &lt;= temp &lt; 25

●p.109
(誤)
def 関数名(引数, …):
関数の処理1
関数の処理2
関数の処理3

return 戻り値

(正)
def 関数名(引数, …):
関数の処理1
関数の処理2
関数の処理3

return 戻り値

●p.109
(誤)
def 関数名(引数, …):
if 式:
関数の処理1
return 戻り値1
関数の処理2
return 戻り値2

(正)
def 関数名(引数, …):
if 式:
関数の処理1
return 戻り値1
関数の処理2
return 戻り値2

●p.111
(誤)
def 関数名(引数A, 引数B, …);
関数の処理
return 戻り値

(正)
def 関数名(引数A, 引数B, …):
関数の処理
return 戻り値

●p.122
(修正前)
引数として関数名を指定する代わりに、直接lambda式を記述することができます。

(修正後)
このmap関数は、リストの各要素に対して、指定した関数を適用します。map関数の引数には、関数名の代わりにlambda式を記述することもできます。

●p.122
(修正前)
このようにすることで、リストの各要素を引数としたlambda式の結果を得ることができます。

(修正後)
このように書くと、リストの各要素に対して、指定したlambda式を適用することができます。

●p.122
(修正前)
map関数の結果を取得するには、list関数と組み合わせます。

(修正後)
map関数の結果をリストとして取得するには、list関数と組み合わせます。

●p.130
(修正前)
要素数が比較的少なく、要素の個数が決まっているときには、

(修正後)
要素数が比較的少なく、かつ要素数が変化しないときには、

●p.130
(修正前)
後で学ぶように、タプルには要素を変数へ簡単に取り出す機能(アンパック)があるので、リストよりもプログラムを簡潔に書ける可能性があります。

(修正後)
後で学ぶように、タプルを作る簡潔な記法(パック)と、要素を変数へ取り出す簡単な方法(アンパック)を組み合わせると、さらに便利に使えます。

●p.132
(修正前)
この機能のことをアンパックまたはアンパッキングと呼びます。

(修正後)
この機能のことをアンパックまたはアンパッキングと呼びます。なお、この機能はリストや文字列などでも使えます。

●p.134
(修正前)
リストから要素を取り出すには、インデクスやfor文を使います。タプルから要素を取り出すには、インデクスやfor文に加えて、アンパックも使えます。

(修正後)
リストやタプルから要素を取り出すには、インデクスやfor文を使います。タプルに関しては、アンパックを使うのもおすすめです。タプルは要素数が変化しないので、取り出す要素数と代入先の変数の数を一致させやすく、アンパックを適用しやすいのです。

●p.135
(修正前)
2個のデータでまとめています。タプルにはアンパックの機能があるので、タプルを構成する色や品名のデータを簡単に取り出せることも利点です。

(修正後)
2個のデータにまとめています。アンパックを使えば、これらのデータを別々の変数へ取り出すことも簡単です。

●p.136 Memoを追加
Memo
すべての引数を左から順に、間隔(空白)をあけて表示します。

print(引数、 引数、 …)

●p.150 Memoを削除
Memo
次のようにprint関数に複数の引数を渡すと、すべての引数を左から順に、間隔(空白)をあけて表示します。

print(引数、 引数、 …)

●p.152
(誤)
&gt;&gt;&gt; def test(**x):
… print(x)

(正)
&gt;&gt;&gt; def test(**y):
… print(y)

●p.162
(修正前)
パックやアンパックを使って、要素の格納や取り出しができます。

(修正後)
パックによる要素の格納や、アンパックによる要素の取り出しを組み合わせると便利です。

●p.365
(誤)
CGIプログラムを使うと…作れるよ!

&lt;/p&gt;

(正)
CGIプログラムを使うと…作れるよ!
&lt;/p&gt;

※初版第3刷

●p.262, 練習問題, 解答例, インタプリタ
(誤)&gt;&gt;&gt; re.match(pattern, ‘Konsai123’)
(正)&gt;&gt;&gt; re.fullmatch(pattern, ‘Konsai123’)

(誤)&gt;&gt;&gt; re.match(pattern, ‘konsaisan’)
(正)&gt;&gt;&gt; re.fullmatch(pattern, ‘konsaisan’)

●p.288-289, テキストエディタ(lr_train.py)
(誤)”lr.model”
(正)’lr.model’

●p.294, テキストエディタ(lr_test.py)
(誤)”lr.model”
(正)’lr.model’

●p.296, テキストエディタ(lr_user.py)
(誤)”{0:4d}”
(正)'{0:4d}’

(誤)”lr.model”
(正)’lr.model’

(誤)predict = model.predict(test_data)
(正)predict = model.predict([t/255 for t in test_data])

●p.316-317, テキストエディタ(tf_user.py)
(誤)”{0:4d}”
(正)'{0:4d}’

(誤)y_label = session.run(yl, feed_dict={x: test_data})
(正)y_label = session.run(yl, feed_dict={x: [t/255 for t in test_data]})

●p.336, テキストエディタ(dl_user.py)
(誤)”{0:4d}”
(正)'{0:4d}’

(誤)y_label = session.run(yl, feed_dict={x: test_data, keep_prob: 1.0})
(正)y_label = session.run(yl,
feed_dict={x: [t/255 for t in test_data], keep_prob: 1.0})

●p.349, テキストエディタ(sp_sin.py)
(誤)”input”
(正)’input’

(誤)”time(second)”
(正)’time(second)’

(誤)”amplitude”
(正)’amplitude’

●p.351, テキストエディタ(sp_fft.py)
(誤)”input”
(正)’input’

(誤)”time(second)”
(正)’time(second)’

(誤)”amplitude”
(正)’amplitude’

(誤)”fft”
(正)’fft’

(誤)”frequency(Hz)”
(正)’frequency(Hz)’

(誤)”intensity”
(正)’intensity’

●p.353, テキストエディタ(sp_audio.py)
(誤)”audio.wav”
(正)’audio.wav’

(誤)”input”
(正)’input’

(誤)”time(second)”
(正)’time(second)’

(誤)”amplitude”
(正)’amplitude’

(誤)”fft”
(正)’fft’

(誤)”frequency(Hz)”
(正)’frequency(Hz)’

(誤)”intensity”
(正)’intensity’

(誤)y = datapyplot.figure(‘input’)
(正)y = data
pyplot.figure(‘input’)

●p.365, テキストエディタ(test.py)
(誤)print(‘Content-type: text/html; charset=UTF-8nn’)
(正)print(‘Content-type: text/html; charset=UTF-8’)

●p.366, (3)メッセージヘッダの出力, 2段落目
(削除)最後の「nn」は、改行2個を表します。次の(4)で出力するメッセージボディとの間には、空行を1行入れるという規則があるので、改行2個を出力することによって空行を作っています。

●p.366, (4)メッセージボディの出力
(追加)メッセージヘッダとメッセージボディの間には、空行を1行入れるという規則があります。このプログラムでは、三重クォート文字列内の改行が文字列に含められることを利用して、「print(”’」の直後で改行することにより、空行を作っています。

●p.368, テキストエディタ(chat.py)
(誤)print(‘Content-type: text/html; charset=UTF-8nn’)
(正)print(‘Content-type: text/html; charset=UTF-8’)

※初版第1刷
●『わかるPython』目次での誤りについて

・5.2 変数のスコープ
global文
(誤) 124
(正) 125

・12.2 数字を認識するディープニューラルネットワーク
(誤) ユーザが指定した任意の手書き数字を認識するプログラム
(正) 指定した手書き数字を認識するプログラム

・13.2 SciPyによる科学技術計算
(誤) 周波数を求める
(正) 音の周波数を求める

●p.121 本文(下から3行目)
誤:続けて戻りを指定します。
正:続けて戻り値を指定します。

●p.141 本文(上から1行目)
誤:|=は+=や=などと同様に
正:|=は+=や-=などと同様に

●p.168 本文(上から2行目)
誤:データ属性の地を描き込むことです。
正:データ属性の値を描き込むことです。

●p.178 Memo
誤:既定クラスのメソッドの呼び出しは、
正:基底クラスのメソッドの呼び出しは、

●p.250 練習問題(コマンドライン)
誤:&gt; python file2.py file2.py
正:$ python file2.py file2.py

●p.294 プログラム名
誤:lr_train.py
正:lr_test.py

●p.296 プログラム名
誤:lr_train.py
正:lr_user.py

●p.337 コマンドライン
誤:$ pythondl_user.py2.png
正:$ python dl_user.py2.png