Python100本ノック 16本目~20本目
Python100本ノック、16本目から20本目についてです。
16本目:標準のライブラリを使ってsin60度を求める
問題無く解けました。
標準搭載のライブラリmath
を使います。
知らなければ調べるのは、やっぱり大事ですね。
17本目:16進数ダンプ(逆バージョンも)
「知らなければ調べるのは、やっぱり大事ですね。」
とか言ってたら早速知らないものが出てきたので調べました。
binascii
というライブラリを使うことで実現できます。
16進数ダンプ
メモリやファイルの内容などを16進数の形で
目に見えるように書き出す(表示する)こと。b"文字列"
バイナリ形式として文字列を表現する記法。hexlify
文字列を16進数にダンプする(書き出す)メソッド。unhexlify
ダンプされた16進数を元の文字列に復元するメソッド。
18本目:パスワードを自動生成する
問題:英字(大文字と小文字)と数字を組み合わせた8文字のパスワードを自動で生成せよ。
英字のリストを手作業でわざわざ作ってしまいました。非効率ですね。
文字列関連のライブラリstring
を使えば良かったんですね。
ascii_letters
英字(大文字と小文字)の文字列定数。"ab...yzAB...YZ"digits
数字の文字列定数。"012...89"
19本目:ランダムな数字のリストを生成せよ
問題:表示する数字の個数、数字の範囲を指定し、その中でランダムな数字を生成。
問題無くできました。
random.randint(a, b)
を使うところがポイントかなと思います。
random.randrange(start, stop[, step])
でもOKですね。
20本目:簡単ポーカー
問題
5枚のカードが配られます。
それぞれのカードには、1以上13以下のいずれかの整数が書かれています。
カードに書かれている整数の組み合わせによって役が決まります。
配られた5枚のカードが、以下のいずれの役に該当するかを調べてください。
複数の役に該当する場合は、以下で先に記述した方の役に該当するものとします。条件
- FULL HOUSE:ある数をちょうど3つと、別の数をちょうど2つ含む。
- FOUR CARD:ある数をちょうど4つ含む。
- THREE CARD:ある数をちょうど3つ含む。
- TWO PAIR:ある数をちょうど2つと、別の数をちょうど2つ含む。
- ONE PAIR:ある数をちょうど2つ含む。
記事内の解法は、該当する役をリストで記録し、そのリストから最良の役を判定結果とするもので、辞書を使って役と数字を紐づけていました。
for文の二重ループを使う点は、記事内の解法と同じでした。
しかし、if文で、別の数をいくつ含むかを考慮していなかったため、
FULL HOUSEなのにTHREE CARDと判定されることがありました。
やっと20本目まで来ました。
ただ動くレベルのものはスラスラ書けている印象です。
ここまで解いてきて、自分の知っていることを組み合わせることで
効率の良いコードが書くことができるのかなと思いました。
効率良く書こうと心掛けていても、今までうまくできなかったので、
そのことに気付けたのは大きな収穫だと思います。
残り80本、頑張るぞ・・・!