Игра виселица сломана

Я пытаюсь сделать эту игру про палача, но она не работает. Есть ли у кого-нибудь предложения по исправлению?

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')

Пожалуйста, дайте минимальный воспроизводимый пример. Также обратите внимание, что python-запросы относится к конкретной библиотеке, а не только потому, что вы просите кого-то исправить ваш код.

jonrsharpe 15.02.2019 18:40

Быстрый взгляд: if len(character) > 1: и if character not in word: должны быть предназначены для цикла while

OneCricketeer 15.02.2019 18:44

"Сломанный" это каким образом?

martineau 15.02.2019 19:32

@finefoot: я пытался указать ОП, почему их вопрос не соответствует правилам сайта для того, чтобы быть минимальный воспроизводимый пример. Люди, пытающиеся помочь, не должны запускать код в вопросе, чтобы понять, что означает вопрос.

martineau 15.02.2019 19:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
4
268
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я полагаю, когда вы говорите, что игра не работает, вы имеете в виду, что правильно угаданные символы не появляются? Это потому, что вы не меняете переменную 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

Вы знаете, как добавить функцию, которая говорит, что вы уже использовали эту букву, выберите другую?

Reuben barton 15.02.2019 18:57

Знаете ли вы, как очищать экран после окончания каждой игры и возвращаться в меню?

Reuben barton 17.02.2019 17:14

Другие вопросы по теме