Python初心者のズンドコキヨシ

  • 8
    いいね
  • 4
    コメント
この記事は最終更新日から1年以上が経過しています。

最近Pythonを味見していたところ、ズンドコキヨシなる丁度いい課題があったので作ってみました。
Pythonらしいのはジェネレーターを使ったところくらいでしょうか。

zundoko.py

import random

def zundoko_gen():
    while True:
        yield random.choice(('ズン', 'ドコ', 'ハッ'))

class ZunDokoChecker:
    def __init__(self):
        self.zun_count = 0

    def check(self, word):
        if word == 'ドコ':
            result = self.zun_count >= 4
            self.zun_count = 0
        else:
            self.zun_count = self.zun_count + 1 if word == 'ズン' else 0
            result = False
        return result

checker = ZunDokoChecker()

for word in zundoko_gen():
    print(word)
    if checker.check(word):
        print('キ・ヨ・シ!')
        break

shiracamusさんからお題をいただいたので早速作ってみました。

zundoko2.py
import random

def zundoko_gen():
    zun_count = 0
    word_list = ('ズン', 'ドコ', 'ハッ')

    while True:
        word = random.choice(word_list)
        yield word

        if word == 'ズン':
            zun_count += 1
        else:
            if word == 'ドコ' and  zun_count >= 4:
                return
            zun_count = 0



for word in zundoko_gen():
    print(word);

print('キ・ヨ・シ!')

工夫してみたのは、ズンドコの完成を検出した際に次の値返却でジェネレートの終了を通知しなければならないのですが最初はフラグでやりました。

yieldを使うので取り合えず値を返却して、それから終了判定とすることでフラグもなくスッキリできました。

word_listを最内ループから外に出したのは趣味です。
組込み屋なのでBUILD_LIST命令で毎回リストインスタンスを生成するのが気になりました。