2016-07-06 20 views
2

我有一个“Z”和“N”值的列表,并试图根据与它们相关的标志完成对它们的简单算术(加法和/或减法)。例如:python3.x - 基于整数标志的选择性算术

Z = 10 
N = 10 
flag = 2 

凡2为“标志”的值将导致:

Z += 1 
N -= 1 

在过去,对标志(即,列表)的多个值,我已经定义的功能,例如如:

def(Z,N,flag): 
    if flag==0: 
     pass 
    elif flag==1: 
     Z+=2; N-=1 
    elif flag==2: 
     Z+=1; N-=1 
    elif flag==3: 
     Z-=2;N-=2 
    return(Z,N) 

然而,这可以成为相当麻烦的,如果可能的标记数量很大(的吨中频... elif的...语句)和Z的数量,N组合我通过需要循环高。有没有人知道更好,更有效的方式去实现这个逻辑?我曾与创建字典像dict={'0':pass; '1': [Z+=2;N-=1],...},但很快就意识到,这是行不通的涉猎....

+1

'{0:无,1:(2,-1),2:(1,-1),...}'?你不能在一本字典中存储语句('传递',赋值,...),但字典仍然是一条路。 – jonrsharpe

+0

@jonrsharpe哦很酷。这很好。谢谢! – Tony

回答

1

要建立在@ jonrsharpe的评论:

def apply_operation(Z, N, flag): 
    flag_operations = { 
     0: None, 
     1: (2, -1), 
     2: (1, -1), 
     3: (2, 2) 
    } 

    Z += flag_operations[flag][0] 
    N += flag_operations[flag][1] 

    return (Z, N) 

Z = 10 
N = 10 
flag = 2 

Znew, Nnew = apply_operation(Z, N, flag) 

print('Z:', Znew, '\tN:', Nnew) 
# Z: 11  N: 9 
1

因为你的旗帜正在运行有序,你可以使用简单的列表。它不易读,但更紧凑。

flags_op = [[0, 0], [2, -1], [1, -1], [2, 2]] 
z, n = map(add, [z, n], flags_op[flag])