после того, как я добавил переменную, функция перестала работать - PullRequest
2 голосов
/ 13 июля 2020

Функция (палач) работала до того, как я ее изменил, хотя из-за вводимых мной параметров она не может накапливать правильные буквы. Но после того, как я добавил еще одну переменную letter_guessedright для сбора правильных букв, на этот раз функция (палач) может обрабатывать, но не может распознать нужную букву. Я использовал новую добавленную переменную только для замены ввода get_guessed_word и добавил предложение if для удаления букв из available_letters. для других функций букву не менял. Но я их вставлю для удобства чтения.

import random
import string

WORDLIST_FILENAME = "words.txt"


def load_words():
    """
    Returns a list of valid words. Words are strings of lowercase letters.

    Depending on the size of the word list, this function may
    take a while to finish.
    """
    print("Loading word list from file...")
    # inFile: file
    inFile = open(WORDLIST_FILENAME, 'r')
    # line: string
    line = inFile.readline()
    # wordlist: list of strings
    wordlist = line.split()
    print("  ", len(wordlist), "words loaded.")
    return wordlist


def choose_word(wordlist):
    """
    wordlist (list): list of words (strings)

    Returns a word from wordlist at random
    """
    return random.choice(wordlist)


# end of helper code

# -----------------------------------

# Load the list of words into the variable wordlist
# so that it can be accessed from anywhere in the program
wordlist = load_words()

def is_word_guessed(secret_word, letters_guessed):
    for i in secret_word:
        if i in letters_guessed:
            continue
        else:
            return (False)
            break
    return (True)


def get_guessed_word(secret_word, letters_guessed):
    letter_str = ''
    uns_space = '_ '
    count=0
    for i in secret_word:
        for c in letters_guessed:
            if i == c:
                count=1
                break
        if count==1:
            letter_str+=c
        else:
            letter_str += uns_space
        count=0
    return (letter_str)


def get_available_letters(letters_guessed):
    import string
    av_lt=''
    for c in string.ascii_lowercase:
        if c  in letters_guessed:
            continue
        else:
            av_lt+=c
    return(av_lt)
letters_guessed=['e','i','k','p','r','s']
print(get_available_letters(letters_guessed))


def hangman():
    import string
    secret_word = choose_word(load_words())
    print("Welcome to the game Hangman!")
    print("I am thinking of a word that is", len(secret_word), "letters long.")
    print("------------- ")
    guesses = 6
    available_letters = string.ascii_lowercase
    letter_guessedright=""
    while guesses > 0:
        print("You have", guesses, " guesses left.")
        print("Available letters:", available_letters)
        letter_guessed = input("Please enter a letter:")
        if is_word_guessed(secret_word,letter_guessed):
            

> for c in available_letters:
>                 if c==letter_guessed:
>                     available_letters=available_letters.replace(c,'')
>             letter_guessedright += letter_guessed

            print("Good guess:", get_guessed_word(secret_word, letter_guessedright))
        else:
            print("Oops! That letter is not in my word:", get_guessed_word(secret_word, letter_guessedright))
            guesses-=1
        print("------------")

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Проблема решена. Я не поместил переменные в функцию is_word_guessed в нужное место. так что даже я правильно набрал номер, условие if в палаше () не сработало

0 голосов
/ 13 июля 2020

В вашей функции палача ваш оператор if равен EMPTY , что связано с тем, что python чувствителен к отступу, поскольку нет открывающих и закрывающих скобок, и поэтому ваш код выдает ошибку в вашем для l oop строка:

while guesses > 0:
        print("You have", guesses, " guesses left.")
        print("Available letters:", available_letters)
        letter_guessed = input("Please enter a letter:")
        if is_word_guessed(secret_word,letter_guessed): <----------

> for c in available_letters:
>                 if c==letter_guessed:
>                     available_letters=available_letters.replace(c,'')
>             letter_guessedright += letter_guessed          

Исправьте свой код, сделав отступ для l oop: for c in available_letters:, чтобы он ссылался на оператор if, чтобы дать вам, как показано ниже.

РЕЗУЛЬТАТ:

        if is_word_guessed(secret_word,letter_guessed): #your previous if statement    
            for c in available_letters: # <----
                if c==letter_guessed:
                    available_letters=available_letters.replace(c,'')
                    letter_guessedright += letter_guessed

                    print("Good guess:", get_guessed_word(secret_word, letter_guessedright))
                else:
                    print("Oops! That letter is not in my word:", 
                    get_guessed_word(secret_word, letter_guessedright))
                    guesses-=1

Вам также не нужно повторять import string в каждой функции, только в верхней части вашей программы.

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