2016-08-01 5 views
0
import random 

def random_Words(): 
    print("Lets play HANGMAN") 
    option = input("Please Chose option \n [1] Animals.\n [2] Countries \n  [3] Flowers \n [4] Pakistan's Cities \n"); 
    i=0; 
    x= ""; 
    if(option=='1'): 
     path= "code/hangman/Words.Animals" 

    if(option=='2'): 
     path="code/hangman/Words.Countries" 

    if(option=='3'):   
     path="code/hangman/Words.Flowers" 

    if(option=='4'): 
     path="code/hangman/Words.PakCities" 

    return random.choice(open(path).readlines()); 

def HangmanGuess(RandomWord, GuessedWord, Chances): 
    Letters_Guessed = [] 
    if(Chances > 0): 
     i=0; 
     GuessOption = input("Guess a Letter :"); 

     if(GuessOption == Letters_Guessed): 
      print("Already Guessed") 

     GuessOptionValid= False; 
     for i in range(len(RandomWord)-1): 
      if(RandomWord[i] == GuessOption): 
       GuessedWord= GuessedWord[:i] + GuessOption + GuessedWord[i+1:]; 
       GuessOptionValid =True; 

     print(RandomWord); 
     print(GuessedWord); 

     if(GuessOptionValid): 
      HangmanGuess(RandomWord,GuessedWord, Chances);   
     else: 
      HangmanGuess(RandomWord,GuessedWord, Chances-1); 
    else: 
     print('You have lost!!') 


Chances = 5 
RandomWord = random_Words() 
GuessedWord = '' 
i=0 
for i in range(len(RandomWord)-1): 
    GuessedWord+= '_' 

def Hangman_Drawing(RandomWord,GuessedWord, Chances): 
    x= HangmanGuess(RandomWord,GuessedWord, Chances); 
    x = '' 

    if(GuessedWord!= RandomWord[i]): 
     if(Chances==4): 
      print("----------"); 
      print("|  | "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("-----------"); 


     if(Chances==3): 
      print("----------"); 
      print("|  | "); 
      print("|  O "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("-----------"); 


     if(Chances==2): 
      print("----------"); 
      print("|  | "); 
      print("|  O "); 
      print("|  | "); 
      print("|   "); 
      print("|   "); 
      print("|   "); 
      print("-----------"); 


     if(Chances==1): 
      print("----------"); 
      print("|  | "); 
      print("|  O "); 
      print("|  | "); 
      print("| /\ "); 
      print("|   "); 
      print("|   "); 
      print("-----------"); 


     if(Chances==0): 
      print("----------"); 
      print("|  | "); 
      print("|  O "); 
      print("|  --|-- "); 
      print("| /\ "); 
      print("|   "); 
      print("|   "); 
      print("-----------"); 


print(Hangman_Drawing(RandomWord,GuessedWord, Chances)); 

Hallo Jungs, Iam bei einem Problem nicht, ich möchte einen Scheck setzen, die, dass, wenn ein beliebiger Buchstabe überprüft wird, eingegeben worden ist, wenn der Buchstabe ‚Erraten‘ wird überprüft, ob der Brief wurde vorher eingegeben und gab daher eine gedruckte Nachricht, um den Benutzer zu warnen, wenn einer gefunden wurde Mein Code hat den 'check'-Code, aber ich weiß nicht, was fehlt oder warum es nicht funktioniert, während der Rest des Codes ist vollkommen in Ordnung. Sorry iam ein Nicht-Ingenieur, wenn also irgendwelche Informationen fehlen bitte vergeben Jede Hilfe wäre willkommen. Danke.Hangman: Nicht das Erraten Brief Wiederholung wieder

+1

Nicht verwandt mit Ihrer eigentlichen Frage, aber Semikolons werden am Ende der Zeilen in Python nicht benötigt. Sie sind * erlaubt * und lassen Sie mehrere Anweisungen in einer einzigen Zeile kombinieren (obwohl das normalerweise ein schlechter Stil ist), aber sie sind niemals notwendig. – Blckknght

Antwort

0

Es gibt eine Reihe von Problemen mit Ihrem Code, die Sie daran hindern, sich wiederholende Vermutungen mit demselben Buchstaben zu behandeln.

Der offensichtlichste ist der Test, den Sie schon erraten wurde, wenn der Benutzereintrag sehen tun:

if(GuessOption == Letters_Guessed): 

Durch die Verwendung von ==, sind Sie verlangen, dass GuessOption auf die Letters_Guessed Liste gleich sein. Da es eine Saite sein wird, wird das niemals wahr sein. Ich denke, dass Sie den Operator in hier verwenden möchten. Es prüft, ob das Objekt auf der linken Seite ein Mitglied des Behälters auf dem rechten Seite:

if GuessOption in Letters_Guessed:  # parentheses are not necessary in Python conditionals 

Aber das ist nicht genug, um tatsächlich es funktioniert. Die lokale Variable Letters_Guessed wird als leere Liste initialisiert, und es wird nie etwas hinzugefügt, so dass jeder Mitgliedschaftstest immer falsch ist. Sie müssen jeden erratenen Buchstaben zu der Liste hinzufügen.

Die nächste Ausgabe ist eine größere. Es hat damit zu tun, wie Sie den Kontrollfluss Ihres Codes organisieren. Momentan verwenden Sie die Rekursion, um zur nächsten Schätzung überzugehen, nachdem Sie herausgefunden haben, ob die letzte gut war oder nicht. Dies verursacht jedoch Probleme mit Letters_Guessed, da dies eine lokale Variable ist, die bei jedem rekursiven Aufruf neu initialisiert wird. Wenn Sie bei der Rekursion bleiben wollen, müssen Sie die Letters_Guessed Liste zwischen Funktionsaufrufen übergeben, genauso wie Sie Ihre anderen Argumente übergeben. Ich empfehle das nicht wirklich.

Eine bessere Lösung wäre, die rekursive Struktur Ihres Codes durch Schleifen zu ersetzen. Insbesondere würden while Loops viel Sinn machen. Sie könnten eine while Schleife haben, die sich mit den Folgen jeder Schätzung beschäftigt (zB Chances bei einer falschen Schätzung), und eine weitere verschachtelte Schleife, die die Eingabe überprüft, um sicherzustellen, dass sie gültig ist (zB nicht schon erraten und vielleicht zusätzliche Dinge wie sein ein Buchstabe und nur ein einzelnes Zeichen sein).

+0

Nun, ich würde rekursive Funktion bevorzugen. Wie auch immer, danke für deine wertvolle Zeit. –

+0

BTW Ich fand die Lösung dafür. –

Verwandte Themen