所以我要在要求我确定年龄的地方进行这项练习 以天为单位的某人基于其出生日期和当前日期的输入。 例如(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。
答案 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)