这些类似的if语句如何写得更简洁呢?

How can these similar if statements be written more concisely?

这是 python 处理模式的代码片段。这段代码的目的是在按下一个键时更新一个变量。 Processing 有一个名为 keyPressed 的变量,如果按下某个键则该变量为 True。按下的键的标识以字符串形式保存在名为 key 的变量中。

 if keyPressed:
         if key == "a":
            a += 0.1
        elif key == "s":
            a -= 0.1
        elif key == "q":
            q += 1
        elif key == "w":
            q -= 1
        elif key == "z":
            z += 3
        elif key == "x":
            z -= 3

这是最好的写法,还是有更好的写法?如果不是,如果有 100 个键,每个键都有不同的变量要调整怎么办?

没有办法绕过第一个 if 语句,但您可以用字典替换第二个 if 语句。

而加减法的区别就是对数取反

ops = {'a': (a, 0.1),
       's': (a, -0.1),
       'q': (q, 1),
       'w': (q, -1),
       'z': (z, 3),
       'x': (z, -3)}

if keyPressed:
    var, amount = ops[key]
    var += amount

挑战在于 if 决定要更新哪个变量以及要添加到变量的值。可以通过 global() 命名空间调用按名称动态访问全局变量。我注意到一个键更新了一个同名变量,然后下一个键将同一个变量递减相同的量。因此,每个变量有 3 条信息。您可以将其放入列表(或元组)中,然后构建一个字典,告诉您每次按键时要执行的操作。

# var key, negated var key, value triplets
key_db = (("a", "s", .1), ("q", "w", 1), ("z", "x", 3))
key_index = {}
for var, nvar, val in key_db:
    key_index[var] = (var, val)
    key_index[nvar] = (var, -val)
    
if key_pressed:
    try:
        var, val = key_index[key]
        globals()[var] = globals().get(var, 0) + val
    except KeyError:
        pass