[英]Why am I getting this KeyError?
我正在嘗試編寫一個 function ,它使用 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)
Output:
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: ' '
幫忙解決這個? 到底是怎么回事?
你有向后的鍵和值。 您將分數用作字典中的鍵,將字母字符串用作值。 此外,您沒有在輸入值上使用strip()
,因此您正在處理偶然的空格而不是單獨的字母字符。
你有一個字符串到字符串的字典。 最好為 integer 值創建一個 map,如 String/Character,如下所示。 為簡單起見,我正在使用您的 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
希望這可以幫助!
您正在嘗試查找空格作為字典鍵。 清理並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,
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.