はじめましてQitta。
ここ数年Pythonの勉強を何度も何度も"Hello, World"から繰り返して挫折してきたのですがようやく腹も座り本格的に勉強することになりました。超初心者です。
勉強効率を上げるためにQittaで発信することにしました。
と言うことで有名なFizzBuzz問題をやってみる
Qiitaの記述テストも兼ねて初心者らしくメジャーで簡単なものをまず記しましょう。
FizzBuzz問題は、1から順番に数えていって3の倍数だったらアホ「Fizz」、5の倍数になったら「Buzz」、3と5の倍数だったら「FizzBuzz」と数字の代わりに書き換える問題です。
なるほど、ループとif文を使えば何とか出来そうですね。
if文はまずは3と5の倍数、つまり15の倍数の条件付けを先に行って、後で3と5の倍数の場合を条件付けすれば良さそう。
たぶんこんな感じ。
# 典型的なFizzBuzz
for i in range(1, 100, 1):
if i % 15 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 ==0:
print("Buzz")
else:
print(i)
やったね、1から100までのFizzBuzzができたよ。
ついでに3の倍数と3が入っていたらアホになる方も作る
……と軽い気持ちで始めたのですが、結構難問ですねこれ。
上記のFizzBuzzは無量大数まで適用可能ですが、ナベアツ師匠のこれは考えれば考えるほど深みに嵌ってしまっています。
3の倍数の方は上記の方法で簡単にできるのだけど、3が入っている方の条件付けってどうやるんでしょう??
とりあえず1の位で3が出てくる場合の条件付けは、10で割った余りが3
10の位で3が出てくるものは、100で割った余りを10で割ったものの商が3以上4未満
100の位で3が出てくるものは、1000で割った余りを100で割ったものの商が3以上4未満
と繰り返していけばできます。
こんな感じ。
# 3の倍数と3が出てきたときにアホになる
for i in range(1, 1000, 1):
if i % 3 == 0:
print("アホ")
elif i % 10 ==3:
print("アホ!")
elif 3 <= (i % 100) / 10 < 4:
print("アホ!!")
elif 3 <= (i % 1000) / 100 < 4:
print("アホ!!!")
else:
print(i)
しかしこのような条件付けだと無量大数までやるのは無理ですよね?
……何か良い方法があるのでしょうか? できそうでできない。
これは宿題としておきます。