Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.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 基于第三个变量值设置2个变量的智能方法,无需使用if_Python_Python 2.7_If Statement - Fatal编程技术网

Python 基于第三个变量值设置2个变量的智能方法,无需使用if

Python 基于第三个变量值设置2个变量的智能方法,无需使用if,python,python-2.7,if-statement,Python,Python 2.7,If Statement,我有一个代码,我在whichweek中传递一个值,然后它返回dayf和dayt 我使用的是if语句,但它很长,一点也不“pythonic”。有什么优雅的方式来写这个吗 我是这样做的: if whichweek == 5: dayf = 0 dayt = 32 elif whichweek == 1: dayf = 0 dayt = 8 elif whichweek == 2: dayf = 7 dayt = 15 elif whichweek ==

我有一个代码,我在
whichweek
中传递一个值,然后它返回
dayf
dayt
我使用的是if语句,但它很长,一点也不“pythonic”。有什么优雅的方式来写这个吗

我是这样做的:

if whichweek == 5:
    dayf = 0
    dayt = 32
elif whichweek == 1:
    dayf = 0
    dayt = 8
elif whichweek == 2:
    dayf = 7
    dayt = 15
elif whichweek == 3:
    dayf = 14
    dayt = 22
elif whichweek == 4:
    dayf = 21
    dayt = 29

感谢您的帮助。

创建一个字典,将值
映射到
dayf
dayt
的相应值,该值作为键。使用函数调用这个dict更好(我个人喜欢这些简单的面向任务的函数)

weeks = {1: (0, 8)}
try:
    dayf = weeks[1][0]
    dayt = weeks[1][1]
except (KeyError, IndexError):
    pass
下面是示例代码:

def get_values(key):
    return {
         1: (0, 8),
         2: (7, 15),
         3: (14, 22),
         4: (21, 29)
         5: (0, 32),
     }.get(key, (None, None))

dayf, dayt = get_values(5)
# Value of 'dayf' = 0 and 'dayt' = 32 

dayf, dayt = get_values(9)
# Since '9' is not the valid key; 'dayf' = None and 'dayt' = None

如果您不想将任何值设置为
dayf
dayt
,如果
其中的
具有未知值(因为我的上述解决方案在这种情况下将dayf和dayt设置为
None
),则上述代码的稍微更新版本将是:

def get_values(key):
    return {
        1: (0, 8),
        2: (7, 15),
        3: (14, 22),
        4: (21, 29)
        5: (0, 32),
    }[key]

try:
    dayf, dayt = get_values(5)
except KeyError:
    pass

创建一个字典,将值
作为键映射到
dayf
dayt
的相应值。使用函数调用这个dict更好(我个人喜欢这些简单的面向任务的函数)

下面是示例代码:

def get_values(key):
    return {
         1: (0, 8),
         2: (7, 15),
         3: (14, 22),
         4: (21, 29)
         5: (0, 32),
     }.get(key, (None, None))

dayf, dayt = get_values(5)
# Value of 'dayf' = 0 and 'dayt' = 32 

dayf, dayt = get_values(9)
# Since '9' is not the valid key; 'dayf' = None and 'dayt' = None

如果您不想将任何值设置为
dayf
dayt
,如果
其中的
具有未知值(因为我的上述解决方案在这种情况下将dayf和dayt设置为
None
),则上述代码的稍微更新版本将是:

def get_values(key):
    return {
        1: (0, 8),
        2: (7, 15),
        3: (14, 22),
        4: (21, 29)
        5: (0, 32),
    }[key]

try:
    dayf, dayt = get_values(5)
except KeyError:
    pass

我会使用字典:

days = {
    5: (0, 32),
    1: (0, 8),
    2: (7, 15),
    3: (14, 22),
    4: (21, 29)
}

dayf, dayt = days[whichweek]

我会使用字典:

days = {
    5: (0, 32),
    1: (0, 8),
    2: (7, 15),
    3: (14, 22),
    4: (21, 29)
}

dayf, dayt = days[whichweek]

是的,很少有人能让它更像python,我会用一本字典来整理所有的数据,比如:

import random

if __name__ == "__main__":
    random.seed(1)

    week_data = {
        1: (0, 32),
        2: (0, 8),
        3: (7, 15),
        4: (14, 22),
        5: (21, 29)
    }

    for i in range(10):
        whichweek = random.randint(1, 5)
        dayf, dayt = week_data[whichweek]
        print whichweek, dayf, dayt
如果要处理错误,可以使用以下方法:

import random

if __name__ == "__main__":
    random.seed(1)

    week_data = {
        1: (0, 32),
        2: (0, 8),
        3: (7, 15),
        4: (14, 22),
        5: (21, 29)
    }

    for i in range(10):
        whichweek = random.randint(1, 10)
        res = week_data.get(whichweek, None)

        if res is None:
            print("Error: {0} is not in week_data".format(whichweek))
        else:
            dayf, dayt = res
            print whichweek, dayf, dayt
