なんとなくpythonでFizzBuzzしてみた

自分はあまりプログラミングの知識はない。
しかしインフラエンジニアとは言え、シェルスクリプトくらい書けよと言われるのだ。
しかも最近の流行りなのか、pythonとかやれば?とも言われる。

そういえばpythonと言えば、昔OpenFlowが流行ったときに
一度やろうとして放置したままだったなぁと思い出した。
そんなこんなで、FizzBuzzくらいならちゃちゃっとできるかなということで
なんとなく書いてみたので、その時のメモ。


FizzBuzzとは?


FizzBuzzとは海外の遊びであり、詳細はウィキペディアから拾ってきた。

プレイヤーは円状に座る。最初のプレイヤーは「1」と数字を発言する。次のプレイヤーは直前のプレイヤーの次の数字を発言していく。ただし、3で割り切れる場合は「Fizz」(Bizz Buzzの場合は「Bizz」)、5で割り切れる場合は「Buzz」、両者で割り切れる場合(すなわち15で割り切れる場合)は「Fizz Buzz」(Bizz Buzzの場合は「Bizz Buzz」)を数の代わりに発言しなければならない。発言を間違えた者や、ためらった者は脱落となる。

※引用元:Fizz Buzz

とまぁこれが元になっており、これをプログラムで表示してみようというもの。
プログラミング初心者用の練習問題のようなものだ。
どのような練習をしていいか分からない自分のような初心者にはもってこいの課題といえる。

このFizzBuzzをやるにあたって、下記のようなプログラムを組むことにする。

 ①1~100までの数字を順次画面に表示していく
②3で割り切れる場合は数字の代わりに「Fizz」と表示
③5で割り切れる場合は数字の代わりに「Buzz」と表示
④3でも5でも割り切れる場合は数字の代わりに「FizzBuzz」と表示


④の3でも5でも割り切れるというのは、即ち15で割り切れるということなので、
プログラム上「15で割って余り0」としているものをよく見かけるが、
「15で割る」というのは「3×5=15」という人間の計算が入っているので
今回は「15」は使わずにコードを書いてみたい。


その1:とりあえず書いてみた


なにはともあれ、とりあえず自分のプログラミング知識を振り絞って書いてみた。
書き方が変とか、それじゃ効率が悪いとかあるかもしれないが、
本職じゃないし少しくらい変でも結果が合っていれば良いよね・・・(逃)
ちなみに、今回はUbuntuにpython入れて書いている。

 #!/usr/bin/env python
# -*- coding: utf-8 -*-

result = ""

for i in range(1, 101):

if i % 3 == 0 and i % 5 == 0:
result = "FizzBuzz"
elif i % 3 == 0:
result = "Fizz"
elif i % 5 == 0:
result = "Buzz"
else:
result = i

print(result)


こんな感じになった。
「15」を使わない代わりに「3で割り切れ、且つ、5でも割り切れる」とした。
後は画面に表示する文字はすべて「result」という変数に入れてprintしている。

一応、表示結果。

 1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz


できてるのかな・・・?一行一行確かめたわけではないがまぁ大丈夫だろう。


その2:文字列の連結によってFizzBuzzを作成する


こちらの方が個人的にはプログラミングっぽくて好きかなと思う。
先程は「3でも5でも割り切れる場合」は「FizzBuzz」を変数に代入したが、
今回は「3で割り切れる場合」は「Fizz」を変数に代入し、
「5でも割り切れる場合」は「Buzz」を「Fizz」に連結する形で変数に代入させてみる。

 #!/usr/bin/env python
# -*- coding: utf-8 -*-

for i in range(1, 101):
result = ""

if i % 3 == 0:
result += "Fizz"

if i % 5 == 0:
result += "Buzz"

if not result:
result = i

print(result)


「if not」は条件を満たさないときに使用するのだが、
今回の書き方だと「resultという変数が空の場合」という意味になる。

一応、表示結果。

 1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz


大丈夫そうかな・・・?まぁいいか。


たまにちょっとしたプログラムを組むと意外と面白い。

昔は「変数ってなんだ!?」って思ってプログラミングの本買って読んでみて
「データを入れる箱のようなもの」と説明されていて、
まったく理解できなかった記憶がある。

理解できなくても、やっていくうちに、変数って「そういうものだ」
という概念が頭の中にできあがってくるから不思議。

説明してと言われるとやっぱり「データを入れる箱のようなもの」と
例にならって伝えてしまうかもしれないな。
これ昔から使われている変数の説明だけどまったくピンとこないなぁと思う。
もっと分かりやすく説明してある本などはないものだろうか・・・。


以上。



独学プログラマー Python言語の基本から仕事のやり方まで


人気記事