0
中に私が検索し、ここで見つける同じ問題を持つ人を発見した: Python daysBetweenDate無限ループ日付カウンター
がしかし、彼らのコードは私よりも異なっている、と私は中で指摘された問題に対処するように見えますその投稿の回答。
私のコードでは、なぜ無限ループに陥っているのか分かりません。
限り、私が理解できるよう、daysBetweenDatesがdateIsBeforeがTrueになった場合、その後の間の日数まで追加すべき、限りdateIsBeforeはFalseを返すよう、日にnextDay機能や+1を実行しているdef leap_year_check(year):
if (year%4==0 and year%100==0 and year%400==0) or (year%4==0 and year%100!=0):
return True
else:
return False
#TESTED-leap_year_check-PASSED
def nextDay(year, month, day):
if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12 and day < 31:
return year, month, day + 1
if month == 4 or month == 6 or month == 9 or month == 11 and day < 30:
return year, month, day + 1
if month == 2 and day <28:
return year, month, day + 1
if month == 2 and leap_year_check(year)==True and day==28:
return year, month, day + 1
else:
if month == 12:
return year + 1, 1, 1
else:
return year, month + 1, 1
#TESTED nextDay - PASSED
def dateIsBefore(year1, month1, day1, year2, month2, day2):
if year1 < year2:
return True
if year1 == year2:
if month1 < month2:
return True
if month1 == month2:
return day1 < day2
return False
#TESTED dateIsBefore - PASSED
def daysBetweenDates(year1, month1, day1, year2, month2, day2):
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
#***Keep running into infinite loop when testing daysBetweenDates
#ALL other functions operate correctly when tested on their own
#ALL other functions work together EXCEPT when running daysBetweenDates
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()
。
私は明らかに何かが不足しています。
私はこのことについて非常に非効率的であると考えていますが、それは学習目的であり、私はまだ最適化に焦点を当てる必要がありません。今はコードを動作させる方法を理解しようとしています。
ご協力いただければ幸いです。