Javaの講義、試験が「自作関数を作り記述しなさい」って問題だったから
— てくも (@kumiromilk) 2016年3月9日
「ズン」「ドコ」のいずれかをランダムで出力し続けて「ズン」「ズン」「ズン」「ズン」「ドコ」の配列が出たら「キ・ヨ・シ!」って出力した後終了って関数作ったら満点で単位貰ってた
ふと、あまり使い道の分からなかったサブジェネレータへの委譲構文が使えるのではないか、と思った。
サブジェネレータへの委譲構文ってなに?って方は、公式ドキュメントか、手前味噌ですがこの記事をご覧ください。
(2016/3/22 ちょっと間違ってたので修正)
import random
def zundoko(n=0):
if n == 5:
yield 'キ・ヨ・シ!'
raise StopIteration
x = random.random() < 0.5
if x:
if n < 4:
yield 'ズン'
else:
yield 'ドコ'
yield from zundoko(n+1)
else:
if n < 4:
yield 'ドコ'
yield from zundoko()
else:
yield 'ズン'
yield from zundoko(4)
print(''.join(zundoko()))