python-2.x - 关于如何更新刽子手游戏字符串的更好主意
问题描述
我正在尝试在 python 2 中制作一个刽子手游戏,我相信我试图存储用户知道的关于这个词的信息的方式(例如,如果他们猜到了“v”和“a”以及letter 是茄子,我所指的“信息”是用户会看到的“-----a--”)。所以,我的问题如下:存储一个可变变量的更有效方法是什么,该变量可以像我希望的那样轻松更新?
secret_word = 'tracy'
dashes = ""
def get_guess():
while True:
guess = input("Guess: ")
if len(guess) != 1:
print "Your guess must be exactly one character!"
elif not guess.islower():
print "Your guess must be a lowercase letter!"
else:
break
return guess
def update_dashes(secret_word, dashes, guess):
for letter in secret_word:
if letter == guess:
dashes += guess
else:
dashes += "-"
return dashes
while True:
if guess in secret_word:
print "That letter is in the secret word!"
dashes = update_dashes(secret_word, dashes, get_guess())
else:
print "That letter is not in the secret word!"
需要更新的部分很可能是update_dashes
函数。任何帮助,将不胜感激。
解决方案
与其将游戏状态存储在表单字符串中,不如--a--
考虑使用列表。列表中的每个条目都可以代表一个字母及其状态。在下面的示例中,布尔值列表用于存储是否已显示秘密单词中的每个字母。
secret_word = 'tracy'
revealed_letters = [False] * len(secret_word) # all letters start off as not revealed
def make_guess(guessed_letter):
any_letter_revealed = False
for i in range(len(secret_word)):
secret_letter = secret_word[i]
if secret_letter == guessed_letter:
any_letter_revealed = True
revealed_letters[i] = True
return any_letter_revealed
def get_hidden_word():
return ''.join([secret_word[i] if revealed_letters[i] else '-' for i in range(len(secret_word))])
while True:
print(get_hidden_word())
guess = raw_input("Guess a letter: ")
if make_guess(guess):
print("That letter is in the secret word!")
else:
print("That letter is not in the secret word.")
if all(revealed_letters):
print("You win! The secret word was:")
print(secret_word)
break
推荐阅读
- recursion - MIPS 在哪里将递归调用放在回文问题中
- arrays - 试图从角度数组中获取唯一的对象列表
- postgresql - 如何将 900MB 的 csv 文件从网站上传到 postgresql
- python - 输入超出范围的数字时,python 没有给我正确的答案
- java - 基于主要选项的 Picocli 所需选项选择
- python - Python中的Z3计数器变量数组
- c - 添加元素链表
- javascript - 如何在反应中使用带有 cytoscape 的变量输入来更改节点的颜色
- javascript - Array to Newline String 通过 HTML 再次到 Array
- mysql - 从左表中选择连接时未出现在右表中的行