初学者向けの力試しとしてFizzBuzz問題を解く。という課題があるようで、挑戦してみることにしました。
制限時間等は特になく、ライブラリや構文等の検索もありとしています。
FizzBuzz問題とは
1から100までの数字の中で、
3で割り切れる数の場合は「Fizz」を、
5で割り切れる場合は「Buzz」を、15で割り切れる場合は「FizzBuzz」を、
どれでも割りきれない数字はそのまま表示する。
というプログラムを作成します。
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
n = range(1,101,1) for i in n: if i % 15 == 0: print(i) print('FizzBuzz\n') elif i % 3 == 0: print(i) print('Fizz\n') elif i % 5 == 0: print(i) print('Buzz\n') elif i % 3 != 0 and i % 5 != 0 and i % 15 != 0: #else: ここは単にelse:だけでも良かった print(i) print('\n') |
実際に書いたコードがこちらです。
振り返り
取り組んでみての振り返りです。
- for文などの基本的な構文ですら調べる必要があった。
- FizzBuzzの部分をif文の最後に書いたらFizzやBuzzが優先されてしまった。
- どれでも割り切れない数字をelse以外で表示させてみた。
- 改行を入れると実行結果が見やすくなった。
if文の中で15の剰余が0であるか調べる部分を最後に書き、3の剰余を調べる部分を最初に書いていました。
すると、15で割り切れる数が全て3で割り切れるためFizzと表示されてしまう結果になりました。
if文の中でも上から順に実行されており、初めに条件に当てはまった部分が実行されることにここで気づきました。
構文の中での優先順位というか、仕様をしっかり把握しておかないと、何となくで書いたら思ってもみない動きにつながりそうだと感じています。
あとは、3,5,15のどれでも割り切れない数字はそのままprintで表示するルールのようで、それを知らずに解答を先に見てしまいました。
解答では3,5,15のどれでも割り切れない数字はif文の最後にelseで条件分岐させ、単にprintで表示させていたのですが、こちらの方法を先に見てしまったので、別の方法としてelseを使わない方法と言うことで書いたのが上記のコードです。
でもelseの方がシンプルで見やすくて良いですね。
ただ、解き方に制約を付けて別の解法がないかを調べてみるのも勉強になりそうですね。
あとは、実行結果も改行させてあげると単純に見やすかったです。
最後に、forのような基本的な構文ですら書き方を調べなければならず、調べながら解いたことで時間がかかってしまいました。
まだまだpythonを実務で使うには経験も慣れも不足していると思います。思い通りの仕様を実装するための知識と合わせて、pythonに日頃から触れておく必要があるなと感じました。
コメント