#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!
"""