見出し画像

退屈なことをPythonにやってもらうための演習の回答[10.8.1]

こんばんは白地です。

毎度、『退屈なことはPythonにやらせよう』についている演習プロジェクトの自分なりの回答を投げていきます。

10章はデバッグという重要な章なのでドキドキしてしまいましたが、これ実践しないと全然身に付かなそうですね。

演習プロジェクトについては、コードを入力してちょっと動かしたら修正ポイントがわかった(と思われる)のですが、logging仕込んで表示されるようにしました。

#! python3
# 10.8.1 コイン投げゲームをデバッグする

import random,logging

logging.basicConfig(level=logging.DEBUG,
    format=' %(asctime)s - %(levelname)s - %(message)s')
logging.debug('プログラム開始')

guess = ''
toss = ''

def input_guess():

    inputed = ''

    while inputed not in ('表', '裏'):
        print('コインの表裏を当ててください。表か裏を入力してください:')
        inputed = input()

    return inputed

def draw_lot():
    coin_state = ''
    n = random.randint(0,1)

    if n == 0:
        coin_state = '表'
    else:
        coin_state = '裏'

    return coin_state

guess = input_guess()

logging.debug('guess : {}'.format(guess))

toss = draw_lot()

logging.debug('toss : {}'.format(toss))

# guessはstr、tossはint
if toss == guess:
    print('当たり!')
else:
    print('はずれ!もう一回当てて!')
    #表裏でなくとも通れる
    guess = input_guess()
    #再抽選していない(2回目が絶対当たる)
    toss = draw_lot()

    logging.debug('guess : {}'.format(guess))
    logging.debug('toss : {}'.format(toss))
    if toss == guess:
        print('当たり!')
    else:
        print('はずれ。このゲームは苦手ですね')

logging.debug('プログラム終了')

修正点としてはコメントした3点だと思います。ちゃんと書くと、こんな感じです。
・guessとtossの型が違うので絶対にFalseになること
・1回目外れだと、2回目の入力は「表」か「裏」でなくても再入力を求められない
・2回目はtossしていないので、絶対に当てられる

一番最後は仕様の可能性もありますが、「このゲームは苦手ですね」という煽りが入っているので、バグだと判断しました。

いざnoteに書いてから思い返したら、assertを使ってないですね… 今度使ってみないとですね。

次はスクレイピングですね。この章を境にどんどん実践的になっていく気がします。業務効率化やっていきましょう。

ではでは。


この記事が気に入ったらサポートをしてみませんか?