Python100本ノック 31本目~35本目
Python100本ノック、31本目から35本目についてです。
31本目:集合内包表記を使って、range(10)の奇数の集合を作れ
問題無く解けました。
集合の初期化にset
を使ったところ、条件式を「2で割った余りが1の時」にしたところが
記事内の解法と少々異なっていました。
32本目:range(10)の数値に対しては、"Got"と数値を返すジェネレータ関数を作れ。
まず、ジェネレータについて調べるところから始めました。
ジェネレータ:
ジェネレータ内包表記:リスト内包表記の[]
が無い版
分からなかったので、記事内の解法を読んで理解しました。
~気付いたこと~
... in ("Got %s" ...)
がジェネレータ内包表記。()が無いとエラーが起こる。for thing in ...
に("Got %s" ...)
を指定する。
指定したものがジェネレータ関数。ジェネレータ関数に対して
for文
を回すと、thing
に順番に値が格納される。
関数を定義する場合のyield
に該当する。
33本目:range(10)から奇数を返すジェネレータ関数を定義し、for文を使って、返された3番目の値を見つけて表示せよ。
32本目をやったおかげか、33本目は少しスムーズに解くことができました。
ただ、ジェネレータ関数を定義する問題でしたが、内包表記を使ってしまいました。
結果としては同じものが得られますが、問題の趣旨と少々異なりますね・・・。
~気付いたこと~
enumerate()
の中にジェネレータ関数を指定する場合は、ジェネレータ関数に()を付けなくてもOK。付いていても実行できる。
34本目:デコレータの定義
ジェネレータに続いてデコレータも分からなかったので、調査からスタート。
デコレータ:
ジェネレータよりも難しく感じるので、記事内の解法を見て理解したいと思います・・・。
35本目:例外のキャッチ
問題無く解けました。
ジェネレータやデコレータよりも取っつきやすかったです。
~学んだこと~
try
、except
、finally
(finally
は無くても動く)を使うことで例外的なエラーを検出することができる。except
節は、except (Exceptionの種類) (as Exceptionの変数名?)
のように書く。
集合やジェネレータ、デコレータなど、初めて触る部分が多く苦戦しました。
唯一例外処理は、C/C++やJavaの授業でtry-catch
をやったおかげでスムーズに解くことができました。
(26本目~30本目と31本目~35本目の投稿順が逆だったのを直したせいで、2つの記事の更新間隔が短い笑)