【问题标题】:Python Hangman - LoopsPython Hangman - 循环
【发布时间】:2014-11-03 00:47:47
【问题描述】:

我正在尝试编写一个用于玩刽子手的函数,除了函数无法识别何时赢得游戏之外,一切都运行良好。

---编辑---

这是我修改后的代码

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

【问题讨论】:

  • 我的第一个指导词是“功能分解”。与其将整个程序编写在一个函数中,不如将其编写为多个函数。然后你就可以对每个子功能进行全面测试,这使得问题确定变得更加容易。

标签: python loops for-loop while-loop nested-loops


【解决方案1】:

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

while letters_correct != len(word):

假设这个词是banana,我猜是字母a

您的代码中处理正确猜测的分支以这一行开头:

letters_correct = letters_correct + 1

对于我的单词 banana 并猜测 a,那么 letters_correct 变量应该增加三倍。现在,如果我猜 n,那么 letters_correct 应该增加两次

在您当前的实现中,按照我所做的顺序猜测只会将 letters_correct 增加两次 (2),而它应该是 5。因此,当增加 letters_count 时,猜测会在 word 中出现的次数 .

letters_count = letters_count + word.count(guess)

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

【讨论】:

    【解决方案2】:

    你有没有考虑过你的单词有多个同一个字母的情况?

    目前,如果用户猜对了,您只增加一次 letters_correct。如果每次出现时增加一次正确字母的数量,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2015-03-22
      • 1970-01-01
      • 2011-09-14
      相关资源
      最近更新 更多