виселица на python (hangman) — угадываю слово по буквам, застрял
Хочу сделать виселицу: комп загадывает слово, я называю буквы по одной, открываются отгаданные, а за ошибки уменьшается жизни. Сделал так, но не пойму как показывать слово с прочерками:
import random
word = random.choice(["питон", "игра", "код"])
lives = 6
letter = input("Буква: ")
if letter in word:
print("Есть такая!")
Как сделать чтобы показывалось п _ т _ н и так далее?
2 ответа
Хитрость с прочерками: на каждом шаге собираешь строку из букв, которые игрок уже угадал, а остальные показываешь как _. Вот полная игра:
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.
Добавь проверку, чтобы за повторную букву не отнимались жизни — а то называешь «а» дважды и тебя наказывают зря:
if letter in guessed:
print("Эту букву ты уже называл")
continue
И список слов лучше вынести подлиннее, можно по темам (животные, игры) — интереснее играть.