Программа резко останавливается в зависимости от длины произвольного слова - PullRequest
0 голосов
/ 13 июня 2019

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

#Krish Patel

from random import randrange


def load_words():
    word_list = ["mom"] #"apple","tomato","krish","name","pediatrician"]
    return word_list

words_dict = load_words()

def get_word():
    word=words_dict[randrange(0,len(words_dict))]
    return word

secret_word = get_word()
letters_guessed = set()
local_guesses= 0
max_guesses = 6
num_correct_letters = 0

def play_hangman():
    global secret_word
    global letters_guessed
    global max_guesses
    global num_correct_letters
    global local_guesses

    print("Hello there! You are about to play a game of hangman!. Enjoy...")
    while not word_guessed() and  num_correct_letters != len(set(secret_word)) and local_guesses < max_guesses:
        guess = input("Enter a letter: ")
        if letters_guessed.add(guess) != letters_guessed:   
            local_guesses += 1
            letters_guessed.add(guess)
        else:
            print("You already guessed that letter!")
        print_guessed()
        word_guessed()
    if word_guessed() == True:
        print("You have won! The secret word was: " + secret_word)
        secret_word = get_word()
        letters_guessed = set()
        local_guesses= 0
        max_guesses = 6
        num_correct_letters = 0
    if local_guesses >= max_guesses:
        print("You went over your maximum number of allotted guesses. The secret word was: " + secret_word)
        secret_word = get_word()
        letters_guessed = set()
        local_guesses= 0
        max_guesses = 6
        num_correct_letters = 0

def print_guessed():
    global secret_word
    global letters_guessed
    print("Your guesses are " + str(letters_guessed))

def word_guessed():
    global secret_word
    global letters_guessed
    global num_correct_letters


    for i in set(secret_word):
        if i in letters_guessed:
            num_correct_letters += 1
    return num_correct_letters == len(set(secret_word))

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

1 Ответ

0 голосов
/ 13 июня 2019

Когда вы звоните word_guessed, вы не сбрасываете num_correct_letters обратно на 0 до подсчета количества правильных букв. Поэтому, когда вы угадываете одну правильную букву, этот счетчик продолжает увеличиваться, даже если вы не угадываете другие буквы правильно. Если оно достигает len(set(secret_word)), цикл заканчивается.

Нет необходимости проверять num_correct_letters в вашем while состоянии, поскольку word_guessed() уже проверяет его.

Вам не нужен цикл в word_guessed, и вам не нужна переменная num_correct_letters, вы можете просто написать:

def word_guessed():
    global secret_word
    global letters_guessed
    return set(secret_word).issubset(letters_guessed)

Вы также не проверяете, правильно ли guess уже в letters_guessed. Используйте guess not in letters_guessed.

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

from random import randrange

def load_words():
    word_list = ["mom","apple","tomato","krish","name","pediatrician"]
    return word_list

words_dict = load_words()

def get_word():
    word=words_dict[randrange(0,len(words_dict))]
    return word

def play_hangman():
    secret_word = get_word()
    letters_guessed = set()
    local_guesses= 0
    max_guesses = 6

    print("Hello there! You are about to play a game of hangman!. Enjoy...")
    while not word_guessed(secret_word, letters_guessed) and local_guesses < max_guesses:
        guess = input("Enter a letter: ")
        if guess not in letters_guessed:
            letters_guessed.add(guess)
            local_guesses += 1
            letters_guessed.add(guess)
        else:
            print("You already guessed that letter!")
        print_guessed(letters_guessed)
    if word_guessed(secret_word, letters_guessed):
        print("You have won! The secret word was: " + secret_word)
    elif local_guesses >= max_guesses:
        print("You went over your maximum number of allotted guesses. The secret word was: " + secret_word)

def print_guessed(letters_guessed):
    print("Your guesses are " + str(letters_guessed))

def word_guessed(secret_word, letters_guessed):
    return set(secret_word).issubset(letters_guessed)

play_hangman()
...