*我知道datetime可以作为解决此问题的有效方法,但我还是初学者,并且想了解为什么此代码没有显示所需的输出 < / p>
以下代码生成一条错误消息,指出程序使用了13秒CPU,因此它已结束。
我不明白为什么这段代码占用了这么多内存,原来下面的函数没有将它们的输入转换成列表,但是我这样做了所以我们可以改变每个参数,直到IsBefore中的条件返回False,这将结束while循环并为start_date上的nextDay函数的总迭代返回更新的“number_of_days”。
编辑:我将项目转换为列表,因为我不确定是否
year1, month1, day1 = nextDay(year1,month1,day1)
会正确更新这些值
def nextDay(year, month, day):
"""Simple version: assume every month has 30 days"""
date=[year,month,day]
if date[2] < 30:
return [year, month, day + 1]
else:
if date[1] == 12:
return [year + 1, 1, 1]
else:
return [year, month + 1, 1]
def IsBefore(year1, month1, day1, year2, month2, day2):
Before=[year1,month1,day1]
Current=[year2,month2,day2]
if (Before[0]>Current[0]) or (Before[0]==Current[0] and Before[1]>Current[1]) or (Before[0]==Current[0] and Before[1]==Current[1] and Before[2]>Current[2]):
return False
else:
return True
def daysBetweenDates(year1, month1, day1, year2, month2, day2):
number_of_days=0
start_date=[year1,month1,day1]
while IsBefore(year1, month1, day1, year2, month2, day2)==True:
start_date=nextDay(year1,month1,day1)
number_of_days+=1
return number_of_days
def test():
test_cases = [((2012,9,30,2012,10,30),30),
((2012,1,1,2013,1,1),360),
((2012,9,1,2012,9,4),3)]
for (args, answer) in test_cases:
result = daysBetweenDates(*args)
if result != answer:
print "Test with data:", args, "failed"
else:
print "Test case passed!"
test()
答案 0 :(得分:0)
我将这些项目转换为列表,因为我不确定是否
year1, month1, day1 = nextDay(year1,month1,day1)
会正确更新这些值
你完全向后。现在你做的时候:
start_date=[year1,month1,day1]
while IsBefore(year1, month1, day1, year2, month2, day2)==True:
start_date=nextDay(year1,month1,day1)
number_of_days+=1
return number_of_days
然后year1, month1, day1
永远不会受到影响,并且您不断将同一个valeus传递给while IsBefore(...)
,这可能解释了为什么您的代码没有按照您的意愿行事。
考虑:
>>> x, y, z = 1, 2, 3
>>> def f(): return 42, 88, 99
...
>>> a_list = [x, y, z]
>>> a_list = f()
>>> a_list
(42, 88, 99)
>>> x, y, z
(1, 2, 3)
你的程序耗时太长,因为你创造了一个无限循环,而不是因为记忆。
此外,除此之外,除非您有充分的理由使用Python 2,例如你的老板正在制造你,你正在维护一个Python 2中的工作代码库,或者你的教授正在制造你,那么你应该真正学习Python 3。