1. 15 は FizzBuzz
  2. 9 は Fizz
  3. 10 は Buzz
  4. 7 はどれでもないので文字列の 7
  5. 境界値 0 は 3 でも 5 でも割り切れるので FizzBuzz
  6. 1 はどれでもないので文字列の 1
  7. 30 は FizzBuzz
コース一覧
Python入門:基礎文法編
定番:FizzBuzz判定

Python入門:基礎文法編

変数、条件分岐、ループ、関数、リスト・辞書、ファイル操作など Python の基礎文法を、ブラウザ上で毎レッスン実際にコードを書き、自分だけの「おこづかい帳アプリ」を育てながら学べる無料コースです。プログラミング完全未経験から始められ、環境構築や事前知識は一切不要です。約 18 時間 (1 日 30 分 × 37 日) で 74 レッスンを修了でき、修了後は入力・集計・ファイル保存まで備えたスクリプトを1から書けるようになります。

1
はじめての Python
01. printで表示15分
02. 文字列の連結15分
03. 四則演算15分
04. 実行順序15分
05. コメント15分
06. エラーを読んでみる15分
07. つくる:レシート表示15分
08. 第1章クイズ10分
2
変数とデータ型
01. 変数15分
02. typeで型を調べる15分
03. 数値への変換15分
04. 文字列への変換15分
05. boolとNone15分
06. f-string15分
07. 入力を受け取る15分
08. つくる:入力できるおこづかい帳15分
09. 第2章クイズ10分
3
演算子と式
01. 比較演算子15分
02. 論理演算子15分
03. in演算子15分
04. 剰余と切り捨て除算15分
05. 連鎖比較と優先順位15分
06. 三項演算子15分
07. つくる:予算チェック15分
08. 第3章クイズ10分
4
条件分岐
01. if文の基本15分
02. if / elif / else15分
03. 条件の組み合わせ15分
04. match文15分
05. 定番:FizzBuzz判定15分
06. デフォルト値とor15分
07. つくる:カテゴリ自動判定15分
08. 第4章クイズ10分
5
ループ
01. forで合計15分
02. whileで繰り返す15分
03. rangeとstep15分
04. breakとcontinue15分
05. enumerateで番号付け15分
06. zipで組み合わせ15分
07. 入れ子ループ15分
08. つくる:何件でも記録15分
09. 第5章クイズ10分
6
関数
01. 関数を定義する15分
02. 引数と戻り値15分
03. デフォルト引数15分
04. キーワード引数15分
05. 複数の戻り値15分
06. divmod15分
07. 変数のスコープ15分
08. lambda関数15分
09. つくる:関数に分割15分
10. 第6章クイズ10分
7
リストと辞書
01. リストの追加と削除15分
02. スライス15分
03. 辞書の基本15分
04. 辞書を走査15分
05. keyでソート15分
06. setで重複除去15分
07. リスト内包表記15分
08. タプルアンパック15分
09. つくる:カテゴリ別集計15分
10. 第7章クイズ10分
8
ファイルとエラー処理
01. ファイルを読み込む15分
02. ファイルに書き込む15分
03. withで安全に扱う15分
04. CSV形式で保存15分
05. try-exceptで備える15分
06. 例外の種類15分
07. つくる:保存機能15分
08. 第8章クイズ10分
9
総合制作
01. 全機能を統合しよう15分
02. 月間レポート機能15分
03. 自由拡張15分
04. 完成と次のステップ10分

定番:FizzBuzz判定

判定はきびしい条件から順に

順番を間違えると、片方の答えが一度も出ない

FizzBuzz はプログラミングの練習問題として世界中で使われている定番のお題です。ルールは下記のとおりです。

  • 3 でも 5 でも割り切れる数は "FizzBuzz"
  • 3 で割り切れる数は "Fizz"
  • 5 で割り切れる数は "Buzz"
  • どれでもない数は、その数を文字列にしたもの

繰り返しの道具はまだ持っていないので、今回は 1 つの数だけを判定します。1 件分の処理を関数にしておけば、あとから何件でもそのまま回せます。

このお題がドリルとして優秀なのは、書く順番を間違えると必ず壊れる からです。同じことが起きる形を、スタンプカードで見てみます。

