你現在遇到的主要問題是雙重的 - 一個,那替換()方法替換字符串,而不是第一個中的任何給定輸入的所有實例,和兩個,你做不目前有任何方法可以告訴你已經發現了哪些字母。調用替換(「_」,讓)永遠取代「_」的每一個實例,因爲你申請的是一個字符串,只有下劃線組成,它會始終覆蓋整個字符串。好像你還再生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