建议在python 3中改进我的hangman游戏代码

问题描述 投票:0回答:2

我正在使用此代码编写使用python 3构建的子手游戏。

只要您的words.txt文件的脚本与脚本位于同一文件夹中,该代码就会正常工作,但是我需要一些改进建议。

有很多代码重复和要点,我可以编写出更好的代码,并且我在代码重构中苦苦挣扎。有任何意见和建议吗?

class Hangman(object):
    def __init__(self):
        self.secret_word = self.get_secret_word()
        self.correct_letters = []
        self.missed_letters = []
        self.error = 0

    def get_secret_word(self):
        from random import choice

        with open("words.txt") as f:
            wordsList = f.read().splitlines()
            secretWord = choice(wordsList).lower()
        return secretWord

    def read_player_input(self):
        self.inputChar = input("\nType a letter: ")

    def guess_letter(self):
        if (
            self.inputChar in self.secret_word
            and self.inputChar not in self.correct_letters
        ):
            self.correct_letters.append(self.inputChar)
            return True
        elif (
            self.inputChar not in self.secret_word
            and self.inputChar not in self.missed_letters
        ):
            self.missed_letters.append(self.inputChar)
            self.error += 1
            print(f"\nError {self.error}.")
            return False
        else:
            print("\nYou've already tried this letter.")
            return False

    def print_encoded_word(self):
        self.encoded_word = ""
        for letter in self.secret_word:
            if letter not in self.correct_letters:
                self.encoded_word += "_"
            else:
                self.encoded_word += letter
        print()
        print(self.encoded_word)

        print("\nCorrect letters: ", end="")
        for letter in self.correct_letters:
            print(letter + " ", end="")

        print("\nWrong letters: ", end="")
        for letter in self.missed_letters:
            print(letter + " ", end="")

    def game_continue(self):
        return set(self.correct_letters) != set(self.secret_word) and (self.error <= 3)

    def won_game(self):
        if set(self.correct_letters) == set(self.secret_word):
            print(self.secret_word)
            print("You win!")
        else:
            print(f"You lose. Secret word is {self.secret_word}")


def main():

    hangman = Hangman()

    hangman.print_encoded_word()
    hangman.read_player_input()
    hangman.guess_letter()

    while hangman.game_continue():
        hangman.print_encoded_word()
        hangman.read_player_input()
        hangman.guess_letter()

    hangman.won_game()


if __name__ == "__main__":
    main()
python refactoring
2个回答
0
投票

您能指定您想在游戏中做什么吗?期待为您服务。谢谢


0
投票

我建议使用main(),就像您将扩展代码并希望在程序运行时调用更多函数一样。另外,使用完后我将关闭文件(您可以查看为什么here)。

我在下面将要更改的功能上加上了注释“#”:

class Hangman(object):
    def get_secret_word(self):
        from random import choice

        with open("words.txt") as f:
            wordsList = f.read().splitlines()
            secretWord = choice(wordsList).lower()
            f.close()       #close the file
        return secretWord


    def print_encoded_word(self):
        self.encoded_word = ""
        for letter in self.secret_word:
            if letter not in self.correct_letters:
                self.encoded_word += "_"
            else:
                self.encoded_word += letter
        print()         #what is this print doing here?
        print(self.encoded_word)

        print("\nCorrect letters: ", end="")
        for letter in self.correct_letters:
            print(letter + " ", end="")

        print("\nWrong letters: ", end="")
        for letter in self.missed_letters:
            print(letter + " ", end="")

    def play():         #add this function
            hangman.print_encoded_word()
            hangman.read_player_input()
            hangman.guess_letter()

            while hangman.game_continue():
                hangman.print_encoded_word()
                hangman.read_player_input()
                hangman.guess_letter()

            hangman.won_game()

def main():     #remove stuff that is now in play()

    hangman = Hangman()
    hangman.play()  #add this
© www.soinside.com 2019 - 2024. All rights reserved.