为什么会收到此KeyError?

时间:2019-10-29 06:44:18

标签: python dictionary

我正在尝试编写一个使用Python词典计算英语单词的拼字得分的函数。我快到了,但是我不断收到烦人的错误:

代码如下:

d = {"0":'blank',
     "1":'A, E, I, L, N, O, R, S, T, U',
     "2":'D, G',
     "3":'B, C, M, P',
     "4":'F, H, V, W, Y',
     "5":'K',
     "8":'J, X',
     "10":'Q, Z',}


w = input("enter a word")

def scrab(w):  #define function
    tot = 0
    w.upper()
    for key in w:
       tot = tot + d[key]

    return tot




scrab(w)

print(tot, w)

输出:

Traceback (most recent call last):
  File "C:/Users/Bola42/Downloads/IsaiahSLab13Dictionary.py", line 65, in <module>
    scrab(w)
  File "C:/Users/Bola42/Downloads/IsaiahSLab13Dictionary.py", line 58, in scrab
    tot = tot + d[key]
KeyError: ' '

对此有帮助吗?发生了什么事?

3 个答案:

答案 0 :(得分:1)

您将键和值向后移动。您将分数用作字典中的键,并将字母字符串用作值。另外,您没有在输入值上使用strip(),因此您正在处理附带的空格,而不是仅处理字母字符。

答案 1 :(得分:0)

您有一个从String到String的字典。最好将类似于String / Character的映射创建为如下所示的整数值。为简单起见,我将您的字典wmap = {} for key, val in d.items(): for val in val.split(", "): newKey = val.strip() wmap[newKey] = int(key) 用于相同目的:

{'blank': 0,
 'A': 1,
 'E': 1,
 'I': 1,
 'L': 1,
 'N': 1,
 'O': 1,
 'R': 1,
 'S': 1,
 'T': 1,
 'U': 1,
 'D': 2,
 'G': 2,
 'B': 3,
 'C': 3,
 'M': 3,
 'P': 3,
 'F': 4,
 'H': 4,
 'V': 4,
 'W': 4,
 'Y': 4,
 'K': 5,
 'J': 8,
 'X': 8,
 'Q': 10,
 'Z': 10}

这将创建以下内容:

scrab()

更新def scrab(w): tot = 0 w = w.upper() for key in w: print(key) tot = tot + wmap[str(key)] return tot 如下:

{{1}}

希望这会有所帮助!

答案 2 :(得分:0)

您正在尝试寻找空白作为字典键。 清除用户输入中的strip空格。


还有另一个问题;您要反复抛出一个字符串,然后在字典键中查找每个字母。但是您的字典有数字键。 尝试使用以下形式的字典:

SCRABBLE_LETTERS_VALUE = {
    "A": 1,
    "B": 3,
    "C": 3,
    "D": 2,
    "E": 1,
    "F": 4,
    "G": 2,
    "H": 4,
    "I": 1,
    "J": 8,
    "K": 5,
    "L": 1,
    "M": 3,
    "N": 1,
    "O": 1,
    "P": 3,
    "Q": 10,
    "R": 1,
    "S": 1,
    "T": 1,
    "U": 1,
    "V": 4,
    "W": 4,
    "X": 8,
    "Y": 4,
    "Z": 10,
}