[英]Check the day of the week in Python
我正在尝试编写代码以检查是否是星期日或星期六。 但是我收到以下错误:
代码是:
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
isholiday
函数的参数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
我想你的意思是:
dat0 = datetime.datetime(2019,3,23) #Saturday
dat1 = datetime.datetime(2019,3,24) #Sunday
当前,您正在函数中使用'date'参数,然后使用括号和参数“调用”它。 仅在初始化时使用。
使用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中给定日期作为星期几?
我这样修改了您的代码:
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对象。 我用datetime.datetime更改了第5行和第6行中的日期。 同样,您不能将abs()函数与datetime.timedelta对象一起使用,就像与整数一起使用一样,因此您应该只获得“ day”。 我为此添加了.days。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.