为此设置了一些课程作业。一切都很好,直到我发现其中一个测试用例无法正常工作,试图使2012-1-1
和2013-1-1
之间的间隔时间达到为止。
我猜应该是366天,因为2012
是a年。这段代码似乎在猜测365,我的导师将答案标记为360。
他说了一些“只赚30个月”,所以我想他的360
与此有关吗?无论如何,当我猜代码为365
时,这并不能为我的代码猜测366
辩解。
输出如图所示
测试用例通过!祝贺
使用数据进行测试:(2012、1、1、2013、1、1)未能通过365,应该通过360
测试用例通过!祝贺
daysOfMonths = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ]
def is_leap_year(year):
return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
def get_days_from_year(year):
days = year * 365
i = 0
while i < year:
i += 1
if is_leap_year(i):
days += 1
return days
def get_days_from_month(month, year):
days = 0
i = 0
while i < month:
if i == 1 and is_leap_year(year):
days += daysOfMonths[i] + 1
else:
days += daysOfMonths[i]
i += 1
return days
def get_days_from_date(year, month, day):
days_in_year = get_days_from_year(year)
days_in_month = get_days_from_month(month - 1, year)
days = days_in_year + days_in_month + day
return days
def daysBetweenDates(year1, month1, day1, year2, month2, day2):
first_date_days = get_days_from_date(year1, month1, day1)
second_date_days = get_days_from_date(year2, month2, day2)
if first_date_days > second_date_days:
return first_date_days - second_date_days
else:
return second_date_days - first_date_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 passed", result, "should of passed", answer)
else:
print("Test case passed! CONGRATULATIONS")
test()
答案 0 :(得分:0)
您在错误的位置递增了 i 。你有:
while i < year:
i += 1
if is_leap_year(i):
days += 1
但应为:
while i < year:
if is_leap_year(i):
days += 1
i += 1
因此,您的leap年都减少了1(2011年与2012年,2015年与2016年等)
答案 1 :(得分:0)
他说了一些有关“ 让整个月都变成30天” ,所以
def get_range(year1,month1,day1,year2,month2,day2):
"""
assumes all months have 30 days, with no leap years
~ for some weird reason i dont understand
(probably so you dont use builtin datetime)
"""
days_difference = (year2-year1)*360
days_difference += (month2-month1)*30
return days_difference + day2-day1
print(get_range(2012, 1, 1, 2013, 1, 1))
如果要获取两个日期之间的实际天数
from datetime import datetime
def get_real_range(year1,month1,day1,year2,month2,day2):
return (datetime(year2,month2,day2) - datetime(year1,month1,day1)).days