python - 多次调用类中的方法,变量保持一致
问题描述
为 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())
解决方案
您的问题与变量的范围无关,masked_word
而是您在每次猜测时都销毁并重新创建它。一个可能的解决方案可能是:
_
在初始化时用 s 预填充变量:
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_
推荐阅读
- opengl-es - 什么是 OpenGL 和 WebGL2 中的顶点数组?
- c# - 插入电子邮件时出错
我正在尝试将表格插入电子邮件。我在 6 行代码中出现以下错误(以“body”开头,结尾 onavgErrorOutStDev +=“/table”)。错误是:
“赋值的左侧必须是变量、属性或索引器”。
<table>
开始是在创建/发送电子邮件之前执行的方法。如何修复错误?MailMessage
- bash - Makefile:特定于目标的变量总是被解析
- notepad++ - Notepad ++ 删除每 150 个字符后的回车和广告新行
- python - numba 不并行化范围
- vba - “行句柄无效”错误、Excel、VBA、SharePoint 列表自动化
- python - 单元测试:断言异常处理函数调用
- android - 如何将 AnimationDrawable 保存为 GIF?
- facebook - FB Messenger 机器人链接不会将用户重定向到 Messenger
- azure - Azure EventGrid 验证 URL