Python 为什么我会遇到这个关键错误?

Python 为什么我会遇到这个关键错误?,python,dictionary,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("

我正在尝试编写一个函数,它使用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: ' '
回溯(最近一次呼叫最后一次):
文件“C:/Users/Bola42/Downloads/isaahslab13dictionary.py”,第65行,在
紧急停车位(西)
文件“C:/Users/Bola42/Downloads/isaahslab13dictionary.py”,第58行,scrab格式
tot=tot+d[键]
密钥错误:“”

帮帮忙?发生了什么事?

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

您有一个字符串到字符串的dict。最好创建一个类似于映射的字符串/字符,并将其转换为如下所示的整数值。为了简单起见,我使用您的dict
d

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

希望这有帮助

您正在尝试查找空白作为字典键。 清理并去除用户输入中的空白


还有一个问题;您正在迭代抛出一个字符串并在字典键中查找每个字母。但是你的字典有数字键。 尝试使用以下形式的词典:

拼字字母值={
“A”:1,
“B”:3,
“C”:3,
“D”:2,
“E”:1,
“F”:4,
“G”:2,
“H”:4,
"一":,
“J”:8,
“K”:5,
“L”:1,
“M”:3,
“N”:1,
“O”:1,
“P”:3,
“问题”:10,
“R”:1,
“S”:1,
“T”:1,
“U”:1,
“V”:4,
“W”:4,
“X”:8,
“Y”:4,
“Z”:10,
}

让我们知道是什么输入导致了错误?“紧急停堆”功能也不清楚?你能详细解释一下为什么你需要一个循环吗?在标题中要有更多的描述性,写一个标题来总结具体的问题。另外,更好地介绍这个问题和最少的示例也会有所帮助。