2016-11-11 64 views
0

我试图得到一个函数,在hangman程序中将正确的猜测置于其空白处,但它所做的只是无论猜测是什么,无论它是对还是错,它都会逐渐揭示这个词。我哪里错了?我的hang子手程序出了什么问题?

代码:

while lettersrevealed!=word: 
    guess=getGuess(lettersrevealed) 
    for i in range(len(word)): 
     if guess in word: 
      blanks = blanks[:i] + word[i] + blanks[i+1:] 
      print(blanks) 

例如: (秘字是獾)

Guess a letter: 
a 
b***** 
ba**** 
bad*** 
badg** 
badge* 
badger 
Guess a letter: 
OR: 
Guess a letter: 
h 
b***** 
ba**** 
bad*** 
badg** 
badge* 
badger 
Guess a letter: 
+0

'guess'的值是什么?我猜想它不包含你认为它包含的内容。同样,如果你的第一个例子中'if'a'in'badger',对于'word'中的每个单个字符都是如此 - 如果guess == word [i]'会更好。 –

回答

0

的问题是在for循环

for i in range(len(word)): # This will run 6 times for "badger" | 0, 1, .., 5 
    if guess in word: 
# blanks == ****** then gradually gets the next letter added replacing a * 
     blanks = blanks[:i] + word[i] + blanks[i+1:] 
     print(blanks) 

您可能希望这样的事情。

def convert_to_blanks(word, letters): 
    return ''.join(c if c in letters else '*' for c in word) 

>>> word = 'badger' 
>>> letters = set() 
>>> convert_to_blanks(word, letters) 
'******' 
>>> letters.add('g') 
>>> letters 
{'g'} 
>>> convert_to_blanks(word, letters) 
'***g**' 

所以你有一个while循环提示字母这样的事情。

guessed = set() 
word = 'badger' 
while True: 
    guess = input("Guess a letter") 
    guessed.add(guess) 
    blanks = convert_to_blanks(word, guessed) 
    print(blanks) 
    if blanks == word: 
     break