2016-12-11 4 views
0

Wenn ich versuche, eine falsche Auswahl zu wählen, gab es mir den Fehler beim ersten Mal. Beim zweiten Mal startet der "Select level" -Block. Zum Beispiel, wenn ich die Wahl "12" eingib, gibt das Programm den Fehler zurück und bringt mich zur Auswahl, und diesmal gebe ich "13" ein und es wird der "Auswahl Level" -Block zurückgegeben. Ich muss eine Weile setzen oder was, um die Wahl immer zu bestätigen?Eingabefehler nur beim ersten Mal erkannt, zum zweiten Mal, wenn es gestartet wird

import random 
import sys 

choice = None 

while choice != "0": 
    print(''' 
    -------------------- 
    Welcome to Hangman 
    -------------------- 

    Please select a menu option: 

    0 - Exit 
    1 - Enter a new text file to be read: 
    2 - Play Game 

    ''') 

choice= input("Enter you choice: ") 

if choice == "0": 
    sys.exit("Exiting from Python") 

elif choice =="1": 
    while True: 
     try: 
      fileInput = input("Enter a new text file name: ") 
      List = open(fileInput).readlines() 
      break 
     except: 
      print ("\n Failed to open the file") 
      sys.exit() 

elif choice == "2": 
    List = open("words_for_hangman.txt").readlines() 

elif choice == " ": 
    choice = print("\n That is not a valit option! Please try again!") 
    choice = input("Choice:") 

else: 
    choice = print("\n That is not a valid option! Please try again!") 
    choice = input("Choice: ") 

print(''' 

Now select your difficulty level: 

0 - EASY 
1 - INTERMEDIATE 
2 - HARD 

''') 

level= input("Enter your choice: ") 
if level == "0": 
    word = random.choice(List) 
    word = word.strip() 
    hidden_word = "*" * len(word) 
    lives = 10 
    guessed = [] 
elif level == "1": 
    word = random.choice(List) 
    word = word.strip() 
    hidden_word = "*" * len(word) 
    lives = 7 
    guessed = [] 
elif level == "2": 
    word = random.choice(List) 
    word = word.strip() 
    hidden_word = "*" * len(word) 
    lives = 5 
    guessed = [] 


while lives != 0 and hidden_word != word: 
    print("\n-------------------------------") 
    print("The word is") 
    print(hidden_word.replace("_"," _ ")) 
    print("\nThere are", len(word), "letters in this word") 
    print("So far the letters you have guessed are: ") 
    print(' '.join(guessed)) 
    print("\n You have", lives,"lives remaining") 
    guess = input("\n Guess a letter: \n") 
    guess = guess.upper() 
    if len(guess) > 1: 
     guess = input("\n You can only guess one letter at a time!\n Try again: ") 
     guess = guess.upper() 
    elif guess== " ": 
     guess = input("\n You need to input a letter, not a space!\n Come on let's try again: ") 
     guess = guess.upper() 
    while guess in guessed: 
     print("\n You have already guessed that letter!") 
     guess = input("\n Please take another guess: ") 
     guess = guess.upper() 
    guessed.append(guess) 
    if guess in word: 
     print('''------------------------------- 
     ''') 
     print("Well done!", guess.upper(),"is in the word") 
     word_so_far = "" 
     for i in range (len(word)): 
      if guess == str(word[i]): 
       word_so_far += guess 
      else: 
       word_so_far += hidden_word[i] 
     hidden_word = word_so_far 
    else: 
     print('''------------------------------- 
     ''') 
     print("Sorry, but", guess, "is not in the word") 
     lives -= 1 

if lives == 0: 
    print("GAME OVER! You have no lives left") 
else: 
    print("\n CONGRATULATIONS! You have guessed the word") 
    print("The word was", word) 
    print("\nThank you for playing Hangman") 
+0

Ihr Fehler ist, dass wenn die Benutzereingabe falsch ist, Sie eine neue Eingabe nehmen, die wieder falsch sein könnte. Aber du kontrollierst das nicht. Ein guter Weg, um hier rauszukommen, besteht darin, die Schleife fortzusetzen, wenn die Benutzerwahl falsch ist. Siehe meine Antwort für Details. –

Antwort

0

Ja, du bist der zweite Eingang wird nicht wirklich überprüft. Sie müssen es in einer while-Schleife zu platzieren, so dass es immer an den gleichen Eingang zurück und macht alle Kontrollen wieder:

goodChoice = false 
while not goodChoice: 
    #print text message 
    choice = input("Enter you choice: ") 
    if choice == 1: 
     goodchoice = True 

#game code 

Die oben (ohne Ihre Funktionen) für immer, bis eine Wahl geschehen wird, das 1 ist eingegeben, wird es dann auf den Rest des Codes gehen

0

Sie müssen die Schleife fortsetzen, so dass nächste Eingabe vom Benutzer genommen werden kann, wenn die Eingabe falsch ist.

Verwandte Themen