我正在做这个挑战,我的任务是编写一个刽子手游戏 - 我应该减少一组单词的范围。游戏规则规定你有 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
来自javascript
或java
, word_set.remove(word[i])
将失败,因为该集合将不再包含该字母。
为了防止错误,请尝试使用:
word_set.discard(word[i])
反而。在这种情况下,如果存在该字母,则将其删除;如果不存在,则不会引发异常。
关于python - 我不明白这个KeyError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61005599/