Python

def stamp(n): if n % 5 == 0: return "5回目" elif n % 10 == 0: return "10回目" return ""

10 を渡しても "10回目" にはなりません。10 % 5 が 0 なので、最初の枝で "5回目" に決まってしまいます。20 も 30 も同じで、2 番目の枝には永遠にたどり着きません。

含まれる側を先に書く

10 の倍数は、必ず 5 の倍数でもあります。つまり 10 の条件は 5 の条件に丸ごと含まれています。含まれる側 (狭い側) を先に書かないと、広い側に飲み込まれます。

Python

def stamp(n): if n % 10 == 0: return "10回目" elif n % 5 == 0: return "5回目" return ""

これで 10 は "10回目"、5 は "5回目" になります。FizzBuzz でも起きるのはまったく同じことです。3 でも 5 でも割り切れるという条件は、3 だけの条件にも 5 だけの条件にも含まれているので、いちばん厳しい枝から先に並べます。

解説

elif を並べるときは「厳しい条件から、だんだん緩く」と唱えながら書きます。条件分岐のバグの大半はこの順番で起きます。

戻り値の型をそろえる

割り切れるかどうかは剰余の % で調べます。n % 3 が 0 なら 3 で割り切れます。3 でも 5 でも、は and でつなぎます。

数だけを返す枝を数値のままにすると、7 と "7" という別の値が混ざります。この関数は文字列を返すものなので、最後の枝も str で文字列にそろえます。

Python

print(str(7)) print(7 == "7")

7 と False が出ます。見た目が同じでも、型が違えば別の値です。あわせて、if n % 3: のように == 0 を書き落とすと「余りが 0 でない」という逆の意味になる点にも気をつけてください。

やってみよう

関数 fizzbuzz_one(n) を実装してください。整数 n を受け取り、上のルールに従った文字列を返します。

どの枝を先に書くかが肝です。書けたら 15 9 10 7 の 4 つを渡して、4 種類の答えがすべて出ることを確かめてみてください。0 を渡すとどうなるかも考えてみると、面白い発見があります。

要件

  1. 関数名は fizzbuzz_one で、引数は n の 1 つ
  2. 3 でも 5 でも割り切れるときは "FizzBuzz" を return する
  3. 3 だけで割り切れるときは "Fizz"、5 だけで割り切れるときは "Buzz" を return する
  4. どれにも当てはまらないときは str(n) で文字列にして return する
  5. 3 でも 5 でも割り切れる条件を、他のどの条件よりも先に書く

入出力例

fizzbuzz_one(15) → "FizzBuzz" fizzbuzz_one(9) → "Fizz" fizzbuzz_one(10) → "Buzz" fizzbuzz_one(7) → "7" fizzbuzz_one(0) → "FizzBuzz" fizzbuzz_one(1) → "1" fizzbuzz_one(30) → "FizzBuzz"

ヒント

割り切れるかどうかは n % 3 == 0 のように剰余が 0 かで判定します

3 でも 5 でも、は n % 3 == 0 and n % 5 == 0 です

"Fizz" を先に書くと 15 が "Fizz" になってしまいます。順番が肝です

最後の枝は return n ではなく return str(n) です。戻り値は必ず文字列にそろえます

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/05·更新 2026/08/26

関連レッスン

  • デフォルト値とor

    未入力のカテゴリを既定値で埋めながら、空っぽの値が False 扱いになる性質と or の働きを学ぶ

  • つくる:カテゴリ自動判定

    第4章の総仕上げ。品名に含まれるキーワードからカテゴリを推測する guess_category を作る

  • 第4章クイズ

    if / elif / else の評価順、match、条件の組み合わせ、or による既定値を5問で確認する

  • forで合計

    for で金額リストを1件ずつ取り出し、合計を返す total_price を作る

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 処理計算や代入を表す長方形
  • 関数処理に名前を付けて再利用できる単位
  • 戻り値呼び出し元への返答を表す点線矢印
  • 引数位置引数=順番で渡す。
main.py
学習モード
エディタを読み込んでいます

メモ

定番:FizzBuzz判定

⌘S で保存