🔙
🔝

アホとイヌ

これが理解できたら100点満点です👍
※ Fizz Buzz問題の事前知識があるとちょっと楽
Wikipedia: Fizz Buzz むずかしくないよ

Chatpter.1 - Fizz Buzzとは

Fizz Buzzとは

  • 3 の倍数の時には Fizz5 の倍数の時には Buzz35 の倍数の時には Fizz Buzz と画面に出力する」

  • その筋では有名な「Fizzフィズ Buzzバズ問題もんだい」というアルゴリズムです。

    ※ 3 の倍数とは、3でかけ算(3をかけ算)した数のことです。
     かけ算の九九の 3の段 です。
    ※ 3 と 5 の倍数は、「15の倍数」と同じです。

  • Fizz Buzz問題の一般的なプログラムを見てみてください。

  • その前に Fizz Buzz Fizz Buzz だと読みにくいので、
    それぞれ アホ イヌ アホイヌ と言葉を変えますね。🐱

    for i in range(1, 101):
        if i % 3 == 0 and i % 5 == 0:
            print('アホイヌ')
        elif i % 3 == 0:
            print('アホ')
        elif i % 5 == 0:
            print('イヌ')
        else:
            print(i)
    
    1  2  アホ 3 の倍数
    4  イヌ 5 の倍数
    アホ 3 の倍数
    7  8  アホ 3 の倍数
    イヌ 5 の倍数
    11  アホ 3 の倍数
    13  14  アホイヌ 3 と 5 の倍数(15の倍数)ではこうなる
    16 

    (以下 100まで続く...)

Chatpter.2 - Fizz Buzz問題の問題

Fizz Buzz問題の問題

  • これがなぜ問題と言われるのか。この問題にはワナがひそんでいるからです。

  • 問題文の順番どおり文を書いていくと、こうなります。

    for i in range(1, 101):
        if i % 3 == 0:      # 3 の倍数の時には
            print('アホ')
        elif i % 5 == 0:    # 5 の倍数の時には
            print('イヌ')
        elif i % 3 == 0 and i % 5 == 0: # 3 と 5 の倍数の時には
            print('アホイヌ')
        else:               # それ以外の時には
            print(i)          # そのままその数を画面に出力する
    

    (略)

    11  アホ  13  14  アホ← ここがおかしくなる。アホイヌどこ行った!! 16 

    (略)

  • i % 3 とは「 i3 で割った余り」の計算式です。

  • i % 3 == 0 で、「i3 で割った余りが 0 の時」。

  • 割り切れるということは「3の倍数」ということになります。i % 5 も同じです。

    • 3で割り切れるものたち

      15 ÷ 3 = 5 余り 0

      15 % 3 = 0 5

    •     ↑ ↓

    • 3の倍数たち

      3 × 5 + 0 = 15

      5 × 3 + 0 = 15


  • プログラムは上から順番に動いていきます。

  • 15 は本来 3 と 5 の倍数なので elif i % 3 == 0 and i % 5 == 0:
    True になって アホイヌ と出力されるべきなのですが、
    3の倍数でもあるので、先に if i % 3 == 0:True
    なってしまったから正しく動かなかったのです。

  • 運のいいイヌめ。

  • この他にも文には様々なワナがひそんでいます。

  • プログラミングは、こういったワナを回避しつつプログラムを正しく動くように組み上げていくというゲーム性があります。

  • ゲームなのでいくらでもやり直しがききますから、何度でも挑戦して楽しみましょう!

  • ところで、だいぶプログラムが読めるようになってきていることに気付きましたか?🤭

  • これで「最初にしるべき4つのこと」は完全にクリアしました。😄