我正在尝试编写一个使用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: ' '
对此有帮助吗?发生了什么事?
答案 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,
}