Skip to content

Instantly share code, notes, and snippets.

@olumidayy
Created May 4, 2021 16:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save olumidayy/05d9c42b6b434e102ff101edd882a7ca to your computer and use it in GitHub Desktop.
Save olumidayy/05d9c42b6b434e102ff101edd882a7ca to your computer and use it in GitHub Desktop.
Console Word game in Python: OOP Approach
import random as r
class WordGame:
word_list = ['programmer', 'python', 'defenestrate']
secret_word = r.choice(word_list).upper()
guessed_letters = []
def __init__(self, guesses=9, letters='ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
self.guesses = guesses
self.letters = list(letters)
def __format_word(self):
formatted_string = ''
for letter in self.secret_word:
if letter in self.guessed_letters:
formatted_string += letter
else:
formatted_string += '-'
return formatted_string
def __display_info(self):
letters = self.letters
available_letters = ' '.join([
letter for letter in letters if letter not in self.guessed_letters
])
print(self.__format_word())
print(f'Guesses left: {self.guesses}.')
print(f'Available letters: {available_letters}.')
def __check_guess(self, guess):
letters, guessed = self.letters, self.guessed_letters
if guess in letters and len(guess) == 1 and guess not in guessed:
self.guessed_letters.append(guess)
if guess in self.secret_word:
print('Good guess!')
else:
print('Bad guess!')
self.guesses -= 1
else:
if len(guess) != 1:
print('You must enter one letter, no more, no less!')
elif guess.upper() not in letters:
print('Your guess has to be a letter!')
elif guess in self.guessed_letters:
print('This letter has been tried already!')
self.__display_info()
def __can_be_formed_from(self):
for letter in self.secret_word:
if letter not in self.guessed_letters:
return False
return True
def start(self):
word_length = len(self.secret_word)
print(f'You have chosen a/an {word_length}-letter word.')
while self.guesses > 0:
guess = input('Enter a letter: ')
guess = guess.upper()
self.__check_guess(guess)
if self.__can_be_formed_from():
return print('YOU WON!')
print('YOU LOST! You ran out of guesses.')
print(f'The word was {self.secret_word}')
if __name__ == '__main__':
new_game = WordGame()
new_game.start()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment