编写字典来替换函数中的switch语句

时间:2016-06-07 00:03:15

标签: python dictionary switch-statement

我已经在Python 3中编写了一个用户输入的菜单,但要正确转换字符串,我必须手动写出if语句。

我需要将这一切都改为字典,以便在几个不同的函数中使用,将变量存储在一些函数中,将列表存储在另一个函数中。到目前为止,if语句看起来像这样。我只是粘贴了一个'但是' b'很相似。

while loop == 1:
choice = menu()
if choice == '1':
    a = str(input("Enter a note: "))
    b = str(input("Enter an interval: "))

    if a == "Bs" or a == "C": 
        a = 0
    elif a == "Cs" or a == "Db":
        a = 1
    elif a == "D":
        a = 2
    elif a == "Ds" or a == "Eb":
        a = 3
    elif a == "E":
        a = 4
    elif a == "Es" or a == "F":
        a = 5
    elif a == "Fs" or a == "Gb":
        a = 6
    elif a == "G":
        a = 7
    elif a == "Gs" or a == "Ab":
        a = 8
    elif a == "A":
        a = 9
    elif a == "As" or a == "Bb":
        a = 10
    elif a == "B" or a == "Cb":
        a = 11

这是我写过的add()函数。

def add(a,b):
print ((a), "+", (b), "=", (a + b) %12)

我认为我需要将所有这些变量存储在字典中的某个位置,并让函数检查它们而不是每次都在if语句中。我在Python中读过关于字典的转换语句但不明白。

def f(x):
return {
    'C': 0,
    'D': 2,
}[x]

这与普通词典的区别是什么?

notes = {'C' = '0': 'D' = '2'}

谢谢!

1 个答案:

答案 0 :(得分:1)

是普通字典。不同之处在于您的“switch”字典是带索引的内联常量。让我们稍微扩展一下:

def f(x):
    ref_dict = {
        'a': 1,
        'b': 2,
    }

    return_tone = ref_dict[x]
    return return_tone

你看到它是如何工作的吗?现在,用 ref_dict [x] 替换最后一行中的 return_tone ,并用常量字典值替换 ref_dict