将列表分配给构造函数

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

我正在编写一个Hangman游戏,为此我创建了下面的类。

其中一种方法是用*符号隐藏单词并显示被猜出的字母。

为此,我在方法def hide_word(self)中创建了一个列表,并在constructor中对其进行了调用,以通过方法print_game_status(self)在板上显示隐藏的单词。

我想知道上面标记的行是否有效或不正确。

PS:有些行未完成。

# Class
class Hangman:

    # Constructor
    def __init__(self, word):
        self.word = word
        self.hidedWord = self.hide_word() # <-- This is valid or is a bad practice?

    # Method to guess the letter
    def guess(self, letter):
        if letter in self.word:
            correctLetters.append(letter)
            self.hidedWord[1] = 'Y' # <-- This only a test, at first it works
        else:
            wrongLetters.append(letter)

    # Method to check if game is over
    # def hangman_over(self):

    # Method to check if the player won
    # def hangman_won(self):

    # Method to hide the letter on the board
    def hide_word(self):
        return ['*' for x in self.word]

    # Method to check the status game and print the board on the screen
    def print_game_status(self):
     print(board[0])
     print(*self.hidedWord)
     print('Wrong letters: ' + ', '.join(wrongLetters))
     print('Correct letters: ' + ', '.join(correctLetters))

# Function to read a word randomly from the word bank
def rand_word():
    with open('palavras.txt', 'rt') as f:
        bank = f.readlines()
    return bank[random.randint(0, bank.index(max(bank)))].strip()

# Main function
def main():
    # Object
    game = Hangman(rand_word())

    # While the game is not over, print the status, request a letter and read caracter
    while(exit != True):
        # Check the status game
        game.print_game_status()

        # Input from user
        inputUser = input('Type a letter: ')
        game.guess(inputUser)

    # According to the game status, print the message on screen to user
    # if game.hangman_won():
    #  print('\nCongratulations! You won!!!')
    # else:
    # print('\nGame over! You lost.')
    # print('The word was {}'.format(game.word))

    # print('\nIt was good to play with you. But now go study!\n')


# Run program
if __name__ == '__main__':
    main()

python python-3.x list oop python-requests
1个回答
0
投票

因为您只处理单词,这意味着输入通常很短,所以在hidedWord中不需要为constructor附加属性,只要需要此值,您就可以调用self.hide_word()

但是,如果您要处理较长的输入,例如长句子甚至是文本,则最好只调用一次self.hide_word()并拥有一个属性来保留其值,因为每次调用该函数都会减慢游戏速度。

© www.soinside.com 2019 - 2024. All rights reserved.