サラリーマンエンジニアブログ

大企業で働くなんちゃってITエンジニアのブログです。

python 誕生日計算プログラム with Python

生年月日から、年齢と〇〇歳代を計算して出力するプログラムです。

誕生日計算プログラム with python
仕事の案件で生年月日から誕生日を計算し、x0歳代に変形するプログラムを書いた時に使用したプログラムを少し改良して作りました。

誕生日計算するアルゴリズムは下記のようになります。

  1. 今年から誕生年を引く
  2. 今年の誕生日を迎えていなければ、-1


例えば、 today = 2018/12/30, birthday = 2017/12/31 とすると、

  1. 2018(今年) - 2017(誕生年) = 1
  2. 今日は12/30で誕生日は12/31なので今年の誕生日はまだむかえていないので 1 - 1 = 0

と言うことで0歳になりますね。

さらに、 today = 2018/12/31, birthday = 2017/12/30 とすると、

  1. 2018(今年) - 2017(誕生年) = 1
  2. 今日は12/31で誕生日は12/30なので今年の誕生日は昨日でむかえているので 1 - 0 = 1

と言うことで1 歳になりますね。


っていう感じことです。

前提条件

  • python3.6以上がインストールされていること (フォーマットつき文字列リテラルを使用しているので)

Python コード

  • calculate_age.py
import sys
import re
import datetime as dt

def calculate_age(day_of_birth: str):
    # 区切り文字削除
    day_of_birth = re.sub(r'[^0-9]+', "", day_of_birth)

    # 8桁未満の入力は'入力エラーを出力'
    if len(day_of_birth) < 8:
        return "入力エラー"
    
    class birthday:
    	year = int(day_of_birth[:4])
    	month_day = int(day_of_birth[4:8])

    class today:
    	today = dt.date.today().strftime("%Y%m%d")
    	year = int(today[:4])
    	month_day = int(today[4:8])

    # 1. 今年から誕生年を引く
    age = today.year - birthday.year

    # 2. 今年の誕生日を迎えていなければ、-1
    if (today.month_day - birthday.month_day) < 0:
    	age = age - 1
    
    # 〇〇代出力
    if  int(age) < 10: # 10歳以上
    	generation = '10代未満'
    elif int(age) > 100: #100歳以上
        generation = '100歳以上'
    else: #0 < age < 100
        generation = f'{str(age)[:1]}0代'

    return age, generation

実行結果

>>> from calculate_age import calculate_age
>>> age = calculate_age('1992!06!03')
>>> print(age)
(26, '20代')