最近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命令で毎回リストインスタンスを生成するのが気になりました。