我正在编写一个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()
答案 0 :(得分:2)
由于您只处理单词,这意味着输入通常很短,因此hidedWord
中constructor
不需要附加属性,只要需要此值,您就可以调用{ {1}}。
但是,如果您要处理较长的输入(例如长句子甚至是文本),则最好只调用一次self.hide_word()
并拥有一个属性来保存其值,因为每次调用该函数都会降低您的速度游戏。