我試圖解決在Udacity的CS-101當然,這可選問題 - 它要求兩個日期間計算天數。我的代碼適用於所有測試用例,但由於某種原因,它不適用於案例1(2012年1月1日 - 2012年2月28日),但它返回56,但實際答案是58.我無法用頭圍繞那,任何建議將不勝感激。日之間的日期(Python)的
def leap_year(year):
if year % 4 != 0:
return "Common Year"
elif year % 100 != 0:
return "Leap Year"
elif year % 400 != 0:
return "Common Year"
else:
return "Leap Year"
def days_in_month(month):
months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
i = 0
days = 0
while i <= month:
days += months[i- 1]
i += 1
return days
def daysBetweenDates(year1, month1, day1, year2, month2, day2):
i = year1
leap_count = 0
while i <= year2:
if leap_year(i) == "Leap Year":
leap_count += 1
i += 1
return ((year2 - year1) * 365 + (days_in_month(month2) - days_in_month(month1)) + (day2 - day1)) + leap_count
# Test routine
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()
不知道如果你被允許使用datetime模塊,但它可能是爲'ABS這麼簡單((日期(2012年1,1) - 日期(2012,2,28)) .days)' – Andrew 2015-04-04 05:24:41
@AndrewFarber嘿,謝謝你,但我想解決它沒有任何內置功能,只是想了解實際的算法。 – hky404 2015-04-04 05:25:46
我從未理解這種情緒。 「這是你的解決方案。」 「不,我不想要解決方案,我想重新發明輪子!」 :P – 2015-04-04 05:38:14