简体   繁体   English

Python hang子手游戏循环结束问题

[英]Python hangman game loop ending problems

The problem I have is that the game doesn't end because the while loop doesn't end even is the function is_word_guessed() returns True. 我的问题是游戏不会结束,因为while循环不会结束,即使is_word_guessed()函数返回True。 The rules for the game are: You have 6 guesses to guess the word. 游戏的规则是:您有6个猜测来猜单词。 For testing purposes, I am currently using a secret_word='apple'. 为了进行测试,我目前正在使用secret_word ='apple'。 I'm not adding the code for selecting a random word, it works fine. 我没有添加用于选择随机单词的代码,它可以正常工作。 If you guess right, you don't lose any guesses. 如果您猜对了,那么您不会失去任何猜测。 If you guess wrong, and the guess is a vocal, you lose 2 guesses. 如果您猜错了,而您的猜测是一个声音,那么您将丢失2个猜测。 if you guess wrong, and the guess is a consonant, you lose 1 guess. 如果您猜错了,并且猜测是辅音,则会丢失1次猜测。 If you guess a word you already have guessed, or guess a word that is not a letter, or you guess two or more words, you lose 1 warning. 如果您猜一个已经猜过的单词,或者猜一个不是字母的单词,或者猜两个或多个单词,则会丢失1条警告。 You start with 3 warnings, and if you lose them all, you lose one guess. 您从3条警告开始,如果全部丢失,您将失去一个猜测。 The final score is the number of unique letters on the secret_word*number of guesses_remaining. 最终分数是secret_word *剩余的guesses_剩余数目上的唯一字母数。

import string


secret_word='apple'

def is_word_guessed(secret_word, letters_guessed):
    if secret_word == letters_guessed:
        return True
    else:
        return False


def get_guessed_word(secret_word, letters_guessed):
    b=''
    for char in secret_word:
        if char in letters_guessed:
            b=b+char
        else:
            b=b+"_ "
    return b



def get_available_letters(letters_guessed):
    s=''
    letters=string.ascii_lowercase
    for char in letters:
        if char not in letters_guessed:
            s=s+char
    return s


def get_unique_letters(secret_word):
    unique=''
    for char in secret_word:
        if char not in unique:
            unique+=char
    return len(unique)
print (get_unique_letters(secret_word))


def hangman(secret_word):
    print("Welcome to the game of hangman!")
    print ("I am thinking a word that is", str(len(secret_word)), "long.")
    warnings_remaining=3
    guesses_remaining=6
    letters_guessed=''
    while not is_word_guessed(secret_word, letters_guessed):
#        checking that user has guesses left
        if guesses_remaining==0:
            break
        else:
#           checking if we have to remove a guess  
            if warnings_remaining==0:
                guesses_remaining-=1
                warnings_remaining=3          
            print ("---------")
            print("You have", str(guesses_remaining), "guesses left.")
            print("Available letters:", get_available_letters(letters_guessed))
            user_guess=input("Please guess a letter:")
#           checking that the input is a valid letter   
            if len(user_guess) != 1 or user_guess not in string.ascii_letters:
                warnings_remaining-=1
                print("Oops! That is not a valid letter!", "You have", warnings_remaining, "warnings left.")
            elif user_guess in letters_guessed:
                warnings_remaining-=1
                print("Oops! That letter has alredy been guessed. You now have", warnings_remaining, "warnings left.")
#           checking if the guess is right or wrong
            elif user_guess in secret_word:
                letters_guessed+=user_guess
                print ("Good guess:", get_guessed_word(secret_word, letters_guessed))
            else: 
                letters_guessed+=user_guess
                print ("Oops! That letter is not in my word:", get_guessed_word(secret_word, letters_guessed))
                if user_guess in 'aeiou':
                    guesses_remaining-=2
                else:
                    guesses_remaining-=1

    if guesses_remaining==0:
        print("Sorry, you ran out of guesses. The word was:", secret_word)
    else:
        print("Congratulations, you won!")
        print("Your total score for this game is:", get_unique_letters(secret_word)*guesses_remaining)

hangman(secret_word)

You're not accounting for double letters in your letters_guessed variable. 您没有考虑在letters_guessed变量中使用双字母。 A quick fix would be to compare the letters only in your is_word_guessed() function by converting them to sets: 一种快速的解决方案是仅通过将is_word_guessed()函数中的字母转换为集合来比较它们:

def is_word_guessed(secret_word, letters_guessed):
    if set(secret_word) == set(letters_guessed):
        return True
    else:
        return False

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM