2017-01-11 4 views
5

Ich versuche ein Wort Ratespiel zu machen. Alles funktioniert bis auf den letzten if-Anweisungsteil. Wenn der Benutzer den Namen richtig rät, wird "Gewonnen!" Nicht gedruckt. Wenn dies nicht der Fall ist, wird else-Anweisung ausgeführt und "Lost!" Wird gedruckt. Warum das? Ich habe es viele Male überprüft, aber ich konnte keinen Fehler finden.Warum wird diese if-Anweisung nicht ausgeführt?

Hinweis: Ich benutze 3.6 Python

import random 

def get_random_word(): 
    words = ["Ronnie", "Deskty", "Lorrie"] 
    word = words[random.randint(0, len(words)-1)] 
    return word 

def show_word(word): 
    for character in word: 
     print(character, " ", end="") 
    print("") 

def get_guess(): 
    print("Enter a letter: ") 
    return input() 

def process_letter(letter, secret_word, blanked_word): 
    result = False 

    for i in range(0, len(secret_word)): 
     if secret_word[i] == letter: 
      result = True 
      blanked_word[i] = letter 

    return result 

def print_strikes(number_of_strikes): 
    for i in range(0, number_of_strikes): 
     print("X ", end="") 
    print("") 

def play_word_game(): 
    strikes = 0 
    max_strikes = 3 
    playing = True 

    word = get_random_word() 
    blanked_word = list("_" * len(word)) 

    while playing: 
     show_word(blanked_word) 
     letter = get_guess() 
     found = process_letter(letter, word, blanked_word) 

     if not found: 
      strikes += 1 
      print_strikes(strikes) 

     if strikes >= max_strikes: 
      playing = False 

     if not "_" in blanked_word: 
      playıng = False 


    if strikes >= max_strikes: 
     print("Lost") 
    else: 
     print("Won") 




print("Game started") 
play_word_game() 
print("Game over") 
+0

Nun, drucken Sie den Wert von 'Streiks' vor dem 'if' ... –

+2

Hinweis: Sie können [' random.choice (Wörter) '] (https://docs.python.org/3/library /random.html#random.choice) über 'words [random.randint (0, len (worts) -1)]', um einen zufälligen Wert aus einer Liste zu erhalten – cat

Antwort

8

Blick auf dieses Stück Code:

if not "_" in blanked_word: 
     playıng = False 

Sie haben eine ı (U+0131 LATIN SMALL LETTER DOTLESS I) anstelle von i. Python erstellt gerne die Variable playıng für Sie (im Gegensatz zu anderen Sprachen, in denen Variablen deklariert werden müssen). Daher wird playing niemals im erfolgreichen Fall auf False aktualisiert und die Funktion wird nie beendet.

Wie Martijn in den Kommentaren hervorhebt, kann ein Linter helfen, indem er falsch geschriebene Variablen und andere wahrscheinliche Fehler entdeckt. Erwägen Sie, einen in Ihrem Editor oder Ihrer IDE zu verwenden. Zwei beliebte Linters sind Pylint und Flake8.

+5

Gut entdeckt! Die Unicode-Namensunterstützung von Python 3 macht es wirklich notwendig, einen Linter in Ihrem Editor zu verwenden. –

Verwandte Themen