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
。