import random from exceptions import WordleGameOver, WordleInvalidGuess, WordleUnknownWord CORRECT = 0 IN_WORD = 1 NOT_IN_WORD = 2 with open("words.txt", "r") as words_file: words = words_file.readline().strip().split(",") guesses = words_file.readline().strip().split(",") class Wordle: def __init__(self, max_guesses = 6): self.max_guesses = max_guesses self.guesses = [] self._word = random.choice(words).lower() self._ended = False self._won = False def has_ended(self): return self._ended def has_won(self): return self._won def get_characters(self): characters = { c : None for c in "abcdefghijklmnopqrstuvwxyz"} for guess, result in self.guesses: for c, r in zip(guess, result): characters[c] = r return characters def guess(self, word): # Check if guess is valid if len(word) != 5: raise WordleInvalidGuess("Guess must have length 5") word = word.lower() if word not in words and word not in guesses: raise WordleUnknownWord(f"Unknown word '{word}'") if self.has_ended(): raise WordleGameOver("Game is already over.") result = [] correct = True for index, c in enumerate(word): if c not in self._word: result.append(NOT_IN_WORD) correct = False elif word[index] == self._word[index]: result.append(CORRECT) correct = correct and True else: result.append(IN_WORD) correct = False self.guesses.append((word, result)) if correct or len(self.guesses) == self.max_guesses: self._ended = True self._won = correct return result def reset(self): self.guesses = [] self._ended = False self._won = False def reroll(self): self._word = random.choice(words) self.reset()