最近的一项任务是设计一个计算日期间隔天数的程序。我还没有完成,我知道这可以大大改善。然而,我的问题是:当我使用date2(下面)运行此程序时,会发生错误,但它按计划使用date1运行(同样,下面)。我觉得这种行为很奇怪。这两次约会只相隔一天,但有一次失败了,也有一次没有。我尝试过多次约会,但每次约会都会在994天后失败,无论月份、年份、日期如何为什么
澄清:我将"失败"定义为
File "first.py", line 35, in counter
return counter(date_array, x+1)
def date_test(date_array):
first = (date_array[0], date_array[1], date_array[2])
second = (date_array[3], date_array[4], date_array[5])
if first > second:
return False
elif first != second:
return True
elif first == second:
return False
else:
return "Error: This shouldn't happen."
def counter(date_array, x = 0):
months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
while(date_test(date_array)):
if(date_array[2] == 31 and date_array[1] == 12):
date_array[0] += 1; date_array[1], date_array[2] = 1, 1
return counter(date_array, x+1)
else:
if date_array[2] < months[date_array[1]-1]:
date_array[2] += 1
return counter(date_array, x+1)
else:
date_array[1] += 1; date_array[2] = 1;
return counter(date_array, x+1);
return x
def tuple_test(date):
date_array = []
for x in date:
date_array.append(x)
if not date_test(date_array):
return "The first date is before the second. Swap them."
return counter(date_array)
date1 = (1900,1,1,1902,9,22)
date2 = (1900,1,1,1902,9,23)
print tuple_test(date1)
print tuple_test(date2)
错误的原因是您已经超过了最大递归深度。
要"破解"(并验证)这个问题,你可以简单地添加
import sys
sys.setrecursionlimit(10000)
到代码的顶部
您应该使用python提供的工具
>>> import datetime
>>> date1 = (1900,1,1,1902,9,22) #your weird list with 2 dates
>>> dt1 = datetime.date(*date1[:3]) #create a date object == datetime.date(1900,1,1)
>>> dt2 = datetime.date(*date1[3:]) #create a date object == datetime.date(1902,9,22)
>>> if dt1 < dt2: dt1,dt2 = dt2,dt1 #if dt1 is smaller than dt2, swap them
...
>>> print (dt1 - dt2).days #subtract them and print their days
994
>>>