在Python中执行假日/工作日的多步骤日期检查
场景:我正在尝试构建一个用于日期检查的函数。该功能的输入为:年、月和假日列表—只是天数列表。该函数将检查输入的日期是否在假期列表中,如果在假期列表中,则与输入的日期相加一天。接下来,它将检查哪一个工作日是:如果是星期六和2,如果是星期天和1 问题:我的问题是,如果我只是创建几个if子句来检查这些条件,那么周末检查后的新日期也可能在假日列表中,因此应该重复该过程,直到找到不在假日列表中的工作日 问题:有没有办法将这些检查包含在一个循环中 迄今为止的代码:在Python中执行假日/工作日的多步骤日期检查,python,loops,date,datetime,calendar,Python,Loops,Date,Datetime,Calendar,场景:我正在尝试构建一个用于日期检查的函数。该功能的输入为:年、月和假日列表—只是天数列表。该函数将检查输入的日期是否在假期列表中,如果在假期列表中,则与输入的日期相加一天。接下来,它将检查哪一个工作日是:如果是星期六和2,如果是星期天和1 问题:我的问题是,如果我只是创建几个if子句来检查这些条件,那么周末检查后的新日期也可能在假日列表中,因此应该重复该过程,直到找到不在假日列表中的工作日 问题:有没有办法将这些检查包含在一个循环中 迄今为止的代码: while循环可以实现以下目的:
while循环可以实现以下目的:
# this checks if inputdate is a holiday
while inputdate in holiday_list:
inputdate == inputdate + datetime.timedelta(days=1)
它将一直运行代码,直到表达式if inputdate在holiday_列表中计算为false为止
将其余逻辑添加到循环中的示例:
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
我还清理了其他一些东西:
否则,如果应该是elif,并且是in,则应该是in
一旦循环到位,就不需要outputdate,因为一旦循环完成,inputdate将具有正确的值
datetime.inputdate应该是我假设的inputdate?datetime是标准库中模块的名称,但它没有inputdate属性
第一个if语句及其后的语句缩进太远
我还将正确的参数名称放入了date中,但正如您所知,您将需要类似于此代码上方的from datetime import date的内容,以便识别日期。
while循环可以实现以下目的:
# this checks if inputdate is a holiday
while inputdate in holiday_list:
inputdate == inputdate + datetime.timedelta(days=1)
它将一直运行代码,直到表达式if inputdate在holiday_列表中计算为false为止
将其余逻辑添加到循环中的示例:
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
我还清理了其他一些东西:
否则,如果应该是elif,并且是in,则应该是in
一旦循环到位,就不需要outputdate,因为一旦循环完成,inputdate将具有正确的值
datetime.inputdate应该是我假设的inputdate?datetime是标准库中模块的名称,但它没有inputdate属性
第一个if语句及其后的语句缩进太远
我还将正确的参数名称放入了date中,但正如您所知,您将需要类似于此代码上方的from datetime import date的内容,以便识别日期。
谢谢你的回答。在这种情况下,我可以在这个循环中添加工作日检查吗?因为在工作日检查之后,我需要再次检查它是否是假日。每次日期无效时,您可以在其中输入您需要运行的逻辑。我将用一个例子来编辑答案。谢谢你添加这个例子。我只是有点困惑:我知道第一次检查日期是否在假期名单上。我的问题是:如果日期不在假日列表中,我仍然应该检查它是否是一个工作日,如果不添加天数,然后再次检查假日列表。但我不明白,如果平日检查在函数中,代码如何解释这一点?如果不是,是工作日5号吗?如果不是,是在工作日6号吗?如果以上情况均不成立,则valid设置为True。当循环再次启动时,它将检查是否无效,如果valid为True,它将停止并不再运行循环代码。如果在循环过程中满足这些条件中的任何一个,它将添加上的天数,然后移动到If-elif-else块的底部,因为它已经匹配了其中一个。然后循环重新开始,并重复if-elif-else检查。谢谢您的回答。在这种情况下,我可以在这个循环中添加工作日检查吗?因为在工作日检查之后,我需要再次检查它是否是假日。每次日期无效时,您可以在其中输入您需要运行的逻辑。我将用一个例子来编辑答案。谢谢你添加这个例子。我只是有点困惑:我知道第一次检查日期是否在假期名单上。我的问题是:如果日期不在假日列表中,我仍然应该检查它是否是一个工作日,如果不添加天数,然后再次检查假日列表。但我不明白,如果平日检查在函数中,代码如何解释这一点?如果不是,是工作日5号吗?如果不是,是在工作日6号吗?如果以上情况均不成立,则valid设置为True。当循环再次启动时,它将检查是否无效,如果valid为True,它将停止并不再运行循环代码。如果在循环过程中满足这些条件中的任何一个,它将添加上的天数,然后移动到If-elif-else块的底部,因为它已经匹配了其中一个。然后循环重新开始,并重复if-elif-else检查。