今さらPython (19) - 第3章復習課題

第3章の復習課題に突入です。前回のように問題文は書かずに、シンプルに行こうと思います。

入門 Python 3

入門 Python 3

3.1
>>> years_list = [1974, 1975, 1976, 1977, 1978, 1979]

自動で作るならこう?

>>> birth_list2 = []
>>> birth_year = 1974
>>> for var in range(0,6):
...     birth_list2.append(var + birth_year)
...
>>> birth_list2
[1974, 1975, 1976, 1977, 1978, 1979]
3.2
>>> years_list
[1974, 1975, 1976, 1977, 1978, 1979]
>>> years_list[3]
1977
>>>

最初の要素がゼロなので、気にせず3と入れれば4番目のエントリが出てきて、それが3歳になる年になりますよと。

3.3
>>> years_list[-1]
1979

これで5歳の時と言えば良いのかな?

3.4
>>> things = ['mozzarella', 'cinderella', 'salmonella']

そのまま作ればいいよね。

3.5
>>> [x.capitalize() for x in things]
['Mozzarella', 'Cinderella', 'Salmonella']

こういう事かと思ったけど、listがミュータブルだって示すという意味に思えてきたので、

>>> things2 = things.copy()
>>> things2
['mozzarella', 'cinderella', 'salmonella']
>>> things2[0] = things2[0].capitalize()
>>> things2[1] = things2[1].capitalize()
>>> things2[2] = things2[2].capitalize()
>>> things2
['Mozzarella', 'Cinderella', 'Salmonella']
>>> 

この方が良いのかな?はい、値は書き換えられます。

3.6

備忘も含めて間違えたところも含めて書こう。

>>> things2 = []
>>> for elem in things:
...     if elem & {'mozzarella'}:
...         elem.capitalize()
...     things2.append(elem)
... 
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
TypeError: unsupported operand type(s) for &: 'str' and 'set'

さっきやりかけの集合演算子を使おうと思ったら怒られた。タプルじゃないとダメなのね。

>>> for elem in things:
...     if 'mozzarella' in elem:
...         elem.capitalize()
...     things2.append(elem)
... 
'Mozzarella'
>>> things2
['mozzarella', 'cinderella', 'salmonella']
>||

これはポカ。先頭大文字にしたのを変数に戻し忘れてる。ということで、

>|python|
>>> things2 = []
>>> for elem in things:
...     if 'mozzarella' in elem:
...         elem = elem.capitalize()
...     things2.append(elem)
... 
>>> things2
['Mozzarella', 'cinderella', 'salmonella']
>>> 

これでOKだね。

3.7

似たようなセットが2つあるので2通り試してみる。

>>> things.pop()
'salmonella'
>>> things
['mozzarella', 'cinderella']

設問が病気に関する要素と言っているので、本当はグルグル回して条件に合ったものを削除した方が良いのかな?

>>> for elem in things2:
...     if elem in 'salmonella':
...         things2.remove(elem)
... 
>>> things2
['Mozzarella', 'cinderella']
>>> 

ループ中の対象からデータを足したり引いたりするのが、ちょっと気持ち悪い。ま、消す方なら良いのかな。

3.8

もうマルクス兄弟が頭から離れない。(日本語でググると全く別なモノが出る場合があるので注意w)

>>> surprise = ['Groucho', 'Chico', 'Harpo' ]
>>> surprise
['Groucho', 'Chico', 'Harpo']
3.9

最後の要素を小文字にし、逆順にしてから、大文字に戻すとな。一発でやると小文字にして大文字に戻すと違いが見えないので、step by stepで行けという意味だね。

>>> surprise[-1] = surprise[-1].lower()
>>> surprise
['Groucho', 'Chico', 'harpo']

harpoが小文字に戻った。

>>> surprise = surprise[::-1]
>>> surprise
['harpo', 'Chico', 'Groucho']

これで順番を入れ替えられるけど、reverse()を使っても行けるはず。

>>> surprise.reverse()
>>> surprise
['Groucho', 'Chico', 'harpo']
>>> surprise.reverse()
>>> surprise
['harpo', 'Chico', 'Groucho']
>>> 

2回やってるのは、設問の状態に戻すためね。

>>> surprise = [x.capitalize() for x in surprise]
>>> surprise
['Harpo', 'Chico', 'Groucho']

capitalize()するのはharpoだけでいいんだけど、こういうのはそろえた方が良いと思ったので、一応全部にかけてみた。

3.10

ここからはdictを使う設問だね。

>>> e2f = {'dog': 'chien', 'cat': 'chat', 'walrus': 'morse'}
>>> e2f
{'cat': 'chat', 'dog': 'chien', 'walrus': 'morse'}

最後の単語が英語っぽくないのは気のせい?一応調べたらセイウチらしい。
Walrus - Wikipedia, the free encyclopedia

3.11

やっぱりセイウチ推しなのね。

>>> e2f['walrus']
'morse'
3.12

English to French から French to Englishを作れと。

>>> f2e = {}
>>> for en, fr in e2f.items():
...     f2e[fr] = en
... 
>>> f2e
{'morse': 'walrus', 'chat': 'cat', 'chien': 'dog'}
3.13

これはさっきのと同じだよね。

>>> f2e['chien']
'dog'
3.14

辞書からセットを作るときはキーだけが拾われるから、こうやれば良いはず。

>>> ewords = set(e2f)
>>> ewords
{'cat', 'dog', 'walrus'}

ま、変数に入れなくても良いのか。

3.15

多重レベルの辞書を作る。。。子ども、いや孫から作れば良いのかな。

>>> cats = ['Henri', 'Grumpy', 'Lucy']
>>> animals = {'cats':cats, 'octopi':{}, 'emus':{}}

catsだけリストを持たせて、他が空辞書という統一感のなさが、ちと気持ち悪い。あとの設問でいじるのかな?

>>> life = {'animals':animals, 'plants':{}, 'other':{}}
>>> life
{'plants': {}, 'animals': {'octopi': {}, 'emus': {}, 'cats': ['Henri', 'Grumpy', 'Lucy']}, 'other': {}}
>>> 

最上位のlifeまで作って完了

3.16
>>> set(life)
{'plants', 'animals', 'other'}
3.17
>>> set(life['animals'])
{'octopi', 'emus', 'cats'}

設問に答えが書いてある気がしてならないんだけど。

3.18
>>> set(life['animals']['cats'])
{'Grumpy', 'Henri', 'Lucy'}
>>> 

おっと、ここはキーじゃなくて値なのか。危うく間違えるところだった。

>>> life['animals']['cats']
['Henri', 'Grumpy', 'Lucy']

てか、これこそ設問に答えが書いてあるw

これで第3章は完全に終了。次から第4章。

(つづく)