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

2024-06-29 01:10:06 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我要做这个练习,它要求我达到 某人,以天为单位,根据他们的生日和当前日期输入。 例如,(2012,1,12012,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。你知道吗


Tags: inagereturnifdefyearelseday1
1条回答
网友
1楼 · 发布于 2024-06-29 01:10:06

一无所获!但这是一个更好的方法,你可以用来计算这个过程。太好了!享受:)

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)

相关问题 更多 >