2016-02-19 70 views
0

我在这里是全新的,据我所知,没有人问我具体的问题。如果有人有,请随时与我联系。无论如何,我正在通过一本Python书籍(创建自己的电脑游戏)的发明,并试图完成“Hang子手”一章。我遇到的问题是,每当我输入一封信时,无论这个信是否正确,程序仍然会吸引Hang子手。我目前正在运行Python 3,这本书说它使用。这里是我的代码:Hang子手程序故障

import random 
HANGMANPICS = [''' 

+---+ 
| | 
    | 
    | 
    | 
    | 
===========''',''' 

+---+ 
| | 
O | 
    | 
    | 
    | 
===========''',''' 

+---+ 
| | 
O | 
| | 
    | 
    | 
===========''',''' 

+---+ 
| | 
O | 
/| | 
    | 
    | 
===========''',''' 

+---+ 
| | 
O | 
/|\ | 
    | 
    | 
===========''',''' 

+---+ 
| | 
O | 
/|\ | 
/ | 
    | 
===========''',''' 

+---+ 
| | 
O | 
/|\ | 
/\ | 
    | 
==========='''] 

words = 'ant baboon badger bat bear beaver camel cat clam cobra cougar \ 
coyote crow deer dog donkey duck eagle ferret fox frog goat goose hawk \ 
lion lizard llama mole monkey moose mouse mule newt otter owl panda parrot \ 
pigeon python rabbit ram rat raven rhino salmon seal shark sheep skunk sloth \ 
snake spider stork swan tiger toad trout turkey turtle weasel whale wolf wombat\ 
zebra'.split() 

def getRandomWord(wordList): 

    wordIndex = random.randint(0, len(wordList)- 1) 
    return wordList[wordIndex] 

def displayBoard(HANGMANPICS, missedLetters, correctLetters, secretWord): 
    print(HANGMANPICS[len(missedLetters)]) 
    print() 

    print('Missed letters:', end ='') 
    for letter in missedLetters: 
     print(letter, end = '') 
    print() 

    blanks = '_' * len(secretWord) 

    for i in range(len(secretWord)): 
     if secretWord[i] in correctLetters: 
      blanks = blanks[:i] + secretWord[i] + blanks[i+1:] 

    for letter in blanks: 
     print(letter, end = '') 
    print() 

def getGuess(alreadyGuessed): 

    while True: 
     print('Guess a letter.') 
     guess = input() 
     guess = guess.lower() 
     if len(guess) != 1: 
      print('Please enter a single letter') 
     elif guess in alreadyGuessed: 
      print('You have already guessed that letter. Choose again.') 
     elif guess not in 'abcdefghijklmnopqrstuvwxyz': 
      print('Please enter a LETTER') 
     else: 
      return guess 

def playAgain(): 

    print('Do you want to play again?(yes or no)') 
    return input().lower().startswith('y') 

print('H A N G M A N') 

missedLetters = '' 
correctLetters = '' 
secretWord = getRandomWord(words) 
gameIsDone = False 

while True: 
    displayBoard(HANGMANPICS, missedLetters, correctLetters, secretWord) 

    guess = getGuess(missedLetters + correctLetters) 

    if guess in secretWord: 
     correctLetters = correctLetters + guess 

     foundAllLetters = True 

    for i in range(len(secretWord)): 
     if secretWord[i] not in correctLetters: 
      foundAllLetters = False 
      break 

    if foundAllLetters: 
     print('Yes! The secret word is "'+ secretWord +'"! You have won!') 
     gameIsDone = True 
    else: 
     missedLetters = missedLetters + guess 

    if len(missedLetters) == len(HANGMANPICS) -1: 
     displayBoard(HANGMANPICS, missedLetters, correctLetters, secretWord) 
     print('You have run out of guesses!\nAfter ' + str(len(missedLetters)) + ' missed guesses and ' + str(len(correctLetters))+ ' correct guesses, the word was "'+ secretWord +'"') 
     gameIsDone = True 

    if gameIsDone: 
     if playAgain(): 
      missedLetters = '' 
      correctLetters = '' 
      gameIsDone = False 
      secretWord = getRandomWord(words) 
     else: 
      break 
+0

这本书的名字是什么? –

+0

如果len(missedLetters)== len(HANGMANPICS)-1:'子句应该缩进到前面的条件的else:之下。 – tripleee

+0

在这里倾销你的整个程序并不是真的可以接受。看到http://stackoverflow.com/help/mcve – tripleee

回答

1

主要的问题是您放置了条件缺失的字母 - 即使是正确的猜测落得像“错过了字母”正在接受治疗。

在您的代码:

else: 
    missedLetters = missedLetters + guess 

来核对原件的信是否在词后很长的路要走。

if guess in secretWord: 
    correctLetters = correctLetters + guess 
    foundAllLetters = True 

else: 
    missedLetters = missedLetters + guess 

在这种情况下,错过了信被添加到,只有当它不是在secretWord中丢失的信件列表:

如果移动子句来这里它的工作原理。

随着这种变化,事情似乎对我来说运行良好。

+0

:D非常感谢。我真的认为我的代码是正确的,但我没有。这完全解决了这个问题。尽管如此,我还是无法投票。 – AulartheENDER