Pythonの基礎学習でよく出題される課題のひとつが、
**「西暦を入力して、その年の干支(十二支)を表示するプログラム」**です。
この記事では、
- 課題の要件整理
- Pythonコード(完成版)
%(剰余)演算子の考え方- 初心者がつまずきやすいポイント
をまとめて解説します。
課題内容(要件整理)
今回のPython課題は、以下の条件を満たす必要があります。
- 西暦を
input()で入力する - 入力メッセージは
「西暦を入力してください:」 - 変数名は
yearを使用 - 十二支は リストで管理する
%(剰余)演算子を使って干支を判定- 最後は
print()で結果を表示する
十二支とは?
干支(十二支)は以下の12種類です。
| 番号 | 干支 |
|---|---|
| 0 | 子 |
| 1 | 丑 |
| 2 | 寅 |
| 3 | 卯 |
| 4 | 辰 |
| 5 | 巳 |
| 6 | 午 |
| 7 | 未 |
| 8 | 申 |
| 9 | 酉 |
| 10 | 戌 |
| 11 | 亥 |
Pythonではリストのインデックスが0から始まるため、この並びが重要になります。
完成したPythonプログラム
以下が、課題条件をすべて満たした完成コードです。
# 十二支のリスト
eto = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
# 西暦を入力
year = int(input('西暦を入力してください:'))
# 十二支を計算
index = year % 12
# 結果を表示
print(eto[index])
プログラムの仕組みを解説
① 十二支をリストで管理する
eto = ['子', '丑', '寅', '卯', '辰', '巳', '午', '未', '申', '酉', '戌', '亥']
リストを使うことで、
番号(インデックス)=干支
という対応が簡単にできます。
② input()で西暦を受け取る
year = int(input('西暦を入力してください:'))
input() は文字列として受け取るため、int() を使って数値に変換しています。
③ %(剰余)演算子で干支を判定
index = year % 12
- 西暦を12で割った余りを使う
- 余りが 0〜11 のどれかになる
- その数字が十二支リストの番号になる
④ 結果を表示
print(eto[index])
計算した番号を使って、
対応する干支を表示します。
実行例
西暦を入力してください:2024
辰
初心者がよく間違えるポイント
❌ リストの順番を間違える
- 「子」を0番目にしないとズレる
❌ int()を忘れる
year % 12がエラーになる
❌ %演算子を使っていない
- 条件分岐(if文)で書くと減点される場合あり
まとめ
% 12を使えば干支判定は一瞬- 十二支は リスト管理が最適
- Pythonの基礎(input / リスト / 剰余)が一度に学べる良問
学校課題・レポート提出・Python練習用として、そのまま使える内容です。
よくある質問(FAQ)
Q1. なぜ「12」で割るのですか?
干支(十二支)は 12年で1周 する仕組みだからです。
西暦を12で割った余りを使うことで、その年がどの干支に当たるかを判定できます。
Q2. なぜ %(剰余)演算子を使う必要があるのですか?
この課題では
「余りを使って判定する」ことが目的になっているためです。
index = year % 12
と書くことで、
- 条件分岐(if文)を使わず
- シンプルに十二支を求められる
というPythonらしい書き方になります。
Q3. なぜ十二支のリストは「子」から始まるのですか?
Pythonのリストは 0番目から数える 仕様です。
eto = ['子', '丑', '寅', '卯', ...]
とすることで、
- 余り
0 → 子 - 余り
1 → 丑 - 余り
2 → 寅
と、自然に対応させることができます。
Q4. int() を付けないとどうなりますか?
input() は 文字列(str) として値を受け取ります。
year = input('西暦を入力してください:')
このまま % を使うとエラーになります。
必ず int() で数値に変換しましょう。
Q5. if文を使って書いてもいいですか?
動作としては可能ですが、
課題では減点されることが多い です。
この問題は
- リスト
%演算子
を使うことが狙いのため、
if文を大量に使う書き方は避けたほうが安全です。
Q6. どの西暦まで対応できますか?
Pythonの int 型が扱える範囲であれば、
基本的に制限はありません。
例:
- 1900年 → OK
- 2024年 → OK
- 3000年 → OK
Q7. マイナスの西暦(紀元前)でも使えますか?
理論上は計算できますが、
歴史的な干支の扱いとは一致しない ためおすすめしません。
このプログラムは
西暦(紀元後)専用 と考えてください。
Q8. 閏年(leap year)は関係ありますか?
いいえ、干支の判定には関係ありません。
閏年は2月の日数の問題であり、干支とは別物です。
Q9. 出力を「◯年の干支は◯です」にしたい場合は?
print() を少し変更するだけで対応できます。
print(f'{year}年の干支は{eto[index]}です')
Q10. このコードは課題提出にそのまま使えますか?
はい。
- 変数名
- 入力文
%演算子- リスト使用
すべて課題条件を満たしているため、
そのまま提出可能です。


コメント