你现在遇到的主要问题是双重的 - 一个,那替换()方法替换字符串,而不是第一个中的任何给定输入的所有实例,和两个,你做不目前有任何方法可以告诉你已经发现了哪些字母。调用替换(“_”,让)永远取代“_”的每一个实例,因为你申请的是一个字符串,只有下划线组成,它会始终覆盖整个字符串。好像你还再生hidden_let每次刽子手()被调用带猜字母,意思就是最好的情况与您的设计,现在你只打算永远显示每一封信用户只需猜测和一堆下划线的,否则。
你想要做的是有两个值,correct_word和current_guess。 correct_word将是玩家必须猜测的单词,current_guess将是他们猜测单词的进度,从与correct_word相同长度的唯一下划线开始。
这里有一个简单的例子。我冒昧地删除了你的全局引用 - 全局变量通常被忽略 - 并将行为封装在一个小类中。你想用hangmanner.play_hangman()中的值替换你的随机单词。
class Hangmanner:
correct_word = ''
current_guess = ''
def play_hangman(self, word):
self.correct_word = word
self.current_guess = '_' * len(self.correct_word)
while self.current_guess != self.correct_word:
self.guess_letter(input("Please guess a letter: "))
def guess_letter(self, guessed_letter):
for i in range(len(self.correct_word)):
if self.correct_word[i] == guessed_letter:
if i == 0:
self.current_guess = self.correct_word[i] + self.current_guess[1:]
else:
self.current_guess = self.current_guess[:i] + self.correct_word[i] + self.current_guess[i + 1:]
print(self.current_guess)
if __name__ == "__main__":
hangmanner = Hangmanner()
hangmanner.play_hangman("test")
这使用切割功能的蟒蛇,在那里你可以使用括号和[第一:去年]语法访问任何收集的任意范围。如果缺少第一个或最后一个,则切片分别继续到集合的开始或结束。以上,current_guess [1:]将current_guess从第二个索引返回到最后一个索引。 current_guess [:i]返回current_guess从第一个索引到i之前的索引,因为last是唯一的结束边界。
您不能直接使用'replace'函数;你也需要切片。看到这里:http://stackoverflow.com/questions/12723751/replacing-letter-in-string-by-index – 101 2014-10-29 02:57:01
不知道为什么这个问题downvoted。 OP试图解决他/她自己的问题,清楚地描述他被困在哪里以及他所尝试的是什么。作为第一篇文章,这非常好。我正在投票。 – 2014-10-29 20:21:30