Ваш код имеет разные недостатки. Основные ошибки связаны с отступами и областями действия. Имейте в виду, что Python использует отступы для группировки операторов. Используйте последовательно 4 пробела в качестве отступа для операторов группировки, например, для отступа тела функции, тела цикла for и т. Д.
Кроме того, в вашем коде много ошибок undefined name
, так как вы ссылаетесь на имена, которые не являютсяопределено в текущей области. Рассмотрим вашу функцию is_word_function(puzzle)
:
def is_word_found(puzzle):
if puzzle == answer:
return is_win
Имя answer
определено в main()
, тогда как is_win
вообще не определено (вы передаете его в display_result()
в main()
, но не определили это раньше). Лучшее объявление функции выглядело бы так:
def is_word_found(puzzle, answer):
return puzzle == answer
Обратите внимание, что это предложение предназначено для образования, я не думаю, что вам обязательно нужна функция для этого.
Как правило, для того, чтобычтобы имена были доступны в текущей (функциональной) области, вы должны либо передать аргументы в функцию, либо поместить их на уровне модуля, либо - что еще лучше - рассмотреть вопрос об ООП (что, поскольку это лабораторное задание, япредположим, что вы еще этого не сделали).
Как только вы исправите эти ошибки и ваш код скомпилируется, вам нужно поработать над логикой своей игры. Например, в play_game
у вас есть цикл while num_guesses > 0
, который будет работать бесконечно, так как вы никогда не уменьшаете счетчик num_guesses
(фактически вы увеличиваете его в update_puzzle_string
. Лучший цикл будет выглядеть так:
def play_game(puzzle, answer, ..):
num_guesses = 4
while num_guesses and not is_word_found(puzzle, answer):
# logic
num_guesses -= 1
# or, alternatively
def play_game(puzzle, answer, ..):
num_guesses = 4
for _ in range(num_guesses):
# logic
if is_word_found(puzzle, answer):
# break or return
Рекомендуется использовать flake8
для проверки вашего кода, выявления ошибок и непитоновых конструкций кода в будущем.
>>> pip3 install flake8
>>> flake8 your_file.py