简单的基于文本的Python字谜游戏

0 投票
1 回答
2306 浏览
提问于 2025-04-16 14:44

我正在用Python做一个简单的文字版猜单词游戏(也叫“吊死鬼”)。我已经有了一个大致的程序,但遇到了两个小问题:

  1. 为什么欢迎信息会打印两次?

  2. 当用户连续两次输入一个不在单词里的字母时,第二次的时候,"不对,再试一次"的提示没有显示,当前的单词也没有显示。第一次输入错误字母时是正常的,为什么第二次就不行了呢?


from random import randrange

class HangmanApp:

    def __init__(self, interface):

        self.infile = open("hangman.txt", "r")
        self.interface = textInterface()

        for line in self.infile:
            self.wordlist = line.split()
        self.secretword = self.wordlist[randrange(len(self.wordlist))]

        self.letter_list = list(self.secretword)



    #tests the user's guess

    def guess(self):

        self.new_list = ["_"]*len(self.secretword)

        #keep loop going as long as there are letters in the list
        while self.letter_list != ["_"]*len(self.letter_list):                

            self.guess = self.interface.guess()

            if self.guess in self.letter_list:

                while self.guess in self.letter_list:

                    i = self.letter_list.index(self.guess)

                    #replace that letter from the list with "_" 
                    self.letter_list[self.letter_list.index(self.guess)] = "_"

                    #add the chosen letter to a new list for display
                    self.new_list[i] = self.guess                                   

                    #print list with letter added
                    self.interface.correct(self.new_list)                           

            else:

                self.interface.incorrect(self.new_list)

                self.guess = self.interface.guess()

class textInterface:

    def __init__(self):
        print("Welcome to Hangman!")

    def guess(self):
        guess = input("Guess a letter! ")
        return guess

    def display (self, word):
        string = ' '.join(word)
        print(string)

    def incorrect(self, word):
        print("Nope, try again")
        self.display(word)

    def correct(self, word):
        print("Correct")
        self.display(word)


    def main():
        inter = textInterface()
        app = HangmanApp(inter)
        app.guess()

1 个回答

0

欢迎信息打印了两次,因为你创建了两个 textInterface 的实例:一个是在 main() 函数里,另一个是在 HangmanApp.__init__() 里。我想你应该是想这样做:

self.interface = interface

而不是

self.interface = textInterface()

HangmanApp.guess() 函数里,当你收到一个错误的猜测(也就是进入了 else: 这个部分)时,你有一个多余的 guess 提示,这个提示是不必要的——它没有经过你的检查代码。我觉得这可能是导致它第二次不工作的原因。

撰写回答