Выполнение многоэтапной проверки даты для праздничных / будних дней в Python - PullRequest
0 голосов
/ 04 декабря 2018

Сценарий: Я пытаюсь создать функцию для проверки даты.Входные данные для функции: год, месяц и список праздников (просто список дней).Функция проверит, находится ли input_date в списке праздничных дней, если это так, то она будет суммировать один день с input_date.Затем он проверит, какой это день недели: суббота (сумма 2), воскресенье (сумма 1).

Проблема: Моя проблема в том, что если я просто создам паруЕсли в пунктах проверки этих критериев новая дата после проверки выходных дней также может быть в списке праздников, поэтому процесс следует повторять до тех пор, пока я не найду день недели, которого нет в списке праздников.

Вопрос: Есть ли способ включить эти проверки в цикл?

Код на данный момент:

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 Ответ

0 голосов
/ 04 декабря 2018

Цикл while сработает:

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

Он продолжит выполнение кода до тех пор, пока выражение (если inputdate находится в 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 был распознан.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...