2016-06-07 40 views
1

从前面的问题开始,我写了一个switch字典来替换函数中的switch语句。在收到用户输入后,我已经将这个字典放在了def f(x)下面,像这样。然后函数应该将字典中匹配的任何内容写入'a'和'b',所以它可以在add()函数中使用。在Python中切换字典不能正确转换int和str

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) 

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

谢谢!

+1

使用应该重命名变量太多 '一' 和“b ',给他们上下文。 – Merlin

回答

1

试试这个:

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

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

谢谢!这工作。所以我的错误是,我有太多的变量称为a和b,他们互相覆盖? – AlexC

+0

/@ AlexC正好! – Merlin

1

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

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

为什么你没有收到变量中的返回值?

A = F(一)

B =克(B)

+0

打印a和b使用户输入为字母(C = C),因此该函数不会将用户输入正确写入为整数(即​​C = 0)。你能解释我怎样才能收到变量中的返回值?我不太明白。 – AlexC