首页 文章

在Python中对假期/工作日进行多步骤日期检查

提问于
浏览
0

Scenario: 我正在尝试为日期检查构建一个函数 . 该功能的输入为:年,月和假日列表(仅列出天数) . 该函数将检查input_date是否在假日列表中,如果是,它将为input_date总计一天 . 接下来它将检查哪个工作日是:如果是星期六(总和2),如果是星期日(总和1) .

Issue: 我的问题是,如果我只创建几个if子句来检查这些条件,周末检查后的新日期也可能在假日列表上,所以应该重复该过程,直到我找到一个未开启的工作日假期清单 .

Question: 有没有办法在循环中包含这些检查?

Code so far:

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

1 回答

  • 2

    while循环可以解决这个问题:

    # this checks if inputdate is a holiday   
        while inputdate in holiday_list: 
            inputdate == inputdate + datetime.timedelta(days=1)
    

    它将继续运行代码,直到表达式(如果inputdate在holiday_list中)计算为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
    

    我还清理了其他一些东西:

    • else if 应为 elifis in 应为 in
      循环到位后不需要

    • outputdate ,因为一旦循环结束, inputdate 将具有正确的值

    • datetime.inputdate 应该只是 inputdate 我假设? datetime 是标准库中模块的名称,但它没有 inputdate 属性

    • 第一个 if 语句以及之后的语句太过分了

    • 我也将正确的参数名称放入 date() 但是你知道,你需要像这个代码上方的 from datetime import date 这样才能识别 date .

相关问题