見出し画像

独学プログラマーのFizzBuzzプログラムを改変。。。(再帰版追加!)

ゴールデンウィークにしようと思ってたPythonのリハビリがてら、書籍「独学プログラマー Python言語の基本から仕事のやり方まで」の 第22章アルゴリズム の FizzBuzzプログラムを自分なりに書き直してみた。。。

忘れかけてたうろ覚えの Python で書き直したけど、、、どうにか動いたよ😏


オリジナル

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)


改変

for i in range(1, 101):
   f = b = v = ''
   if not(i % 3):
       f = 'Fizz'
   if not(i % 5):
       b = 'Buzz'
   if not(f or b):
       v = str(i)
   print('{}{}{}'.format( f, b, v))


[追記1]

モヤさま見ながら、こうしたらスピードアップするじゃん、、、って思いついた 改変2

for i in range(1, 101):
   f = b = v = ''
   if not(i % 3):
       f = 'Fizz'
   if not(i % 5):
       b = 'Buzz'
   elif not f:
       v = str(i)
   print('{}{}{}'.format( f, b, v))


[追記2]

更にスピードアップ、、、

3の倍数の方が、5の倍数より多いから、こうすれば elif 文内の判定実行回数が減るよね・・・

for i in range(1, 101):
   f = b = v = ''
   if not(i % 5):
       b = 'Buzz'
   if not(i % 3):
       f = 'Fizz'
   elif not b:
       v = str(i)
   print('{}{}{}'.format( f, b, v))


[追記3]

めざまし8を見ながら、ループの頭で変数を初期化しないパターンも作ってみた。。。

このアルゴリズムでの完成形かな?

for i in range(1, 101):
   if i % 5:
       b = ''
   else:
       b = 'Buzz'
   if i % 3:
       f = ''
       if b:
           n = ''
       else:
           n = str(i)
   else:
       f = 'Fizz'
       n = ''
   print('{}{}{}'.format( f, b, n))


[追記4]

独学プログラマーをちょっと読み進めたら再帰処理(再帰法)が出てきたので再帰処理版も作ってみた。

元々、再帰処理大好き人間なので3分で書き換えて一発で動作したよ。。。

# 再帰処理版

def fb(i):
   if i > 100:
       return

   if i % 5:
       b = ''
   else:
       b = 'Buzz'
   if i % 3:
       f = ''
       if b:
           n = ''
       else:
           n = str(i)
   else:
       f = 'Fizz'
       n = ''
   print('{}{}{}'.format( f, b, n))

   fb(i + 1)

fb(1)


実行結果

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


#Chromebook#Python #Python3 #プログラミング を勉強中 !
#独学プログラマー
#FizzBuzzプログラム
#再帰処理
#再帰法