mocchaso note

サーバーエンジニアが何か色々呟いているところ。

Python100本ノック 31本目~35本目

Python100本ノック、31本目から35本目についてです。

qiita.com

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本目:例外のキャッチ


問題無く解けました。
ジェネレータやデコレータよりも取っつきやすかったです。

~学んだこと~

  • tryexceptfinally(finallyは無くても動く)を使うことで例外的なエラーを検出することができる。

  • except節は、except (Exceptionの種類) (as Exceptionの変数名?)のように書く。




集合やジェネレータ、デコレータなど、初めて触る部分が多く苦戦しました。
唯一例外処理は、C/C++Javaの授業でtry-catchをやったおかげでスムーズに解くことができました。
(26本目~30本目と31本目~35本目の投稿順が逆だったのを直したせいで、2つの記事の更新間隔が短い笑)