web-dev-qa-db-ja.com

pythonで年齢を計算する

私は、年齢を判断するために、ユーザーに生年月日と今日の日付を要求するコードを作成しようとしています。私がこれまでに書いたことは:

print("Your date of birth (mm dd yyyy)")
Date_of_birth = input("--->")

print("Today's date: (mm dd yyyy)")
Todays_date = input("--->")


from datetime import date
def calculate_age(born):
    today = date.today()
    return today.year - born.year - ((today.month, today.day) < (born.month, born.day))

age = calculate_age(Date_of_birth)

しかし、私が期待するように実行されていません。誰かが私に間違っていることを説明してもらえますか?

5
A. Gunter

近い!

文字列を計算する前に、文字列をdatetimeオブジェクトに変換する必要があります- datetime.datetime.strptime() を参照してください。

日付を入力するには、次を行う必要があります。

datetime.strptime(input_text, "%d %m %Y")
#!/usr/bin/env python3

from datetime import datetime, date

print("Your date of birth (dd mm yyyy)")
date_of_birth = datetime.strptime(input("--->"), "%d %m %Y")

def calculate_age(born):
    today = date.today()
    return today.year - born.year - ((today.month, today.day) < (born.month, born.day))

age = calculate_age(date_of_birth)

print(age)

PS:賢明な入力順序を使用することをお勧めします-dd mm yyyyまたはISO標準yyyy mm dd

9
Attie

これは動作するはずです:)

from datetime import date

def ask_for_date(name):
    data = raw_input('Enter ' + name + ' (yyyy mm dd): ').split(' ')
    try:
        return date(int(data[0]), int(data[1]), int(data[2]))
    except Exception as e:
        print(e)
        print('Invalid input. Follow the given format')
        ask_for_date(name)


def calculate_age():
    born = ask_for_date('your date of birth')
    today = date.today()
    extra_year = 1 if ((today.month, today.day) < (born.month, born.day)) else 0
    return today.year - born.year - extra_year

print(calculate_age())
2
Dani Medina

この方法で日時ライブラリを使用することもできます。これは、年齢を年単位で計算し、月と日のプロパティのために間違った年齢を返す論理エラーを削除します

1999年7月31日に生まれた人が2017年7月30日まで17歳であるように

コードは次のとおりです。

import datetime

#asking the user to input their birthdate
birthDate = input("Enter your birth date (dd/mm/yyyy)\n>>> ")
birthDate = datetime.datetime.strptime(birthDate, "%d/%m/%Y").date()
print("Your birthday is on "+ birthDate.strftime("%d") + " of " + birthDate.strftime("%B, %Y"))

currentDate = datetime.datetime.today().date()

#some calculations here 
age = currentDate.year - birthDate.year
monthVeri = currentDate.month - birthDate.month
dateVeri = currentDate.day - birthDate.day

#Type conversion here
age = int(age)
monthVeri = int(monthVeri)
dateVeri = int(dateVeri)

# some decisions
if monthVeri < 0 :
    age = age-1
Elif dateVeri < 0 and monthVeri == 0:
    age = age-1


#lets print the age now
print("Your age is {0:d}".format(age))
0