python - 我不明白这个KeyError?

标签 python set keyerror

我正在做这个挑战,我的任务是编写一个刽子手游戏 - 我应该减少一组单词的范围。游戏规则规定你有 8 次尝试,否则你猜如果用户多次输入同一个字母,则会弹出一条消息,表明他已经这样做了 - 我已经使用集合作为处理游戏这一部分的方法。下面是我的代码:


word_list = ["python", "java", "kotlin", "javascript"]
word = random.choice(word_list)
word_set = set(word)

hidden = []
for i in word:
    hidden.append("-")
# print(hidden)


print("H A N G M A N")

count = 0
while(count < 8):
    print()
    print("".join(hidden))
    guess = input("Input a letter: ")
    if guess in word:
        if guess not in word_set:
            print("No improvements")
            count += 1
        else:
            for i in range(len(word)):
                if word[i] == guess:
                    print(word_set)
                    word_set.remove(word[i])
                    hidden[i] = word[i]
                    if word_set == set():
                        print()
                        print(word)
                        print("You guessed the word!")
                        print("You survived!")
    else:
        print("No such letter in the word")
        count += 1

print("You are hanged!")

我面临的主要问题是一个错误,告诉我“a”并且只有“a”是一个关键错误,如下所示:Traceback (most recent call last): File "/Users/laipinhoong/Desktop/learnpython.py/learning.py", line 29, in <module> word_set.remove(word[i]) KeyError: 'a'

最佳答案

当所选单词多次出现相同的字母时,就会出现问题。在这种情况下,由于您迭代了单词 ( for i in range(len(word)) ) 中的所有字母,您将尝试从集合 word_set 中多次删除该单词。 (只要这个字母出现在单词中)但是word_set由于套装是独一无二的收藏,因此这封信只会出现一次。所以在第二次尝试删除a来自javascriptjava , word_set.remove(word[i])将失败,因为该集合将不再包含该字母。

为了防止错误,请尝试使用: word_set.discard(word[i])反而。在这种情况下,如果存在该字母,则将其删除;如果不存在,则不会引发异常。

关于python - 我不明白这个KeyError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61005599/

相关文章:

python - 从Google Play商店应用网站中提取评论

python - 包含字典、文本、日期时间和整数的 JSON 转储大列表给出 "TypeError: ' str' 不支持缓冲区接口(interface)"

python - Django IntegrityError 与 DateTimeField

处理集合问题的C程序

php - 使用 php 更新和搜索 mysql 集

python - Pandas 错误 : __setitem__() doesnt recognize dictionary values as a list of column names

python - 使用 TLS 和 Python 进行身份验证

c++ - 在 std set/map 中使用 double 作为键的方法

python - 简单 Flask python 后端中 POST 方法的 KeyError

python - 我的代码给出的 Key error beyond a limit