Загрузка данных
"""
Игра "Виселица"
Программа загадывает слово, пользователь должен его угадать по буквам или целиком.
За каждую ошибку добавляется часть тела повешенного.
"""
import random
# Глобальный список слов для игры
word_list = [
"ПИТОН", "ПРОГРАММИРОВАНИЕ", "КОМПЬЮТЕР", "АЛГОРИТМ", "РАЗРАБОТЧИК",
"ФУНКЦИЯ", "ПЕРЕМЕННАЯ", "ЦИКЛ", "СПИСОК", "СЛОВАРЬ", "МОДУЛЬ",
"ВИСЕЛИЦА", "УГАДАЙКА", "ПОЛЬЗОВАТЕЛЬ", "ИНТЕРФЕЙС"
]
# Категории слов с подсказками
words_with_hints = {
"ПИТОН": "Язык программирования",
"ПРОГРАММИРОВАНИЕ": "Процесс создания компьютерных программ",
"КОМПЬЮТЕР": "Электронное устройство для обработки данных",
"АЛГОРИТМ": "Последовательность действий для решения задачи",
"РАЗРАБОТЧИК": "Специалист, создающий программное обеспечение",
"ФУНКЦИЯ": "Блок кода, который можно вызывать многократно",
"ПЕРЕМЕННАЯ": "Именованная область памяти для хранения данных",
"ЦИКЛ": "Управляющая конструкция для повторения действий",
"СПИСОК": "Упорядоченная коллекция элементов",
"СЛОВАРЬ": "Структура данных для хранения пар ключ-значение",
"МОДУЛЬ": "Файл с кодом Python для импорта",
"ВИСЕЛИЦА": "Название этой игры",
"УГАДАЙКА": "Игра на отгадывание слов",
"ПОЛЬЗОВАТЕЛЬ": "Человек, взаимодействующий с программой",
"ИНТЕРФЕЙС": "Способ взаимодействия между компонентами"
}
def get_word():
"""Возвращает случайное слово из списка word_list в верхнем регистре"""
return random.choice(word_list)
def get_hint(word):
"""Возвращает подсказку для слова, если она есть"""
return words_with_hints.get(word, "Подсказка отсутствует")
def display_hangman(tries):
"""Возвращает текущее состояние виселицы в зависимости от количества попыток"""
stages = [ # финальное состояние: голова, торс, обе руки, обе ноги
'''
--------
| |
| O
| \\|/
| |
| / \\
-
''',
# голова, торс, обе руки, одна нога
'''
--------
| |
| O
| \\|/
| |
| /
-
''',
# голова, торс, обе руки
'''
--------
| |
| O
| \\|/
| |
|
-
''',
# голова, торс и одна рука
'''
--------
| |
| O
| \\|
| |
|
-
''',
# голова и торс
'''
--------
| |
| O
| |
| |
|
-
''',
# голова
'''
--------
| |
| O
|
|
|
-
''',
# начальное состояние
'''
--------
| |
|
|
|
|
-
'''
]
return stages[tries]
def display_word_with_hint(word_completion, word):
"""Отображает текущее состояние слова с первой и последней буквой (если есть)"""
# Находим первую и последнюю букву оригинального слова
first_letter = word[0]
last_letter = word[-1] if len(word) > 1 else word[0]
print(f"\nПодсказка: первая буква '{first_letter}', последняя буква '{last_letter}'")
print(f"Загаданное слово: {word_completion}")
def play(word):
"""Основная логика игры"""
word_completion = '_' * len(word) # строка, содержащая символы _ на каждую букву
guessed = False # сигнальная метка
guessed_letters = [] # список уже названных букв
guessed_words = [] # список уже названных слов
tries = 6 # количество попыток
print("\n" + "="*50)
print("Давайте играть в угадайку слов!")
print("="*50)
# Показываем подсказку
print(f"\nПодсказка по категории: {get_hint(word)}")
# Основной игровой цикл
while not guessed and tries > 0:
# Отображаем текущее состояние
print(display_hangman(tries))
display_word_with_hint(word_completion, word)
print(f"\nИспользованные буквы: {', '.join(sorted(guessed_letters)) if guessed_letters else 'пока нет'}")
print(f"Осталось попыток: {tries}")
# Запрашиваем ввод
user_input = input("\nВведите букву или слово целиком: ").strip().upper()
# Защита от пустого ввода
if not user_input:
print("Вы ничего не ввели! Попробуйте снова.")
continue
# Защита от небуквенных символов
if not user_input.isalpha():
print("Можно вводить только буквы русского алфавита!")
continue
# Если пользователь ввел слово целиком
if len(user_input) > 1:
if user_input in guessed_words:
print(f"Вы уже пробовали слово '{user_input}'. Попробуйте другое!")
continue
guessed_words.append(user_input)
if user_input == word:
guessed = True
word_completion = word
print(display_hangman(tries))
print(f"\nЗагаданное слово: {word_completion}")
print("Поздравляем, вы угадали слово! Вы победили!")
break
else:
print(f"Слово '{user_input}' неверно!")
tries -= 1
continue
# Если пользователь ввел одну букву
if len(user_input) == 1:
if user_input in guessed_letters:
print(f"Вы уже называли букву '{user_input}'. Попробуйте другую!")
continue
guessed_letters.append(user_input)
if user_input in word:
print(f"\nОтлично! Буква '{user_input}' есть в слове!")
# Обновляем word_completion
for i in range(len(word)):
if word[i] == user_input:
word_completion = word_completion[:i] + user_input + word_completion[i+1:]
else:
print(f"\nУвы! Буквы '{user_input}' нет в слове!")
tries -= 1
# Проверяем, угадано ли слово полностью
if '_' not in word_completion:
guessed = True
print(display_hangman(tries))
print(f"\nЗагаданное слово: {word_completion}")
print("Поздравляем, вы угадали слово! Вы победили!")
break
# Если попытки закончились
if tries == 0:
print(display_hangman(tries))
print(f"\nВы проиграли! Загаданное слово было: {word}")
print("Попробуйте в следующий раз!")
def main():
"""Основной цикл программы"""
print("\n" + "="*50)
print("ДОБРО ПОЖАЛОВАТЬ В ИГРУ 'ВИСЕЛИЦА'")
print("="*50)
print("Правила:")
print("- Программа загадывает слово, вы должны его угадать")
print("- Можно называть буквы или слово целиком")
print("- За каждую ошибку рисуется часть висельника")
print("- У вас 6 попыток")
print("="*50)
while True:
# Генерируем случайное слово
word = get_word()
# Запускаем игру
play(word)
# Спрашиваем, хочет ли пользователь сыграть еще раз
while True:
play_again = input("\nХотите сыграть еще раз? (да/нет): ").strip().lower()
if play_again in ['да', 'yes', 'y', 'д']:
print("\n" + "="*50)
print("НОВАЯ ИГРА!")
print("="*50)
break
elif play_again in ['нет', 'no', 'n', 'н']:
print("\nСпасибо за игру! До свидания!")
return
else:
print("Пожалуйста, введите 'да' или 'нет'")
# Запуск программы
if __name__ == "__main__":
main()