Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数中If-Else块后的新If语句返回意外结果_Python_Python 2.7 - Fatal编程技术网

Python 函数中If-Else块后的新If语句返回意外结果

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

我想得到一个函数,在工作日返回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
然后我用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语句)