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 lista 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 :)