簡體   English   中英

為什么我會收到此 KeyError?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM