今さらPython3 (38) - 第5章復習課題

第5章の復習課題に突入。さっき、気がついたんだけど、巻末に復習課題の解答が載っていたのね。知らずに答え合わせせずにきちゃった。。。

入門 Python 3

入門 Python 3

※自分の場合、作業場所によってWindowsマシンを使っている場合とMacを使っている場合があるので、Path名などを表示するときに、両者の表記が混じっている事がある。この復習課題はMac OSX Yosemite環境にPython 3.4.3をインストールした環境で行っている。

5.1

まずzoo.pyを作る。

def hours():
    print('Open 9-5 daily')

これを/Users/ken/PycharmProjects/IntroducingPython3の配下に置く。インポートするためにPathを通さないと行けないので確認する。

>>> for element in sys.path:
...     print(element)
... 

/Users/ken/PycharmProjects/IntroducingPython3
/Library/Frameworks/Python.framework/Versions/3.4/lib/python34.zip
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages
>>> 

あらかじめ~/.bash_profileに以下のエントリを足しておいたので、すでに入っているね。

# Temporary setting for Introducing Python3
PYTHONPATH="/Users/ken/PycharmProjects/IntroducingPython3:${PYTHONPATH}"
export PYTHONPATH

ファイルを汚したくないなら、これで追加しておけばよし。

>>> sys.path.append('/Users/ken/PycharmProjects/IntroducingPython3')

さて本題。zoo.pyをインポートしてhours()を実行すればよし。

>>> import zoo
>>> zoo.hours()
Open 9-5 daily
>>> 
>>> from zoo import hours as hr
>>> hr()
Open 9-5 daily
>>> 

一応両方のパターンを試しておいた。

5.2

なんかもう同じ事やっちゃった気がするけど。

>>> from zoo import hours as menagerie
>>> menagerie()
Open 9-5 daily
>>> 

わざわざ長い名前を付け直すのもいかがなものかとw

※後から追記
5.3の設問見て、ここではmenagerieと名付ける対象を間違えたことに気づく。

>>> import zoo as mengerie
>>> mengerie.hours()
Open 9-5 daily
>>> 

こうやれってことか。menagerieの意味が分からなくて寝付けない人はこれをw

Menagerie - Wikipedia, the free encyclopedia

5.3

あれ?これもやっちゃったような。てか、設問を読み違えててたのね。

>>> from zoo import hours
>>> hours()
Open 9-5 daily
>>> 

こうやれば良いんでしょ?

5.4
>>> from zoo import hours as info
>>> info()
Open 9-5 daily

この章で一番大切だったのはimport文の使い方だったんですね(棒)

5.5

辞書作れば良いのね。

>>> plain = {'a':1, 'b':2, 'c':3}
>>> plain
{'b': 2, 'c': 3, 'a': 1}
>>> 

分かってらっしゃる。後ろの設問を気にしてわざと変な順序で出てきてくれたんだね。

5.6

前振りでバレバレだったけど、OrderedDict()の登場ですね。

>>> plain = {'a':1, 'b':2, 'c':3}
>>> plain
{'b': 2, 'c': 3, 'a': 1}
>>> 
>>> from collections import OrderedDict as od
>>> fancy = od(plain)
>>> fancy
OrderedDict([('b', 2), ('c', 3), ('a', 1)])
>>> 

OrderedDictのスペルをいつも間違えるので、odと名付けて実行しましたよ。

5.7

>>> from collections import defaultdict as dd
>>> dict_of_lists = dd(list)
>>> dict_of_lists['a'].append('something for a')
>>> dict_of_lists['a']
['something for a']

回答としてはここまで。以下おまけ。

>>> dict_of_lists
defaultdict(<class 'list'>, {'a': ['something for a']})
>>> dict_of_lists['b']
[]
>>> dict_of_lists
defaultdict(<class 'list'>, {'b': [], 'a': ['something for a']})
>>> 

defaultdict(list)で定義しているので、存在しないキーのbを渡すと値としては、空のリスト[]が渡されると理解。

(つづく)