我希望得到一个功能,工作日返回1,周末2,节假日3。 如果假期在平日,我希望它返回3。 我试过了:
from datetime import datetime
def type(d):
if d.weekday() in [0, 1, 2, 3, 4]:
return 1 # return type 1, weekdays
else:
return 2 # return type 2, weekends
if d in (datetime(2014, 1, 1), \
datetime(2014, 5, 26), \
datetime(2014, 7, 4), \
datetime(2014, 9, 1), \
datetime(2014, 11, 27), \
datetime(2014, 12, 25)):
return 3 # return type 3, holidays
print type(datetime(2014, 1, 1)) # return 1 instead of 3
然后我用if替换了else,仍然得到相同的结果:
def type(d):
if d.weekday() in [0, 1, 2, 3, 4]:
return 1 # return type 1, weekdays
if d.weekday() in [5, 6]:
return 2 # return type 2, weekends
if d in (datetime(2014, 1, 1), \
datetime(2014, 5, 26), \
datetime(2014, 7, 4), \
datetime(2014, 9, 1), \
datetime(2014, 11, 27), \
datetime(2014, 12, 25)):
return 3 # return type 3, holidays
答案 0 :(得分:2)
您的支票应该从具体到一般。在这种情况下,这意味着您应该在检查工作日或周末之前检查假期。
from datetime import datetime
def day_type(d):
if d in (datetime(2014, 1, 1),
datetime(2014, 5, 26),
datetime(2014, 7, 4),
datetime(2014, 9, 1),
datetime(2014, 11, 27),
datetime(2014, 12, 25)):
return 3 # return type 3, holidays
elif d.weekday() in [0, 1, 2, 3, 4]:
return 1 # return type 1, weekdays
else:
return 2 # return type 2, weekends
此外,你不需要那些反斜杠来继续你的行 - 周围的(
和)
使这不必要。 type
是内置的Python,因此将您的函数重命名为day_type()
,以便您不会隐藏type()
。
答案 1 :(得分:0)
首先检查假期:
from datetime import datetime
def type(d):
if d in (datetime(2014, 1, 1), \
datetime(2014, 5, 26), \
datetime(2014, 7, 4), \
datetime(2014, 9, 1), \
datetime(2014, 11, 27), \
datetime(2014, 12, 25)):
return 3
if d.weekday() in [0, 1, 2, 3, 4]:
return 1
else:
return 2
print type(datetime(2014, 1, 1))
答案 2 :(得分:0)
更合适的方法是检查假期,然后是周末和其他工作日
def type(d):
if d in (datetime(2014, 1, 1), \
datetime(2014, 5, 26), \
datetime(2014, 7, 4), \
datetime(2014, 9, 1), \
datetime(2014, 11, 27), \
datetime(2014, 12, 25)):
daytype = 3 # return type 3, holidays
elif d.weekday() in [5,6]:
daytype = 2 # return type 2, weekends
else:
daytype = 1 # return type 3 weekdays
return daytype