方案::我正在尝试构建一个用于日期检查的功能。该功能的输入是:年,月和假期列表(仅几天的列表)。该函数将检查input_date是否在假期列表中,如果在假期列表中,则它将总计一天到input_date。接下来,它将检查哪个工作日是:星期六(总和2),星期日(总和1)。
问题:我的问题是,如果我仅创建几个if子句来检查这些条件,那么周末检查之后的新日期也可能会在假期列表中,因此该过程应该一直重复直到找到不在假期清单上的工作日。
问题:有没有办法将这些检查循环包含进来?
到目前为止的代码:
def datecheck (input_year, input_month, holiday_list):
datetime.inputdate = date(year, month, 1)
# this checks if inputdate is a holiday
if inputdate is in holiday_list:
inputdate == inputdate + datetime.timedelta(days=1)
# next part guarantees inputdate is a weekday
if inputdate.weekday() == 5:
inputdate == inputdate + datetime.timedelta(days=2)
else if inputdate.weekday() == 6:
inputdate == inputdate + datetime.timedelta(days=1)
#check again for holiday?
outputdate = inputdate
return outputdate
答案 0 :(得分:2)
while循环可以解决问题:
# this checks if inputdate is a holiday
while inputdate in holiday_list:
inputdate == inputdate + datetime.timedelta(days=1)
它将一直运行代码,直到表达式(如果输入日期位于holiday_list中)为假。
将其余逻辑添加到循环中的示例:
def datecheck (input_year, input_month, holiday_list):
inputdate = date(input_year, input_month, 1)
valid = False
while not valid:
# this checks if inputdate is a holiday
if inputdate is in holiday_list:
inputdate == inputdate + datetime.timedelta(days=1)
# next part guarantees inputdate is a weekday
elif inputdate.weekday() == 5:
inputdate == inputdate + datetime.timedelta(days=2)
elif inputdate.weekday() == 6:
inputdate == inputdate + datetime.timedelta(days=1)
else:
valid = True
return inputdate
我也清理了其他几件事:
else if
应该是elif
,而is in
应该只是in
outputdate
,因为一旦循环完成,inputdate
将具有正确的值datetime.inputdate
应该是inputdate
? datetime
是标准库中模块的名称,但没有inputdate
属性if
及其后的语句缩进得太远date()
中,但是请注意,您需要在此代码上方加上from datetime import date
之类的东西,以便识别date
。