2017-07-19 15 views
0

whileループが終了しないためにゲームが終了しないという問題は、is_word_guessed()がTrueを返します。 ゲームのルールは次のとおりです。 単語を推測するには6つの推測があります。テスト目的のために、私は現在secret_word = 'apple'を使用しています。私はランダムな単語を選択するコードを追加していない、それは正常に動作します。 あなたが正しく推測すれば、推測を失うことはありません。 あなたが間違っていると思われ、推測がボーカルである場合、あなたはの推測を失います。 あなたが間違っていると思われ、推測が子音である場合、あなたはとなります。 すでに推測している単語を推測したり、手紙ではない単語を推測したり、2つ以上の単語を推測すると、1つの警告が失われます。あなたは3つの警告から始めます。そしてそれらをすべて失うと、あなたは1つの推測を失います。最終的な得点は、secret_word *の推測の残りのユニーク文字の数です。Python hangmanのゲームループの終了問題

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) 

答えて

2

letters_guessed変数には二重文字は含まれません。あなたのis_word_guessed()関数内の文字だけをセットに変換して比較することが簡単にできます:

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