我的代码是:
def less_than_equal(start_day, start_mon, start_year, \
end_day, end_mon, end_year):
try:
start_day <= end_day and start_mon <= end_mon
return True
except:
start_day > end_day or start_mon > end_mon or start_year >end_year
print("Start date must be less than or equal end date.")
,其中
>>> less_than_equal(12, 4, 1111, 12, 5, 1111)
True
>>> less_than_equal(12, 7, 1111, 12, 5, 1111)
"Start date must be less than or equal end date." (but my code gives True)
>>> less_than_equal(17, 7, 1111, 12, 5, 1111)
"Start date must be less than or equal end date." (mine gives True here too)
我也很困惑如何使用加注和尝试除外。 哪个放在代码的正文中,哪个放在最后? 例如,在#TODO
下def count_days(start_date, end_date):
# date is represented as a string in format dd/mm/yyyy
start_day, start_mon, start_year = get_day_month_year(start_date)
end_day, end_mon, end_year = get_day_month_year(end_date)
# TODO: check for data validity here #
# if start date is not valid...
# if end date is not valid...
# if start date > end date...
if is_valid( start_day, start_mon, start_year) == False:
raise ValueError( "Not a valid date: " + start_date )
elif is_valid(end_day, end_mon, end_year) == False:
raise ValueError( "Not a valid date: " + end_date )
if less_than_equal(start_day, start_mon, start_year, \
end_day, end_mon, end_year) == "Start date must be less than or equal end date.":
raise ValueError( "Not a valid date: " + start_date )
# lazy - let the computer count from start date to end date
count = 0
while less_than_equal(start_day, start_mon, start_year, end_day, end_mon, end_year):
count = count + 1
start_day, start_mon, start_year = next_date(start_day, start_mon, start_year)
# exclude end date
return count - 1
非常感谢
答案 0 :(得分:5)
除此之外,您不需要使用try。
def less_than_equal(start_day, start_mon, start_year, \
end_day, end_mon, end_year):
if start_day <= end_day and start_mon <= end_mon:
return True
elif start_day > end_day or start_mon > end_mon or start_year >end_year:
print("Start date must be less than or equal end date.")
return False
尝试和除了用于捕获异常。
关于第二个问题,你可以
count = 0
while True:
try:
if not less_than_equal(start_day, start_mon, start_year, end_day, end_mon, end_year):
break
except TypeError: # for example
break
count = count + 1
start_day, start_mon, start_year = next_date(start_day, start_mon, start_year)
答案 1 :(得分:1)
有内置的库函数可以使这更简单:
import datetime
import time
def parse_date(datestring):
dt = time.strptime(datestring, "%Y/%m/%d")
return datetime.date(dt.tm_year, dt.tm_mon, dt.tm_mday)
def count_days(start_date, end_date):
s = parse_date(start_date)
e = parse_date(end_date)
if s > e:
raise ValueError("Start date must be <= end date")
else:
return (e - s).days
然后
count_days("2012/2/27", "2012/3/5") # => 7