プログラム言語として人気急上昇のPython。
書き方も簡単ということでちょっとかじってみました。
今回、何をしたのかというとタイトルにもある通りFizzBuzzをやってみました。
いままでJavaScriptやPHPでやりましたが、今回はPythonでFizzBuzzに挑戦したいと思います。
今回試したPythonはPython3.7.2で実験をしました。もしかしたら2系だと正しく動かないかもしれないので注意が必要です。
FizzBuzzとは?
1から100までの数字を表示させます。ただし、3の倍数の時はFizz、5の倍数の時はBuzzと数字の代わりに表示させます。そして3と5の倍数の時はFizzBuzzと表示させます。
完成型
1
2
Fizz
4
Buzz
(中略)
14
FizzBuzz
16
(中略)
98
Fizz
Buzz
完成するまでの手順
いきなりプログラムを書けるほどの能力はないので、まずは手順を考えていきたいと思います。
1.表示させる命令が必要
表示させないと意味がないので、まずは表示させられるようにします
print(i)
今回は表示させるためにprintを使っていきます。
2.1から100までを表示させる
print(1)
print(2)
print(3)
...
上のようにしてprintで100まで書いていくのは現実的ではないですよね。と言うことで今回はwhileを使って100まで繰り返し処理をさせていくことにします
i = 1
while i <= 100:
print(i)
i = i + 1
これで1から100まで自動的に表示させてくれるようになりました。
豆知識
先のコードに入っている『i = i + 1』ですが、ちょっとだけ短く書けます。
i += 1
上記の書き方でも『i = i + 1』と同じ意味なのでまずはわかりやすい方で書いてみると良いと思います。
3.『Fizz』を入れてみる
数字で100まで表示されるようになったので、今度は3の倍数をFizzに置き換えたいと思います。ここではif文を使っていきたいと思います。if文を文章で書くと次のような感じになります。
『もし、3の倍数ならFizzと、それ以外なら数字を表示させなさい。』
この文章を元にif文を作るとこんな感じになります
if i % 3 == 0:
print('Fizz')
else:
print(i)
Buzzも同じ考えで作れるのでコードだけ紹介
if i % 5 == 0:
print('Buzz')
else:
print(i)
4.複数の条件で表示内容を変えてみる
3の倍数と5の倍数の時は上のコードでFizzやBuzzが出るようになりました。しかし、3と5の倍数でFizzBuzzと表示させるためのコードがまだ用意できていません。こちらもif文で作れるので用意していきたいと思います。
『3の倍数でなおかつ5の倍数の場合FizzBuzzと表示する。それ以外の場合は数字を表示する』
上の文章を元にコードにしていくと次のようなコードになります
if i % 3 == 0 and i % 5 == 0:
print('FizzBuzz')
else:
print(i)
if文の中でandを使うことで複数の条件で表示結果を分岐させることができます。
5.結果を複数に分岐させていく
ここまでで3の倍数のとき、5の倍数のとき、3と5の倍数のとき、それぞれでFizz、Buzz、FizzBuzzと文字を表示させられるようになりました。あとはこれをひとつにまとめていきたいと思います。ここでもif文を使うんですが、複数に分岐する場合は『else』の代わりに『elif』を使います。phpでいうところの『else if』です。
『3と5の倍数のときはFizzBuzzと表示する。3の倍数のときはFizzと表示する。5の倍数のときはBuzzと表示する。それ以外のときは数字を表示する』
上の文章を元にif文を作っていきます。ここでのポイントは一番条件が厳しいFizzBuzzを一番最初にしていることです。3の倍数や5の倍数のときの条件をはじめにしてしまうと、その条件を満たしてしまうと次の処理に移ってしまうので思うように機能してくれません。
if i % 3 == 0 and i % 5 == 0:
print('FizzBuzz')
elif i % 3 == 0:
print('Fizz')
elif i % 5 == 0:
print('Buzz')
else:
print(i)
6.FizzBuzzを完成させる
複数の条件分岐が完成したので、あとは最初に作ったwhile文の1から100まで表示させるものとコードを合わせるとFizzBuzzの完成です。
i = 1
while i <= 100:
if i % 3 == 0 and i % 5 == 0:
print('FizzBuzz')
elif i % 3 == 0:
print('Fizz')
elif i % 5 == 0:
print('Buzz')
else:
print(i)
i += 1
これでFizzBuzzは完成しているんですが、もう少しだけスマートな書き方に変えていきたいと思います。
For文を使ってFizzBuzzを作る
上のFizzBuzzでは1から100まで繰り返すのにwhile文を使いました。この部分をfor文に変えていこうと思います。
for i in range(1, 101):
if i % 3 == 0 and i % 5 == 0:
print('FizzBuzz')
elif i % 3 == 0:
print('Fizz')
elif i % 5 == 0:
print('Buzz')
else:
print(i)
while文と違うところとしてrange関数を使ったところでしょうか。こんな書き方でもFizzBuzzができます。