在Python中执行假日/工作日的多步骤日期检查

在Python中执行假日/工作日的多步骤日期检查,python,loops,date,datetime,calendar,Python,Loops,Date,Datetime,Calendar,场景:我正在尝试构建一个用于日期检查的函数。该功能的输入为:年、月和假日列表—只是天数列表。该函数将检查输入的日期是否在假期列表中,如果在假期列表中,则与输入的日期相加一天。接下来,它将检查哪一个工作日是:如果是星期六和2,如果是星期天和1 问题:我的问题是,如果我只是创建几个if子句来检查这些条件,那么周末检查后的新日期也可能在假日列表中,因此应该重复该过程,直到找到不在假日列表中的工作日 问题:有没有办法将这些检查包含在一个循环中 迄今为止的代码: while循环可以实现以下目的:

场景:我正在尝试构建一个用于日期检查的函数。该功能的输入为:年、月和假日列表—只是天数列表。该函数将检查输入的日期是否在假期列表中,如果在假期列表中,则与输入的日期相加一天。接下来,它将检查哪一个工作日是:如果是星期六和2,如果是星期天和1

问题:我的问题是,如果我只是创建几个if子句来检查这些条件,那么周末检查后的新日期也可能在假日列表中,因此应该重复该过程,直到找到不在假日列表中的工作日

问题:有没有办法将这些检查包含在一个循环中

迄今为止的代码:


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检查。