Реализация игры «Палач» на Python

Создайте и запустите игру Hangman на Python. Изучите проверку наборов символов, счетчики оставшихся попыток и замену строк скрытых слов.

Попробуйте в редакторе

Обзор

Hangman — это игра на угадывание слов, которая обучает разработчиков работе с пользовательскими строками, списками изменяемых символов и циклами проверки.

Движок выбирает случайное слово из заранее определенного списка. Он предоставляет игроку пустые места, соответствующие длине слова. С каждой догадкой буква раскрывается, либо количество оставшихся ошибок уменьшается на единицу.

В Python мы управляем этим игровым процессом, используя списки символов вместо неизменяемых строк, что позволяет быстро обнаруживать данные на месте и одновременно отслеживать ранее угаданные символы, чтобы избежать штрафов.

Код и вывод выполнения

Стандартный игровой скрипт Hangman с командной строкой и имитацией входных данных сеанса.

import random

def play_hangman():
    word_bank = ["python", "compiler", "terminal", "debugger", "variable"]
    word = random.choice(word_bank)
    guessed_word = ["_"] * len(word)
    guessed_letters = set()
    attempts_remaining = 6
    
    print("Welcome to Hangman!")
    print(f"Word length: {' '.join(guessed_word)}")
    
    # Mocking guess inputs for deterministic run
    mock_guesses = ["e", "o", "a", "t", "r", "n", "i", "m", "p", "c", "l"]
    
    for guess in mock_guesses:
        if attempts_remaining <= 0 or "_" not in guessed_word:
            break
            
        print(f"\nGuessing letter: '{guess}'")
        if guess in guessed_letters:
            print("You already guessed that!")
            continue
            
        guessed_letters.add(guess)
        
        if guess in word:
            for idx, char in enumerate(word):
                if char == guess:
                    guessed_word[idx] = guess
            print(f"Correct! Word state: {' '.join(guessed_word)}")
        else:
            attempts_remaining -= 1
            print(f"Incorrect! Attempts remaining: {attempts_remaining}")
            
    if "_" not in guessed_word:
        print(f"\nCongratulations! You guessed the word '{word}'!")
    else:
        print(f"\nGame Over! The word was '{word}'.")

# Seed random to ensure output matches the word 'compiler'
random.seed(35)
play_hangman()
Терминальный выход
Welcome to Hangman!
Word length: _ _ _ _ _ _ _ _

Guessing letter: 'e'
Correct! Word state: _ _ _ _ _ _ e _

Guessing letter: 'o'
Correct! Word state: _ o _ _ _ _ e _

Guessing letter: 'a'
Incorrect! Attempts remaining: 5

Guessing letter: 't'
Incorrect! Attempts remaining: 4

Guessing letter: 'r'
Correct! Word state: _ o _ _ _ l e r
... (guesses continue)
Congratulations! You guessed the word 'compiler'!

Пошаговая реализация

  • Изучение алгоритмов синтаксического анализа условных строк
  • Отслеживание состояния с использованием наборов для уникального поиска истории
  • Создание интерактивного терминала обучающих игр

Часто задаваемые вопросы

Зачем использовать набор для отгаданных букв?

Проверка членства в наборах Python выполняется в среднем за O(1), тогда как для списков требуется время O(n). Это обеспечивает более быстрый поиск при проверке предыдущих предположений.

Как загрузить большие списки слов?

Вы можете загрузить тысячи слов, прочитав их из текстового файла, используя функцию Python open(), или получить их динамически, используя структуру запросов веб-API.

Связанные темы