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

#python-3.x

#python-3.x

Вопрос:

Я создаю игру «угадай букву» на python. программа выбирает случайное слово из файла, и у пользователя есть количество букв, чтобы угадать буквы в слове. У меня возникли проблемы с кодированием одной части. Мне нужно отобразить слово в виде тире и после каждого угадывания изменять пунктирное слово, чтобы включить правильно угаданные буквы в их соответствующую позицию. Итак, результат выглядит примерно так.

Добро пожаловать, чтобы угадать букву!

В вашем слове 10 букв, у вас 10 неправильных догадок. Вот слово:

Введите букву: e Awe, shucks. Вы пропустили с этой буквой Введите букву: a Вы попали! Вот как выглядит слово сейчас: ——- a-a Введите букву: o Awe, shucks. Вы пропустили эту букву, введите букву: u Awe, shucks. Вы пропустили эту букву, введите букву: я, ты попал! Вот как выглядит слово сейчас: — i — a-a Введите букву: y Вы попали! Вот как выглядит слово сейчас: -y-i—a-a Введите букву: t Вы попали! Вот как выглядит слово сейчас: -y-i-t-ata Введите букву: l Вы попали! Вот как выглядит слово сейчас: ly-i-t-ata Введите букву: s Вы попали! Вот как выглядит слово сейчас: lysist-ata Введите букву: r Вы попали! Вот как выглядит слово сейчас: lysistrata Ты выиграл! Отличная работа!

итак, вот что у меня есть до сих пор

 
import random
def pick_word_from_file():
    '''Read a file of words and return one word at random'''
    file = open("wordlist.txt", 'r')
    words = file.readlines()
    file.close()
    global word #globalizes the variable "word"
    word = random.choice(words).strip("n")
    global guesses
    guesses = len(word) #number of guesses user has according to number of letters
    print(word)

def dashed_word():  #this function turns the word into dashes
    global hidden_word #globalizes the variable "hidden_word"
    hidden_word = ""
    for letter in word: #this for loop changes all the letters of the word to dashes
        if letter != " ":
            hidden_word = hidden_word   "-"
    print(hidden_word)
    list(hidden_word)

def game_intro():   #introduces word game rules
    print("Welcome to Guess a Word!n")
    print("Your word has",len(word),"letters")
    print("You have",len(word),"incorrect guesses.")
    print("Only guess with lower case letters please!")
   
def game(): #this is the main games function

    global guess
    
    
        for letter in range(len(word)):
            guess = input("Please enter a lowercase letter as your guess: ")    #asks user for lowercase letter as their guess
            new_hidden_word = ''
            random_int = 0
            int(random_int)
            for i in range(len(word)):
                if guess == word[i:i 1]:
                    print("Lucky guess!")
                    print(guess, "is in position", i 1)
                
               
                    hidden_word[i] = guess
                    hidden_word.join(' ')

                    print(hidden_word)
                    random_int = 1
            if random_int == 0:
                print("Unlucky")
           
                
                     

def main(): #this runs all the functions in order
    pick_word_from_file()
    game_intro()
    dashed_word()
    game()

main()

 

Просто нужна помощь с тем, что находится в функции game ()

Комментарии:

1. Пожалуйста, скопируйте и вставьте свой код. Пожалуйста, никаких изображений

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

3. Мне жаль, что я звучал так грубо раньше! Я не хотел быть таким нечувствительным. Это не прямой ответ на ваш вопрос, но есть действительно хорошая книга под названием «Изобретайте свои собственные компьютерные игры с помощью Python» Эла Свейгарта. В книге он описывает, как написать игру на угадывание и палача, а также множество других интересных вещей, таких как pygame, так что я определенно рекомендую это! Удачи в решении вашей проблемы 🙂

Ответ №1:

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

 import random

def pick_word_from_file():
    '''Read a file of words and return one word at random'''
    file = open("wordlist.txt", 'r')
    words = file.readlines()
    file.close()
    global word #globalizes the variable "word"
    word = random.choice(words).strip("n")
    global guesses
    guesses = len(word) #number of guesses user has according to number of letters
    print(word)

