我需要获取存储在变量中的键的值。变量的值有所不同,输出模式应据此而变化。请检查下面的代码,我似乎没有得到输出。仅当我可以传递给定键的值时,我才能得到它们。如果您指出此程序中的任何其他错误,将是很好的,因为我对此很陌生。谢谢:)
self = {
"1" : None,
"0" : "",
"2" : "abc",
"3" : "def",
"4" : "ghi",
"5" : "jkl",
"6" : "mno",
"7" : "pqrs",
"8" : "uvw",
"9" : "wxyz"
}
def rec(rest_of_no, path):
if not rest_of_no:
combinations.add(path)
return
first, rest = rest_of_no[0], rest_of_no[1:]
letters = self.get[int(first)]
for letter in letters:
rec(rest_of_no, path)
return combinations
t = int(input())
for i in range(t):
n = int(input())
ar = list(map(int, input().split()))
combinations = set()
rec(ar, "")
print (combinations)
这是我得到的错误:
Runtime Error:
Runtime ErrorTraceback (most recent call last):
File "/home/66ec1f75836d265709dd36b77f69f071.py", line 30, in <module>
rec(ar, "")
File "/home/66ec1f75836d265709dd36b77f69f071.py", line 19, in rec
letters=self[int(first)]
KeyError: 2
答案 0 :(得分:1)
您的代码有很多不足。首先,为什么要完全使用eval
?
letters = self.get(first)
# will do just fine instead of
letters = self.get(eval('first'))
第二,您的self
字典的键(对于不是传递给方法的实例的随机变量来说确实是个坏名字)是字符串。但是ar
包含整数,这就是first
是int
且self.get(first)
返回None
的原因。
此外,正如AndrejKesely指出的那样:
if not rec:
# should probably be
if not rest_of_no:
使用相同参数的递归调用将导致无限递归,而return rec
返回的函数对象可能不是您想要的。仍然需要大量调试;)