New year, new code! Today I asked ChatGPT for a small game, as I thought this might be more fun. Here is the exercise I got. As usual you can find my solution below;
Game Title: Guess the Word
Description:
Create a text-based game where the computer selects a random word from a predefined list, and the player has to guess the word one letter at a time. The player has a limited number of attempts to guess the word correctly. Each time the player makes a guess, the computer should provide feedback on whether the guessed letter is in the word and in what position(s).
Requirements:
- You can define a list of words from which the computer randomly selects a word.
- The game should provide instructions to the player.
- The player should have a limited number of attempts (e.g., 5) to guess the word.
- After each guess, the game should display the progress made by revealing the correctly guessed letters in their correct positions (if any).
- The game should end when the player correctly guesses the word or runs out of attempts.
- Provide a congratulatory message if the player wins and reveal the word.
- Provide a message if the player loses and reveal the word.
My Solution
And here is my code. Here are some things I learned
-
random.choice()
is a useful, simple way to select a random object in a list - a for loop can iterate through two strings at once, but will stop once the shorter of the two comes to an end. Not sure I really ever need this but interesting.
If I had more time I would make the responses to each attempt more user friendly and not print a separate line for each guessed letter. It would be better to just show ____ for wrong guesses and then insert the correctly guessed letters until all are there.
import logging
import random
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
def get_word():
"""
Selects the word to be guessed from a list
"""
logging.debug('get_word()')
word_list = ['Sheep', 'Dragon', 'Frog', 'Dachshund', 'Cat']
random_word = random.choice(word_list)
logging.debug(f'random_word: {random_word}')
return random_word
def play(solution_word, attempts):
"""
Let's the user guess the word with a certain number of attempts
"""
logging.debug(f'get_word(solution_word={solution_word}, attempts={attempts})')
try:
while attempts > 0:
logging.info(f'attempts left: {attempts}')
user_guess = input('Guess: ')
feedback = []
index = 0
if user_guess.strip().lower() == solution_word.strip().lower():
return True
for index, (char1, char2) in enumerate(zip(user_guess, solution_word)):
index += 1
if char1 == char2:
feedback.append(f"Letter {index}: {char1} is correct")
else:
feedback.append(f"Letter {index}: {char1} is wrong")
# Add feedback for extra letters in the user input
if len(user_guess) > len(solution_word):
for extra_letter in user_guess[len(solution_word):]:
index += 1
feedback.append(f"Letter {index}: {extra_letter} is wrong")
# Print all feedback
for feedback_item in feedback:
print(feedback_item)
attempts -= 1
print(f"Out of attempts! The word was: {solution_word}")
except KeyboardInterrupt:
logging.error('KeyboardInterrupt')
pass
return False
def main():
solution_word = get_word()
attempts = 5
print(f'Guess the word letter by letter. You have {attempts} attempts to guess the word.')
result = play(solution_word, attempts)
print(result)
if __name__ == '__main__':
main()
Have a great 2024 everyone :)
Top comments (0)