0
1

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 1 year has passed since last update.

Python: 剰余演算子を使わないで無限のジェネレータでFizzBuzzしてみた

Last updated at Posted at 2023-02-10

剰余演算子を使わずにFizzBuzzを解く の題名を見て「そうだよな剰余演算子って別になくてもできるよな」って妙に納得してしまったので、自分だったらどうやるかな?と思って考えてみました。

「3の倍数かどうか」 と考えれば剰余演算子の出番ですが、「みっつめごとに"Fizz"になる」と考えれば別のやりかたがありそうです。

def print_fizzbuzz(n):
    for _, fizzbuzz in zip(range(0, n)
                           , fizzbuzz_gen()
                           ):
        print(fizzbuzz)
        
def fizzbuzz_gen():
    for fizz, buzz in zip(mod_gen(3, "Fizz")
                          , mod_gen(5, "Buzz")
                          ):
        yield (
            fizz if type(buzz) == int else
            buzz if type(fizz) == int else
            fizz + buzz
            )
        
def mod_gen(m, name):
    n = 1
    while True :
        for i in range(n, n+m-1):
            yield i 
        yield name
        n = n + m
        
print_fizzbuzz(100)

無限にFizzするジェネレータと無限にBuzzするジェネレータを組み合わせて無限にFizzBuzzするジェネレータを作り、それの最初から n 個を出力しています。

みっつめごとに"Fizz"って叫ぶ芸人と五つ目ごとに"Buzz"って叫ぶ芸人がコンビを組んでFizzBuzz芸をする、ってコンセプトです。

0
1
0

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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?