所以我要做这个练习,它要求我达到 某人,以天为单位,根据他们的生日和当前日期输入。 例如,(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。你知道吗
一无所获!但这是一个更好的方法,你可以用来计算这个过程。太好了!享受:)
相关问题 更多 >
编程相关推荐