2014-09-30 76 views
-1

在Python中,是否有一個更優雅的解決方案,以下嵌套else-if鏈?優雅的解決方案,以嵌套的else-if鏈

if interval == 1: 
    a += 1 
else: 
    if interval == 2: 
     b += 1 
    else: 
     if interval == 3: 
      c += 1 
     else: 
      if interval == 4: 
       d += 1 
      else: 
       if interval == 5: 
        e += 1 
       else: 
        if interval == 6: 
         f += 1 
+1

使用'elif',不'else' ... – 2014-09-30 14:39:12

回答

2
if interval == 1: 
    a += 1 
elif interval == 2: 
    b += 1 
elif interval == 3: 
    c += 1 
elif interval == 4: 
    d += 1 
elif interval == 5: 
    e += 1 
elif interval == 6: 
    f += 1 

當然,如果你可以提取a .. f到字典中,如:

state = {"a": 0, "b": 0, "c": 0, "d": 0, "e": 0, "f": 0} 

你可以做

interval_to_state = {1: "a", 2: "b", 3: "c", 4: "d", 5: "e", 6: "f"} 
state[interval_to_state[interval]] += 1 
1

使用list,而不是多個變量:

#   a b c d e f # Index 0 are unused. 
acc = [0, 0, 0, 0, 0, 0, 0] # OR [0] * 7 
if 1 <= interval <= 7: 
    acc[interval] += 1 
    # OR acc[interval - 1] += 1 
    # If you don't want to waste a slot in the list. 
+1

或者'ACC [間隔 - 1] + = 1' ? – thefourtheye 2014-09-30 14:42:31

+0

@thefourtheye,我在代碼中添加了一條評論來提及它。謝謝。 – falsetru 2014-09-30 14:49:54

0

我會建議使用一本字典,與反向查找,這樣

values = {name: 0 for name in "abcdef"} 
indexes = {idx: name for idx, name in enumerate("abcdef", 1)} 
values[indexes[interval]] += 1 
+2

注意'dict.fromkeys(「abcdef」,0)' – Veedrac 2014-09-30 14:42:45

+1

@Veedrac是,但我覺得理解比'fromkeys'更可讀 – thefourtheye 2014-09-30 14:43:33