timedelta.daysから算出する
その算出方法に合わせると、以下のような感じになります。
python
1from datetime import date
2
3
4def calculate_age(year, month, day):
5 """年齢を返す"""
6 today = date.today()
7 birth = date(year, month, day)
8 date_delta = today - birth
9
10 age = 0
11 total_days = date_delta.days
12 for year in range(birth.year, today.year):
13 # 400で割り切れるか、4では割り切れるが100で割り切れないなら閏年
14 if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
15 day = 366
16 else:
17 day = 365
18
19 if total_days >= day:
20 age += 1
21 total_days -= day
22
23 return age
24
年齢計算自体をスマートにした方法
いくつか方法はありますが、よくある簡単な考え方として
- 今年(2018)から誕生年(1990)を引く(ここで28)
- 今年の誕生日を迎えていなければ、-1する(迎えていなければ27に)
と考えるとシンプルです。
python
1from datetime import date
2
3
4def calculate_age(year, month, day):
5 """年齢を返す"""
6 born = date(year, month, day) # あなたの誕生日
7 today = date.today() # 今日
8
9 age = today.year - born.year
10
11 # 今年の誕生日を迎えていなければ、ageを1つ減らす
12 # 今日を表すタプル(7, 29) < 誕生日を表すタプル(7, 30)
13 if (today.month, today.day) < (born.month, born.day):
14 age -= 1
15 return age
Pythonでは、タプル同士の比較ができます。
タプルの最初の要素同士を比較したあと、次の要素同士を比べます。
(7, 29) < (2, 27) はFalse
(7, 29) < (7, 30) はTrue
(7, 29) < (8, 1) はTrue
のようになります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/30 21:50