ジェネレータの練習。FizzBuzz判定はFizzBuzz問題 - Engineer as a Lifestyle @tenkomaでの自分的なお気に入りをパクらせてもらいました。
def fizzbuzz_gen(max): for i in range(1, max + 1): yield "Fizz" * (i % 3 == 0) + "Buzz" * (i % 5 == 0) or i for n in fizzbuzz_gen(100): print n
せっかくのジェネレータなんだから、こう書いたほうが意味があっていいかも、と思いました。
In [3]: g = fizzbuzz_gen(100) In [4]: g.next() Out[4]: 1 In [5]: g.next() Out[5]: 2 In [6]: g.next() Out[6]: 'Fizz' In [7]: g.next() Out[7]: 4 In [8]: g.next() Out[8]: 'Buzz' In [9]: g.next() Out[9]: 'Fizz' In [10]: g.next() Out[10]: 7 In [11]: g.next() Out[11]: 8 In [12]: g.next() Out[12]: 'Fizz'
追記ここまで。
あと、社内の偉い人がzsh版を書いてくれました。
paste <(repeat 34 (echo;echo;echo Fizz)) <(repeat 20 (echo;echo;echo;echo;echo Buzz)) | pr -tn | head -100
repeatで繰り返した結果をpasteでガッチャンコして、prで行番号をくっつけてます。
場合分けもしてないのが面白い。