Python 函数中If-Else块后的新If语句返回意外结果
我想得到一个函数,在工作日返回1,在周末返回2,在假期返回3。 如果假日是在工作日,我希望它能在3点返回。 我试过:Python 函数中If-Else块后的新If语句返回意外结果,python,python-2.7,Python,Python 2.7,我想得到一个函数,在工作日返回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, weeke
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
然后我用just 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
首先检查假期:
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))
你的支票应该从具体到一般。在这种情况下,这意味着您应该在检查工作日或周末之前检查假期
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\u type()
的函数,这样您就不会对type()
进行阴影处理更合适的方法是检查假日,然后检查周末,或者检查周日
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
请为所有评论指定您的输出!它在首先检查假期时起作用。我的问题是为什么第二种方法(三个if语句)不起作用。第三个if语句没有被检查的原因是什么?第三个if语句永远不会工作,因为方法已经从第一个if语句返回了一个值。当一个方法返回一个值时,下面没有执行的代码。经验法则一个方法应该总是只有一个入口和一个出口(一个return语句)