【问题标题】:Switch dictionary in Python not converting int and str correctly在 Python 中切换字典未正确转换 int 和 str
【发布时间】:2016-06-07 01:36:42
【问题描述】:

继上一个问题之后,我编写了一个 switch 字典来替换函数中的 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)

我不确定如何解决这个问题,因为我不太了解代码是如何转换字符串的。我的函数是否需要整数而不是接收字符串?

谢谢!

【问题讨论】:

  • 使用应该重命名你的变量太多 'a' 和 'b' ,给他们上下文。

标签: python dictionary switch-statement


【解决方案1】:

试试这个:

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

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

【讨论】:

  • 谢谢!!这行得通。所以我的错误是我有太多名为 a 和 b 的变量,并且它们相互覆盖?
【解决方案2】:

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

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

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

a = f(a)

b = g(b)

【讨论】:

  • 打印 a 和 b 将用户输入作为字母 (C = C) 提供给我,因此该函数没有将用户输入正确地写入整数(即 C = 0)。您能解释一下如何在变量中接收返回值吗?我不太明白。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 2017-10-16
  • 2015-09-14
  • 2020-11-12
相关资源
最近更新 更多