Я начинающий экстремал и сейчас пытаюсь создать игру палача на Python 3.

Похоже, единственная проблема, с которой у меня возникают проблемы - это когда пользователь вводит символ, я не совсем уверен, как заменить «_» на правильную букву, которую вводит пользователь.

import random


def hangman():
    # setting up the word and spacing
    possible_words = ["SOFTWARE", "COMPUTER", "RESEARCH", "BLIZZARD"]
    chosen_word = random.choice(possible_words)
    unknown_word = chosen_word
    # del
    print(chosen_word)
    # del
    for char in unknown_word:
        unknown_word = unknown_word.replace(char, "_ ")
    print(unknown_word)
    y = list(unknown_word)
    print()

    # Playing the game
    mistakes = 0
    incorrect_guesses = []
    while mistakes < 5:
        guess = input("Enter a guess:\n")
        length = len(guess)
        # PROBLEMS
        if guess.upper() in chosen_word and length == 1:
            print(unknown_word)
            print()
        # PROBLEMS
        elif length != 1:  # For if more than 2 characters are entered.
            print("Please enter a single character.")
            print()
            continue
        else:  # If the guess isn't in the string
            print("Incorrect guess!")
            mistakes += 1
            print("You have {0} attempts left".format(5 - mistakes))
            incorrect_guesses.append(guess)
            print("You have used {0} so far.".format(incorrect_guesses))
            print()
    print("GAME OVER")


hangman()

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

Заранее спасибо!

0
MachineLimousine 25 Июн 2019 в 04:18

3 ответа

Лучший ответ

Прежде всего, я бы предложил использовать set() вместо list для incorrect_guesses (вам нужно будет использовать .add вместо .append). Таким образом, вы избежите повторения значений, если пользователь повторяет один и тот же символ.

Вы также можете иметь переменную correct_guesses, чтобы отслеживать успешные попытки и использовать их, чтобы избежать замены на _ в unknown_word.

Вот как хотелось бы затронутому фрагменту кода после этого изменения:

    incorrect_guesses = set()
    correct_guesses = set()
    while mistakes < 5:
        guess = input("Enter a guess:\n")
        length = len(guess)
        char = guess.upper()
        if char in chosen_word and length == 1:
            correct_guesses.add(char)
            unknown_word = chosen_word
            for char in (c for c in unknown_word if c not in correct_guesses):
                unknown_word = unknown_word.replace(char, "_ ")
            print(unknown_word)
1
jacalvo 25 Июн 2019 в 01:48

Вы могли бы сделать что-то вроде ...

unknown_word = chosen_word #define the word
current_guess = '_'*len(unknown_word) #get the blanks (if you keep the spaces the loc parameter below will be multiplied by 2)
guessed_letter = input("Enter a guess:\n") #get the guessed letter

if guessed_letter in unknown_word:
    loc=unknown_word.index(guessed_letter)
    current_guess=current_guess[:loc]+guessed_letter+current_guess[loc+1:]

Это заменит пустую букву в соответствующей позиции, если она находится в unknown_word

как уже упоминалось .. позиция индекса (loc) будет умножена на два, если вы оставите пробелы

РЕДАКТИРОВАТЬ - выше работает только с одним вхождением каждой буквы ... это будет работать для слов с несколькими вхождениями одной и той же буквы:

guessed_letter = input("Enter a guess:\n")
for loc in range(len(unknown_word)):
    if unknown_word[loc] == guessed_letter:
        current_guess = current_guess[:loc]+guessed_letter+current_guess[loc+1:]
0
Derek Eden 25 Июн 2019 в 19:40

Приведенный ниже код заменит _ на исходный символ:

unknown_word = ' '.join([guess.upper() if chosen_word[i] == \
                guess.upper() else c for i, c in enumerate(
                 unknown_word.replace(' ', ''))]
                ) + ' '
0
Lee Garcon 25 Июн 2019 в 02:01