プログラミングの練習!FizzBuzz遊びについて考えてみた。

プログラミング勉強中!

以下のエントリで述べたとおり、プログラミングの勉強中です。

 

www.galleon.blue

 

今日は、以下の参考書に載っていた、FizzBuzz遊びが面白そうなので、考えてみます。

独習Python入門―1日でプログラミングに強くなる!

 

FizzBuzz遊びとは?

上に上げた参考書によると、FizzBuzz遊びとは、英語圏でのちょっとした遊びで、以下のルールでやるものです。山手線ゲームとかせんだみつおゲームとか、あの類の遊びですね。

  • 1から順番に数を数える。
  • 3の倍数の時は「Fizz」と言い
  • 5の倍数の時は「Buzz」と言う
  • 3と5の両方の倍数の時は「FizzBuzz」と言う(15の倍数のとき)
  • それ以外はカウントアップした数字を言う

 今回の課題は、数字を入力されたときに、Fizzと言うべきかBuzzと言うべきか、判断するプログラムをつくる、というものです。

このプログラム作成は、実は広く知られている問題だそうで、「頭の体操やプログラミングの勉強としてよく使われる定番問題」なんだそうです。

 

ダメな処理の例

この処理を実行するための案を考える上で、まず、罠になりそうだなと考えたところがあります。

それは、ルール通りに単純に if と elseif の処理を並べていくと、「3の倍数だから「Fizz!」」と判定し、そこで処理が終了してしまうというものです。フローチャートにすると下図のような感じ。15が入力された場合の処理の流れを赤矢印で書いてます。

f:id:galleon_blue:20160828193540j:image
これだと、正しい処理にならないですね。15だったらFizzBuzzと返したいものです。

 

問題ない処理の例

そこで、15の倍数の判定を、最初に持ってくることにしました。以下のようなフローチャートになります。

f:id:galleon_blue:20160828194040j:image

これなら問題なく15を判定してくれそうです。

ただ、なんとなくこれだと冗長な気がします。3の倍数と5の倍数の判定をしている上に、更に15の倍数を判定する処理をわざわざ入れています。3と5の公倍数を判定したいのですから、わざわざ15の倍数を判定する必要は無いような気がするのですが、うまくロジックを組めませんでした。

 

 実装結果

というわけで、以下のコードを作成してみました。

Pythonらしく、スッキリ書けています。

i=15
if i % 15 == 0:
   print(“fizzbuzz”)
elif i % 3 == 0:
   print (“fizz”,end=””)
elif i % 5 == 0:
   print (“buzz”,end=””),
else:
   print (str(i))

実行結果も以下のとおり問題なし。

fizzbuzz

 

ちなみに、「elif」というのがpythonにおける「else if」のことです。

それより上のifに引っかからなかったら、elifの後ろにある判定も行います。

 

 

  • Pocket
  • LINEで送る
  • このエントリーをはてなブックマークに追加

コメントを残す




CAPTCHA


Menu

HOME

TOP