多次调用类中的方法,并且变量保持一致

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

为Python编写一个hangman程序,并希望变量(self.masked_word)保持一致,因为我多次调用该方法...

例如,如果密码是“你好”,我在玩:

game.guess('h'),然后game.guess('l'),game.get_masked_word()应该返回:'h_ll _'...

[目前,同时播放这两个字只会返回猜中的最后一个字母...'__ ll_'。

已经尝试将self.masked_word从init移到guess(),我只是误解了如何创建在类内持久存在的非静态变量。谢谢

STATUS_WIN = "win"
STATUS_LOSE = "lose"
STATUS_ONGOING = "ongoing"

class Hangman(object):
    def __init__(self, secret_word):
        self.secret_word = secret_word
        self.status = STATUS_ONGOING
        self.remaining_guesses = 9
        self.masked_word = ''

    def guess(self, guess):
        if self.secret_word.find(guess) >= 0:
            self.masked_word = list(map(lambda n: '_' if n != guess else n, self.secret_word))
        else:
            self.remaining_guesses -= 1

        if self.remaining_guesses < 0:
            self.status = STATUS_LOSE
            raise Exception("Vous avez déjà perdu!")
            return ("You lose! :(")
        elif guess is '' or guess is None:
            return (f"You have {self.remaining_guesses} guesses left. Répondez cette fois avec un lettre.")
        else:
            return (f"You have {self.remaining_guesses} guesses left.")

    def remaining_guesses(self):
        return self.remaining_guesses

    def get_masked_word(self):
        return ''.join(self.masked_word)

    def get_status(self):
        return self.status

game = Hangman('hello')
print(game.guess('h'))
print(game.guess('l'))
print(game.get_masked_word())

python
1个回答
0
投票

您的问题与变量masked_word的范围无关,但是您每次猜测都会销毁并重新创建它。可能的解决方案可能是:

在初始化时用_填充变量:

def __init__(self, secret_word):
    ...
    self.masked_word = ['_' for _ in secret_word]

然后仅显示此回合中猜出的字母:

def guess(self, guess):
    if self.secret_word.find(guess) >= 0:
        for i, letter in enumerate(self.secret_word):
            if letter == guess:
                self.masked_word[i] = letter
    else:
        self.remaining_guesses -= 1

这将导致:

You have 9 guesses left.
h_ll_
© www.soinside.com 2019 - 2024. All rights reserved.