2014-11-03 38 views
0

我正在尝试编写一个函数来玩hang子手,除了事实上该功能无法识别何时获得游戏,一切都运行完美。Python Hang子手 - 循环

---编辑---

这里是我修改后的代码

def hangman(): 
    word = choose_word(wordlist) 
    guessed_word = len(word)*['_'] 
    guesses = 10 
    available_letters = "abcdefghijklmnopqrstuvwxyz" 
    guessed_letters = "" 
    letters_correct = 0 
    print "Welcome to the game, Hangman!" 
    print "I am thinking of a word that is", len(word), "letters long." 
    print "Available letters:", available_letters 
    print "You have", guesses, "guesses." 
    while letters_correct != len(word): 
     guess = raw_input("enter your guess:") 
     if len(guess)==1 and guess.isalpha(): 
      if guessed_letters.find(guess) != -1: 
       print "You already picked", guess 
      else: 
       guessed_letters = guessed_letters + guess 
       index1 = word.find(guess) 
       if index1 == -1: 
        print "The letter",guess,"is not in the word", ' '.join(guessed_word) 
        guesses = guesses - 1 
        print "You have", guesses, "guesses left." 
        if guesses == 0: 
         return "You are out of guesses. You lose. The word was "+ word + "." 
        available_letters = available_letters.replace(guess, '') 
        print "Available letters:", available_letters 
       else: 
        letters_correct = letters_correct + word.count(guess) 
        print"The letter", guess, "is in the word." 
        for i in range(len(word)): 
         if guess == word[i]: 
          guessed_word[i] = guess 
          print ' '.join(guessed_word) 
          if letters_correct != len(word): 
           print "You have", guesses, "guesses left." 
           available_letters = available_letters.replace(guess, '') 
           print "Available letters:", available_letters 
          elif guesses <= 0: 
           return "You are out of guesses. You lose. The word was "+ word + "." 
     else: 
      print "Please guess a single letter in the alphabet." 
    if letters_correct == len(word): 
     return "Congratualations! You figured out that the word is "+ word 
+0

我的第一句话就是“功能分解”。不要将整个程序写入一个函数,而是将其写入多个函数中。然后,您可以全面测试每个子功能,这使问题确定变得更容易。 – 2014-11-03 00:55:30

回答

0

Hangman游戏循环未终止问题的原因是游戏while循环检查的letters_correct计数器变量。

while letters_correct != len(word): 

让我们说这个词是香蕉,我想信一个

在你的代码来处理一个正确的猜测分支开始这一行:

letters_correct = letters_correct + 1 

在我的词的情况下香蕉并猜测a然后letters_correct vari能力应该是递增3倍。现在,如果我猜n letters_correct应为增加两倍

在你当前的实现中,我猜的顺序只会增加letters_correct两次(2),当它应该是5.所以,当增加letters_count递增时,猜测出现在word的次数。

letters_count = letters_count + word.count(guess) 

这样在游戏循环中检查letters_count变量实际上能够达到单词的长度。

0

你曾考虑过你的话有同样的信函的多个的情况呢?

目前,如果用户猜测正确,您只需递增letters_correct一次。如果您每次发生一次正确的字母数量增加,它应该工作。