在Python中切换字典不能正确转换int和str

时间:2016-06-07 01:36:43

标签: python dictionary switch-statement

从上一个问题开始,我编写了一个切换字典来替换函数中的switch语句。我收到用户输入后,我把这个字典放在def f(x)下面,就像这样。然后函数应该将字典中匹配的内容写入'a'和'b',这样它就可以在add()函数中使用。

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

    def f(x):
        notes = {
            'C': 0,
            'Cs': 1,
            'D': 2,
            'Ds': 3,
            'E': 4,
            'F':5,
            'Fs': 6,
            'G': 7,
            'Gs': 8,
            'A': 9,
            'As': 10,
            'B': 11,
            }
        return = notes[x]


    def g(x):
        intervals = {
            'm2': 1,
            'mj2': 2,
            'm3': 3,
            'mj3': 4,
            'p4': 5,
            'T': 6,
            'p5': 7,
            'm6': 8,
            'mj6': 9,
            'm7': 10,
            'mj7': 11,
            }
        return intervals[x]

    f (a)
    g (b)
    add(a, b)

但是我在这两行中得到'并非所有在字符串格式化期间转换的参数'错误:

add(a, b)

在我的脚本开头我定义了添加功能。

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

我不知道如何解决这个问题,因为我真的不明白代码是如何转换字符串的。我的函数是期望整数而是接收字符串吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

在调用add函数之前尝试打印a和b,看看它们的值是什么。

我的猜测是,switch函数内部的变量都在函数范围内,并没有改变函数之外的变量。

为什么不在变量中收到返回的值?

  

a = f(a)

     

b = g(b)

答案 1 :(得分:1)

试试这个:

def add(va,vb):
    print ((va), "+", (vb), "=", (va + vb) %12)

aa =  f(a)
bb =  g(b)
add(aa, bb)