7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-17

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

7
9
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?