← Все вопросы

виселица на python (hangman) — угадываю слово по буквам, застрял

Задан 18 месяцев назад1.1к просмотров2 ответа
6

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

import random
word = random.choice(["питон", "игра", "код"])
lives = 6
letter = input("Буква: ")
if letter in word:
    print("Есть такая!")

Как сделать чтобы показывалось п _ т _ н и так далее?

2 ответа

11
✓ Принятый ответ — помог автору

Хитрость с прочерками: на каждом шаге собираешь строку из букв, которые игрок уже угадал, а остальные показываешь как _. Вот полная игра:

import random

word = random.choice(["питон", "игра", "код", "змейка"])
guessed = set()
lives = 6

while lives > 0:
    shown = "".join(c if c in guessed else "_" for c in word)
    print(" ".join(shown))
    if "_" not in shown:
        print("Победа! Слово:", word)
        break
    letter = input(f"Буква (жизней {lives}): ").lower()
    if letter in word:
        guessed.add(letter)
        print("Есть такая!")
    else:
        lives -= 1
        print("Мимо :(")
else:
    print("Висельник повешен! Слово было:", word)

Как работает: guessed — множество уже названных букв. Строка shown собирается генератором: для каждой буквы слова показываем её саму, если она угадана, иначе _. Если в shown не осталось прочерков — слово открыто, победа. За неверную букву отнимаем жизнь. Когда lives дошли до 0, цикл while заканчивается и else печатает проигрыш.

Как улучшить: нарисуй ASCII-виселицу, которая дорисовывается с каждой ошибкой — храни 7 картинок в списке и показывай по индексу lives.

4

Добавь проверку, чтобы за повторную букву не отнимались жизни — а то называешь «а» дважды и тебя наказывают зря:

if letter in guessed:
    print("Эту букву ты уже называл")
    continue

И список слов лучше вынести подлиннее, можно по темам (животные, игры) — интереснее играть.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект