Выписка из списка и вычитание из функции (палач) - PullRequest
0 голосов
/ 18 октября 2018

У меня проблемы с двумя последними спецификациями этой программы.

1) Гессер изначально получает 6 промахов (7-й удар, и они ушли).Если они выигрывают эту игру, они играют снова, но только с 5 промахами и т. Д. Игра заканчивается, когда они не могут угадать слово в указанном количестве угаданий или пока они не выиграют игру, в которой у них 0 промахов.

- Я пытался, но я не знаю, как все мои цифры из других функций отражают новое изменение.Я хотел бы сохранить возможность воспроизведения, чтобы они могли выйти в любое время.

2) Перед каждым предположением выведите список букв, которые еще не были угаданы.

- я знаю, что это проще, и я должен знать это, но я думаю, что я сжег свой мозг.

У меня еще есть документация, чтобы сделать это, яизвиняюсь за любые ошибки.Любая уборка всегда ценится.Заранее спасибо.

import random
import string

word_list = ["no", "hi", "bee", "car", "seat", "bear", "see", "chip"]
available_letters = string.ascii_lowercase  # pop guessed letter from here
used_letters = []  # Add it to here, and display avaiable_letters each time a letter is guessed.


missed_letters = ""
correct_letters = ""
secret_word = random.choice(word_list).lower()


def get_random(word_list):

    secret_word = random.choice(word_list).lower()
    return secret_word


def display_board(missed_letters, correct_letters, secret_word):

    print("Current Score:")

    for letter in missed_letters:
        print(letter)
    print()

    blanks = '-' * len(secret_word)

    for i in range(len(secret_word)):
            if secret_word[i] in correct_letters:
                blanks = blanks[:i] + secret_word[i] + blanks[i+1:]

    for letter in blanks:
        print(letter)
    print()


def get_player_guess(guessed):

    while True:
        guess = input("Enter a letter: ")  # try guess = input(blah blah).lower()
        guess = guess.lower()

        if len(guess) != 1:
            print("1 Letter at a time!")
        elif guess in guessed:
            print("Whoops, you already guessed that one!")
        elif guess not in "abcdefghijklomnopqrstuvwxyz":
            print("Letters only please!")
        else:
            return guess


def replay_game():

    replay = input("Do you want to play again? y or n ")

    if replay == "y":
        play_game(missed_letters, correct_letters, secret_word)
    else:
        print("Bye!")


def play_game(missed_letters, correct_letters, secret_word):

    count = 0
    chance = 7
    game_over = False

    print("Welcome To Hangman.")

    while True:
        display_board(missed_letters, correct_letters, secret_word)

        guess = get_player_guess(missed_letters + correct_letters)

        if guess in secret_word:

            correct_letters = correct_letters + guess

            done = True

            for i in range(len(secret_word)):
                    if secret_word[i] not in correct_letters:
                        done = False
                        break

            if done:
                print("You win!")
                game_over = True
        else:

            missed_letters = missed_letters + guess

            count += 1
            chance -= 1

            if count == 1:
                print("You've got " + str(count) + " Strike. You have " + str(chance) + " Chances left")
            elif count > 1 and count < 6:
                print("You've got " + str(count) + " Strikes.  You have " + str(chance) + " Chances left")
            elif count == 6 and chance == 1:
                print("You've got " + str(count) + " Strikes.  You have " + str(chance) + " Chance left")

            if len(missed_letters) == 7:

                display_board(missed_letters, correct_letters, secret_word)

                print("Sorry!  You've run out of guesses! The right word was " + secret_word + "!")

                game_over = True

        if game_over:

            if replay_game():
                missed_letters = ""
                correct_letters = ""
                secret_word = get_random(word_list)

            else:
                break


play_game(missed_letters, correct_letters, secret_word)

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Относительно функции display_board Я бы немного очистил код, чтобы заменить '_' в пробелах на правильную букву, когда он был правильно угадан:

for i in range(len(secret_word)):
            if secret_word[i] in correct_letters:
                blanks[i] = secret_word[i]

Он выглядит чище и делает меньше переназначений элементовв заготовках.

0 голосов
/ 18 октября 2018

В данный момент вы не меняете слово при вызове replay_game, потому что текст после if replay_game в конце никогда не вызывается.

Для первой проблемы я бы записал общее числошансов для игры в качестве входной переменной в play_game и измените replay_game, чтобы просто вернуть true или false, и переместите другой код в play_game

def replay_game():

    replay = input("Do you want to play again? y or n ")
    # Changed to just return true or false depending on input.
    if replay == "y":
        return True
    else:
        print("Bye!")
        return False

Затем измените начало play_game на

def play_game(missed_letters, correct_letters, secret_word, total_chances=7):

    count = 0
    # chance is now variable
    chance = total_chances
    game_over = False

и в конце play_game замените:

if len(missed_letters) == 7:

на

if chance == 0:

и измените вызов на if game_over на

if game_over:

    if replay_game():
        missed_letters = ""
        correct_letters = ""
        secret_word = get_random(word_list)
        play_game(missed_letters, correct_letters, secret_word, total_chances - 1)

    else:
        break

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

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

Для второй проблемы, просто добавьте следующее к табло:

print("Available letters:")
print(','.join(sorted(set(available_letters) - set(missed_letters) - set(correct_letters))))

Это составляет набор из каждой из трех групп букв, а затем забирает те, которые уже были угаданы, доотображая их в одну строку, отсортированные по алфавиту и разделенные запятыми.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...