mocchaso note

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

Python100本ノック 16本目~20本目

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

qiita.com

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本、頑張るぞ・・・!