import random

if __name__ == "__main__":
    random.seed(1)

    week_data = {
        1: (0, 32),
        2: (0, 8),
        3: (7, 15),
        4: (14, 22),
        5: (21, 29)
    }

    for i in range(10):
        whichweek = random.randint(1, 10)
        dayf, dayt = week_data.get(whichweek, (None, None))
        print whichweek, dayf, dayt
最后,如果要避免条件检查,请始终返回如下值:

import random

if __name__ == "__main__":
    random.seed(1)

    week_data = {
        1: (0, 32),
        2: (0, 8),
        3: (7, 15),
        4: (14, 22),
        5: (21, 29)
    }

    for i in range(10):
        whichweek = random.randint(1, 10)
        res = week_data.get(whichweek, None)

        if res is None:
            print("Error: {0} is not in week_data".format(whichweek))
        else:
            dayf, dayt = res
            print whichweek, dayf, dayt
import random

if __name__ == "__main__":
    random.seed(1)

    week_data = {
        1: (0, 32),
        2: (0, 8),
        3: (7, 15),
        4: (14, 22),
        5: (21, 29)
    }

    for i in range(10):
        whichweek = random.randint(1, 10)
        dayf, dayt = week_data.get(whichweek, (None, None))
        print whichweek, dayf, dayt

是的,很少有人能让它更像python,我会用一本字典来整理所有的数据,比如:

import random

if __name__ == "__main__":
    random.seed(1)

    week_data = {
        1: (0, 32),
        2: (0, 8),
        3: (7, 15),
        4: (14, 22),
        5: (21, 29)
    }

    for i in range(10):
        whichweek = random.randint(1, 5)
        dayf, dayt = week_data[whichweek]
        print whichweek, dayf, dayt
如果要处理错误,可以使用以下方法:

import random

if __name__ == "__main__":
    random.seed(1)

    week_data = {
        1: (0, 32),
        2: (0, 8),
        3: (7, 15),
        4: (14, 22),
        5: (21, 29)
    }

    for i in range(10):
        whichweek = random.randint(1, 10)
        res = week_data.get(whichweek, None)

        if res is None:
            print("Error: {0} is not in week_data".format(whichweek))
        else:
            dayf, dayt = res
            print whichweek, dayf, dayt
import random

if __name__ == "__main__":
    random.seed(1)

    week_data = {
        1: (0, 32),
        2: (0, 8),
        3: (7, 15),
        4: (14, 22),
        5: (21, 29)
    }

    for i in range(10):
        whichweek = random.randint(1, 10)
        dayf, dayt = week_data.get(whichweek, (None, None))
        print whichweek, dayf, dayt
最后,如果要避免条件检查,请始终返回如下值:

import random

if __name__ == "__main__":
    random.seed(1)

    week_data = {
        1: (0, 32),
        2: (0, 8),
        3: (7, 15),
        4: (14, 22),
        5: (21, 29)
    }

    for i in range(10):
        whichweek = random.randint(1, 10)
        res = week_data.get(whichweek, None)

        if res is None:
            print("Error: {0} is not in week_data".format(whichweek))
        else:
            dayf, dayt = res
            print whichweek, dayf, dayt
import random

if __name__ == "__main__":
    random.seed(1)

    week_data = {
        1: (0, 32),
        2: (0, 8),
        3: (7, 15),
        4: (14, 22),
        5: (21, 29)
    }

    for i in range(10):
        whichweek = random.randint(1, 10)
        dayf, dayt = week_data.get(whichweek, (None, None))
        print whichweek, dayf, dayt

使用字典将
whichweek
映射到
dayf,dayt
例如
mapping={5:(0,32),1:(0,8)…}
使用字典将
whichweek
映射到
dayf,dayt
例如
mapping={5:(0,32),1:(0,8)…}
很好!如果字典中没有
whichweek
,会发生什么情况如果
whichweek
不是
days
中的键,则代码将抛出错误。最好使用
天。获取(whichweek)
并检查是否没有,或者将括号访问调用包装在try except块中。很好!如果字典中没有
whichweek
,会发生什么情况如果
whichweek
不是
days
中的键,则代码将抛出错误。最好使用
days。获取(whichweek)
并检查是否无,或将括号访问调用包装在try-except块中。如果whichweek在days中不是键,则代码将抛出错误。最好使用days.get(whichweek)并检查是否无,或将括号访问调用包装在try-except块中。如果whichweek在days中不是键,则代码将抛出错误。最好使用days.get(whichweek)并检查是否无,或将括号访问调用包装在try except块中。这是迄今为止唯一一个实际复制OP定义的行为的答案。即,
dayf
dayt
如果字典中没有包含该周,则不进行定义。这是迄今为止唯一一个实际复制OP定义的行为的答案。即,如果字典中没有包含该周,则不定义
dayf
dayt