Я пытаюсь сделать эту игру про палача, но она не работает. Есть ли у кого-нибудь предложения по исправлению?
import random, os
print("^^^^^^^^^^THIS IS HANGMAN^^^^^^^^^^")
print("1. Play Game ")
print("2. Quit Game ")
choice = input("Please enter option 1 or 2")
if choice == "1":
words = ["handkerchief", "accommodate", "indict", "impetuous"]
word = random.choice(words)
guess = ['_'] * len(word)
guesses = 7
while '_' in guess and guesses > 0:
print(' '.join(guess))
character = input('Enter character: ')
if len(character) > 1:
print('Only enter one character.')
continue
if character not in word:
guesses -= 1
if guesses == 0:
print('You LOST!')
break
else:
print('You have only', guesses, 'chances left to win.')
else:
print(''.join(guess))
print('You WON, well done')
Быстрый взгляд: if len(character) > 1: и if character not in word: должны быть предназначены для цикла while
"Сломанный" это каким образом?
@finefoot: я пытался указать ОП, почему их вопрос не соответствует правилам сайта для того, чтобы быть минимальный воспроизводимый пример. Люди, пытающиеся помочь, не должны запускать код в вопросе, чтобы понять, что означает вопрос.






Я полагаю, когда вы говорите, что игра не работает, вы имеете в виду, что правильно угаданные символы не появляются? Это потому, что вы не меняете переменную guess. Он всегда будет содержать только символы _, если вы не будете обновлять его каждый раз:
for i, c in enumerate(word):
if c == character:
guess[i] = character
Итак, если вы добавите это в свой код (больше ничего не изменилось), полная игра будет выглядеть так:
import random, os
print("^^^^^^^^^^THIS IS HANGMAN^^^^^^^^^^")
print("1. Play Game ")
print("2. Quit Game ")
choice = input("Please enter option 1 or 2")
if choice == "1":
words = ["handkerchief", "accommodate", "indict", "impetuous"]
word = random.choice(words)
guess = ['_'] * len(word)
guesses = 7
while '_' in guess and guesses > 0:
print(' '.join(guess))
character = input('Enter character: ')
if len(character) > 1:
print('Only enter one character.')
continue
if character not in word:
guesses -= 1
for i, c in enumerate(word):
if c == character:
guess[i] = character
if guesses == 0:
print('You LOST!')
break
else:
print('You have only', guesses, 'chances left to win.')
else:
print(''.join(guess))
print('You WON, well done')
Я немного изменил структуру, чтобы сделать код более интуитивным на мой взгляд:
import random
WORDS = ["handkerchief", "accommodate", "indict", "impetuous"]
MAX_GUESSES = 7
print("^^^^^^^^^^THIS IS HANGMAN^^^^^^^^^^")
while True:
input('Press <ENTER> to start a new game or <CTRL>+<C> to quit.')
word = random.choice(WORDS)
guess = ['_'] * len(word)
guesses = set()
n = MAX_GUESSES
while True:
print('\nYour word:', ' '.join(guess))
print('You have {} chances left.'.format(n))
if '_' not in guess:
print('Congratulations, you win!\n')
break
if n < 1:
print('Sorry, no guesses left. You lose!\n')
break
character = input('Guess a new character: ')
if len(character) != 1:
print('You must enter exactly one character!')
continue
if character in guesses:
print('You have already guessed that character!')
continue
guesses.add(character)
if character not in word:
n -= 1
continue
for i, c in enumerate(word):
if c == character:
guess[i] = character
Вы знаете, как добавить функцию, которая говорит, что вы уже использовали эту букву, выберите другую?
Знаете ли вы, как очищать экран после окончания каждой игры и возвращаться в меню?
Пожалуйста, дайте минимальный воспроизводимый пример. Также обратите внимание, что python-запросы относится к конкретной библиотеке, а не только потому, что вы просите кого-то исправить ваш код.