def dashed_word():  #this function turns the word into dashes
    global hidden_word #globalizes the variable "hidden_word"
    hidden_word = [] 
    for letter in word: #this for loop changes all the letters of the word to dashes
        if letter != " ":
            hidden_word.append ("-")
    print_out = ''
    print(print_out.join (hidden_word))

def game_intro():   #introduces word game rules
    print("Welcome to Guess a Word!n")
    print("Your word has",len(word),"letters")
    print("You have",len(word),"incorrect guesses.")
    print("Only guess with lower case letters please!")
   
def game(): #this is the main games function

    global guess
    for letter in range(len(word)):
        guess = input("Please enter a lowercase letter as your guess: ")    #asks user for lowercase letter as their guess
        new_hidden_word = ''
        random_int = 0
        int(random_int)
        for i in range(len(word)):
            if guess == word[i:i 1]:
                print("Lucky guess!")
                print(guess, "is in position", i 1)
                hidden_word[i] = guess
                print_out = ''
                print(print_out.join (hidden_word))
                random_int = 1
        if random_int == 0:
            print("Unlucky")

def main(): #this runs all the functions in order
    pick_word_from_file()
    game_intro()
    dashed_word()
    game()

main()
 

Ответ №2:

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

  • используйте.lower() для приема ввода в верхнем регистре
  • оператор, сообщающий пользователю, сколько осталось догадок
  • условие выигрыша и проигрыша
 import random

def game():
    # pick_word_from_file()
    # using with to close the file automatically
    with open("wordlist.txt") as f:
        wordlist = f.readlines()
        word = random.choice(wordlist).strip("n")

    # game_intro()
    print("Welcome to Guess a Word!n")
    print("Your word has", len(word), "letters")
    # why we need to say incorrect guesses from the start?
    # print("You have", len(word), "incorrect guesses.")

    # dashed_word()
    # use a list to save letters because string is immutable
    hidden_word = ["-" for w in word]
    print("".join(hidden_word))

    # number of guesses equal to length of word
    for guesses in range(len(word)):
        # tell user how many guesses left
        print(f"You have {len(word) - guesses} guesses left.")
        # use .lower() so user can also input uppercase letter
        guess = input("Please enter a letter as your guess: ").lower()

        change = False
        for i in range(len(word)):
            if word[i] == guess:
                hidden_word[i] = guess
                change = True
        if change:
            print("You got a hit! Here's what the word looks like now:")
            print("".join(hidden_word))
        else:
            print("Awe, shucks. You missed with that letter.")
            
        if "".join(hidden_word) == word:
            print("You won! Great job!")
            break
    # you lose when you are out of guesses
    else:
        print("You lose.")

game()
 

Вывод:

 """
Welcome to Guess a Word!

Your word has 10 letters
----------
You have 10 guesses left.
Please enter a letter as your guess: E
Awe, shucks. You missed with that letter.
You have 9 guesses left.
Please enter a letter as your guess: A
You got a hit! Here's what the word looks like now:
-------a-a
You have 8 guesses left.
Please enter a letter as your guess: O
Awe, shucks. You missed with that letter.
You have 7 guesses left.
Please enter a letter as your guess: U
Awe, shucks. You missed with that letter.
You have 6 guesses left.
Please enter a letter as your guess: I
You got a hit! Here's what the word looks like now:
---i---a-a
You have 5 guesses left.
Please enter a letter as your guess: Y
You got a hit! Here's what the word looks like now:
-y-i---a-a
You have 4 guesses left.
Please enter a letter as your guess: T
You got a hit! Here's what the word looks like now:
-y-i-t-ata
You have 3 guesses left.
Please enter a letter as your guess: L
You got a hit! Here's what the word looks like now:
ly-i-t-ata
You have 2 guesses left.
Please enter a letter as your guess: S
You got a hit! Here's what the word looks like now:
lysist-ata
You have 1 guesses left.
Please enter a letter as your guess: R
You got a hit! Here's what the word looks like now:
lysistrata
You won! Great job!
"""