You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Tkinter猜单词游戏重复接受已猜对的字母?

解决重复猜字母被惩罚的问题

你的代码核心问题是:不管字母有没有被猜过,都会执行后续的对错判断逻辑,导致重复猜已猜字母时,若该字母不在目标单词里会被误扣次数。要实现重复猜已猜字母无惩罚,只需在处理前先检查字母是否已被猜过即可。

修改后的代码

def guess_letter(self, event=None):
    guess = self.entry.get().lower()
    self.entry.delete(0, tk.END)

    # 验证输入格式
    if not guess or len(guess) != 1 or not guess.isalpha():
        return

    # 如果字母已经被猜过,直接结束函数,不做任何处理
    if guess in self.guessed_letters:
        return

    # 只有未猜过的字母才加入已猜集合
    self.guessed_letters.add(guess)
    self.guessed_label.config(text="Guessed Letters: " + ", ".join(sorted(self.guessed_letters)))

    if guess in self.word:
        for i, letter in enumerate(self.word):
            if letter == guess:
                self.display_word[i] = guess
        self.word_label.config(text=" ".join(self.display_word))
    else:
        self.tries_left -= 1
        self.draw_hangman()

    if "_" not in self.display_word:
        messagebox.showinfo("Hangman", "You won!")
        self.master.quit()
    elif self.tries_left == 0:
        messagebox.showinfo("Hangman", f"You lost! The word was: {''.join(self.word)}")
        self.master.quit()

修改说明

  • 在输入格式验证通过后,先判断guess是否已经在self.guessed_letters集合中:如果是,直接return终止函数,跳过后续所有逻辑,自然不会产生惩罚
  • 将self.guessed_letters.add(guess)移到这个判断之后,确保只有真正新的猜测才会被记录到已猜字母列表里

内容的提问来源于stack exchange,提问作者Welsworth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:04:57