【问题标题】:Calculating age in python在python中计算年龄
【发布时间】:2017-08-08 04:15:43
【问题描述】:

我正在尝试创建一个代码,要求用户输入他们的出生日期和今天的日期,以确定他们的年龄。到目前为止我写的是:

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)

但是它并没有像我希望的那样运行。有人可以向我解释我做错了什么吗?

【问题讨论】:

  • 离题:不要以大写字母开头的变量名,改用date_of_birthtodays_date
  • 如何没有按您希望的那样运行?请解释一下。
  • 它根本不运行,它炸毁并说'str'没有属性到年份
  • 当您发布问题时,您应该给出错误消息。像"3 14 1995" 这样的东西只是一个字符串。除非您告诉它,否则 Python 不会将其解释为日期。
  • 输入是文本字符串而不是日期对象。如果它是输入值,您需要将其转换为 Born = datetime.strptime(Date_of_birth, "%m %d %Y") 与 Todays_date 相同

标签: python calculator


【解决方案1】:

如此接近!

您需要先将字符串转换为日期时间对象,然后才能对其进行计算 - 请参阅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

【讨论】:

  • mm dd yyyy 在美国非常明智和普遍
【解决方案2】:

这应该工作:)

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())

【讨论】:

    【解决方案3】:

    您也可以通过这种方式使用日期时间库。这会以年为单位计算年龄,并消除由于月和日属性而返回错误年龄的逻辑错误

    就像一个在 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))
    

    【讨论】:

      【解决方案4】:
       from datetime import datetime, date
      def calculateAge(birthDate): 
          today = date.today() 
          age = today.year - birthDate.year - ((today.month, today.day) < (birthDate.month, birthDate.day)) 
          return age 
      d=input()
      year=d[0:4]
      month=d[5:7]
      day=d[8:]
      if int(month)<=0 or int(month)>12:
          print("WRONG")
      elif int(day)<=0 or int(day)>31:
          print("WRONG")
      elif int(month)==2 and int(day)>29:
          print("WRONG")
      elif int(month) == 4 or int(month) == 6 or int(month) == 9 or int(month) ==11 and int(day) > 30:
          print("WRONG")
      else:       
          print(calculateAge(date(int(year),int(month),int(day))))
      

      此代码适用于每个日期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-16
        • 2017-05-26
        • 2012-03-26
        • 1970-01-01
        • 2020-12-28
        • 2016-03-20
        • 2011-04-16
        • 1970-01-01
        相关资源
        最近更新 更多