2017-01-11 4 views
5

Я пытаюсь сделать слово угадывая игру. Все работает, за исключением последней части инструкции if. Если пользователь правильно угадывает имя, он не печатает «Won!». Однако, если нет, выполняется оператор else, и он печатает «Lost!». Почему это? Я проверил его много раз, но я не нашел никакой ошибки.Почему этот оператор if не выполняется?

Примечание: Я использую Python 3,6

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

Ну, напечатайте значение 'strikes' перед' if' ... –

+2

Примечание: вы можете использовать ['random.choice (words)'] (https://docs.python.org/3/library /random.html#random.choice) над 'words [random.randint (0, len (words) -1)]', чтобы получить случайное значение из списка – cat

ответ

8

Посмотрите на этот кусок кода:

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

У вас есть ı (U+0131 LATIN SMALL LETTER DOTLESS I) вместо i. Python с радостью создаст для вас переменную playıng (в отличие от других языков, где переменные должны быть объявлены). Поэтому playing никогда не обновляется до False в случае выигрыша, и функция никогда не выходит.

Как отмечает Мартинн в комментариях, linter может помочь в определении ошибок с ошибками и других вероятных ошибок. Подумайте об использовании одного в своем редакторе или в среде IDE. Два популярных линта: Pylint и Flake8.

+5

Хорошо заметили! Поддержка имени юникода Python 3 действительно приводит домой к необходимости использования linter в вашем редакторе. –

Смежные вопросы