- #1
doktorwho
- 181
- 6
Python:
# Use Dave's suggestions to finish your daysBetweenDates
# procedure. It will need to take into account leap years
# in addition to the correct number of days in each month.
def nextDay(year, month, day):
n=month
if (n==1 or n==3 or n==5 or n==7 or n==8 or n==10 or n==12) and day < 31:
return year, month, day + 1
if (n==4 or n==6 or n==9 or n==11) and day <30 :
return year, month, day + 1
if month==2 and day < 29 and (year%4)==0:
return year, month, day + 1
if month==2 and day < 28 and (year%4)!=0:
return year, month, day + 1
else:
if month == 12:
return year + 1, 1, 1
else:
return year, month + 1, 1
def dateIsBefore(year1, month1, day1, year2, month2, day2):
"""Returns True if year1-month1-day1 is before year2-month2-day2. Otherwise, returns False."""
if year1 < year2:
return True
if year1 == year2:
if month1 < month2:
return True
if month1 == month2:
return day1 < day2
return False
def daysBetweenDates(year1, month1, day1, year2, month2, day2):
"""Returns the number of days between year1/month1/day1
and year2/month2/day2. Assumes inputs are valid dates
in Gregorian calendar."""
# program defensively! Add an assertion if the input is not valid!
assert not dateIsBefore(year2, month2, day2, year1, month1, day1)
days = 0
while dateIsBefore(year1, month1, day1, year2, month2, day2):
year1, month1, day1 = nextDay(year1, month1, day1)
days += 1
return days
def test():
test_cases = [((2012,1,1,2012,2,28), 58),
((2012,1,1,2012,3,1), 60),
((2011,6,30,2012,6,30), 366),
((2011,1,1,2012,8,8), 585 ),
((1900,1,1,1999,12,31), 36523)]
for (args, answer) in test_cases:
result = daysBetweenDates(*args)
if result != answer:
print ("Test with data:"), args, "failed"
else:
print ("Test case passed!")
test()
I am suppose to write a code that calculates the number of days between two dates and i get everything from the test correctly except the last one, 1900,1,1,199,12,31. I get +1 day, why is that?
Last edited by a moderator: