根据出生日期和当前日期输入某人的年龄

时间:2018-09-18 21:51:06

标签: python

所以我要在要求我确定年龄的地方进行这项练习 以天为单位的某人基于其出生日期和当前日期的输入。 例如(2012,1,1,2012,2,28)应该返回58 (也不允许我使用任何内置的时间函数)。到目前为止,这是我的代码:

def leapyear(year):
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)

def daysBetweenDates(year1, month1, day1, year2, month2, day2):
  age = 0
  months31 = [1,3,5,7,8,10,12]
  months30 = [4,6,9,11]
  while year1 != year2 and month1 != month2 and day1 != day2:
    age += day2
    day2 = 0
    if day2 == 0:
      month2-=1
      if month2 in months31:
        day2 += 31
        month2 -= 1
      if month2 in months30:
        day2 += 30
        month2 -= 1
      if month2 == 2:
        if leapyear(year2):
          day2 += 29
          month2 -= 1
        else:
          day2 += 28
          month2 -= 1
      else: 
        year2 -= 1
        month2 = 12     
  return age

无论如何,我的问题是,每当我尝试使用此函数时,它始终返回0,对此解决问题的任何帮助都将受到赞赏。

编辑: 大家好,所以根据您的反馈,我了解了为什么我的代码要花很长时间才能运行,所以我将其更改为现在的样子:

def leapyear(year):
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)

def daysBetweenDates(year1, month1, day1, year2, month2, day2):
  # Your code here.
  age = 0
  months31 = [1,3,5,7,8,10,12]
  months30 = [4,6,9,11]
  if day1 != day2:
    age = abs(day2-day1)
    day2 = day1

  if month1 > month2:
    while month1 !=  month2:
      if month2 in months31:
        age += 31
        month2 += 1
      if month2 in months30:
        age += 30
        month2 += 1
      if month2 == 2:
        if leapyear(year2):
          age += 29
          month2 += 1
        else:
          age += 28
          month2 += 1
  else:
    while month1 !=  month2:
      if month2 in months31:
        age += 31
        month2 -= 1
      if month2 in months30:
        age += 30
        month2 -= 1
      if month2 == 2:
        if leapyear(year2):
          age += 29
          month2 -= 1
        else:
          age += 28
          month2 -= 1
  while year1 != year2:
    if leapyear(year2):
      age += 365
      year2 -= 1
    else:
      age += 365
      year2 -= 1

  return age

但是唯一的问题是,对于某些示例,它正在起作用,而对于其他示例,我正在接近答案,但不是确切的答案。例如,对于print(daysBetweenDates(2012, 1, 1, 2012, 2, 28)),我在56岁时应该得到58。

1 个答案:

答案 0 :(得分:1)

全无!一天,但这是您可以用来计算此过程的更好方法。第一次计算时发生了一些错误,现在运行非常棒!享受:)

def leap_year(y):
    if y % 4 == 0 and (y % 100 != 0 or year % 400 == 0):
        return True
    return False

def year_to_date(yeah, month, day):
    days = 0
    days += day
    for i in range(0, month - 1):
        if i == 1:
            if leap_year(year):
                days += 28
            else:
                days += 29 
        else:
            days += days_in_month[i]
    return days

def birth_to_new_year(year, month, day):
    days = 0
    days += days_in_month[month - 1] - day
    for i in range(month, 12):
        if i == 1:
            if leap_year(year):
                days += 28
            else:
                days += 29
        else:
            days += days_in_month[i]
    return days

days_in_month = [31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

day = 18 
month = 9 
year = 2018 

birth_day = 20
birth_month = 11
birth_year = 1988

days = 0

for i in range(birth_year + 1, year):
    if leap_year(i):
        days += 366
    else:
        days += 365

days += year_to_date(year, month, day)
days += birth_to_new_year(birth_year, birth_month, birth_day)

print(days)