【Python入門】西暦を入力すると干支(十二支)を表示するプログラム|%演算子の使い方も解説

Pytyon

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. このコードは課題提出にそのまま使えますか?

はい。

  • 変数名
  • 入力文
  • % 演算子
  • リスト使用

すべて課題条件を満たしているため、
そのまま提出可能です。

コメント

タイトルとURLをコピーしました