定番はいかがでしょう? fizzbuzzになります。
さあ、プログラミングの始まりだー!
今回のテーマはド定番のfizzbuzzです。
何やら入社試験に使ったとか風の噂に聞いたこともあるので運がよければ使えるかも!?
ではまずfizzbuzzとは何か?
数を数えるゲームで1,2,fizz,4,buzzというように数を数えながら3で割りきれる数の時は「fizz」5で割り切れるときは「buzz」と言い、両方で割り切れるときは「fizzbuzz」と言うゲームです。
これをプログラムにやらせようって訳です。
大丈夫です、基礎的なことしかやりません。
今回もわずか9行で組めてしまうのでまとめて載せますが、まずは一行ずつ紹介しましょう。
for i in range(1,100):
今回は1から100まで数えることにしましょう。
察しのいい方は予想できそうですがrange(x,y)の中のxが始点でyが終点です、1を3にすればfizzから始まりますし100を1000にすれば1000まで数え上げます。
range(x,y)はxからyまでを1刻みで返す関数です(微妙に違うそうですが簡単のために)ここではiに1から100まで入れながら以降のインデントがforより浅くなるまでループします。
と、書きましたがここくらいしか躓くところがないんですよね、後は前回のifを入れ子(括弧の中に括弧を入れること、Pythonの場合はインデントされた行でさらに深いインデントを入れること)さえできれば完成します。
とはいえそれではあまりにもあんまりなのでちょっと新要素を入れます。
forの後の行でインデントが一つ深くなります。
そうそうPythonではインデントはスペース4つがいいそうです、作者が本で書いてました。まあ今回はIDEのPyCharmが自動で入れてくれるんですけどね。
if (i % 5) == 0 and (i % 3) == 0:
ifについては前回解説しましたね、分からないのは%とandと==でしょうか。
まずは%は左を右で割ったあまりを表します、ここで変数に代入してもいいのですがその場限りなので代入はせず条件判断に直接使ってます。
で、==についてですが、これは左と右が等しい場合真を返します、真(True)は要するに条件が成り立つと言うことで成り立てば次の行が実行されます。
そしてandはこれも察しのいい方は分かるでしょうが、andでつながれた条件がどちらも真であればという意味です。
つまりここではiが5でも3でも割り切れることを表します。
いやそこはi % 15ならand要らなくない? 実際その通りなのですが、24で割り切れ1223でも割り切れるとき……暗算できますか?
andでつなげば3と5を書き換えるだけなので楽ですね。なのでここではこのやり方にします。
あとはelifで5で割り切れるときと3で割り切れるときを付け足すだけです。前回のifまんまなので全文載せます。
for i in range(1,100):
if (i % 5) == 0 and (i % 3) == 0:
print("fizzbuzz")
elif(i % 5) == 0:
print("buzz")
elif(i % 3) == 0:
print("fizz")
else:
print(i)
特に難しいところはもう無いでしょう。あえて言うなら最後のprint(i)はrange()が生成した数をそのまま出力しています。
C系をやった方ならこんな雑でいいの!? と驚くかもしれませんがこれはPythonです、慣れてください。
最後のelse:については未解説でしたね。上記の全条件に当てはまらないときにしたのブロックが実行されます。
クラスは? クロージャは? ラムダ式は? という不満が聞こえてきそうですが、そういうのは必要になってから覚えればいいんです、大抵の言語の基礎はループと条件分岐につきます。
さすがに実行結果を貼ると100行になるのでやってみたい方はPyCharmで実行してみてください。
ここまでで基礎はできるようになりました。
プログラミングも意外と簡単でしょう?




