Проверьте день недели в Python - PullRequest
2 голосов
/ 29 марта 2019

Я пытаюсь написать код для проверки, будет ли это воскресенье или суббота.Но я получаю следующую ошибку:

Код:

import datetime
def isholiday(date):

    dat0 = date(2019, 3, 23)  # Saturday
    dat1 = date(2019, 3, 24)  # Sunday
    if abs(date - dat0) % 7 == 0 | abs(date - dat1)%7 == 0 :
        print ("is holiday")
    return True

В следующей строке у меня есть:

assert(isholiday(datetime.datetime(2018, 10, 21))==True)

Ошибка:

     ------------------------------------------------------------------------ 
        ---
        TypeError                                 Traceback (most recent call 
        last)
        <ipython-input-22-87d6e5a340a0> in <module>()
        ----> 1 assert(isholiday(datetime.datetime(2018, 10, 21))==True)

        <ipython-input-21-bb556bebaa01> in isholiday(date)
              2 from datetime import date
              3 def isholiday(date):
        ----> 4     dat0 = date(2019,3,23)
              5     dat1 = date(2019,3,24)
              6     if abs(date - dat0)%7 == 0 | abs(date - dat1)%7 == 0 :

        TypeError: 'datetime.datetime' object is not callable

Ответы [ 4 ]

0 голосов
/ 29 марта 2019

Я изменил ваш код так:

import datetime
def isholiday(date):

    dat0 = datetime.datetime(2019,3,23) #Saturday
    dat1 = datetime.datetime(2019,3,24)  #Sunday
    if abs((date - dat0).days)%7 == 0 or abs((date - dat1).days)%7 == 0:
        print ("is holiday")
        return True

assert(isholiday(datetime.datetime(2018, 10, 21))==True)

Вы пытаетесь вызвать аргумент 'date', и вы не можете вызвать объект datetime.dateime, подобный этому. Я изменил даты в 5-й и 6-й строке с datetime.datetime. Также вы не можете использовать функцию abs () с объектами datetime.timedelta, как вы используете с целыми числами, поэтому вы должны получить только «день». Я добавил .days для этого.

0 голосов
/ 29 марта 2019

Я думаю, что вы имеете в виду это:

dat0 = datetime.datetime(2019,3,23) #Saturday

dat1 = datetime.datetime(2019,3,24)  #Sunday

В настоящее время вы используете аргумент 'date' в функции, а затем 'вызываете' его с помощью скобок и аргументов.Используется только при инициализации.

0 голосов
/ 29 марта 2019

Используйте weekday().Кроме того, ваша функция должна всегда что-то возвращать, а не только иногда возвращать True.

from datetime import date

def isholiday(dat):
    if dat.weekday() == 6 or dat.weekday == 5: # 6 is Sunday, 5 is Saturday 
        print ("is holiday")
        return True
    return False

assert(isholiday(date(2018, 10, 21))==True)

Дает:

в выходные дни

Возможные дубликаты: Как получить день недели с учетом даты вPython

0 голосов
/ 29 марта 2019

Параметр date вашей isholiday функции скрывает класс datetime.date. Вам следует переименовать параметр, чтобы избежать конфликта имен:

def isholiday(dat):
    dat0 = date(2019,3,23) #Saturday
    dat1 = date(2019,3,24)  #Sunday
    if abs(dat - dat0)%7 == 0 | abs(dat - dat1)%7 == 0 :
        print ("is holiday")
        return True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...