I'm currently writing a small Wordle game, which analyzes a guess word against a randomly selected word from a dictionary; however, there's an issue with it.
Here's my code:
SQUARES = {
'correct_place': '🟩',
'correct_letter': '🟨',
'incorrect_letter': '⬜'
}
def check_guess(guess: str, word: str):
guessed = []
wordle_pattern = []
for i, letter in enumerate(guess):
if word[i] == guess[i]:
guessed.append(letter)
wordle_pattern.append(SQUARES['correct_place'])
elif (word.count(guess[i]) == 1 and guess[i] not in guessed and guess.count(guess[i]) == 1) or (word.count(guess[i]) > 1 and guessed.count(guess[i]) < word.count(guess[i])):
guessed.append(letter)
wordle_pattern.append(SQUARES['correct_letter'])
else:
guessed.append(letter)
wordle_pattern.append(SQUARES['incorrect_letter'])
return ''.join(wordle_pattern)
This code mostly works, but it has a problem, in which it breaks down whenever the guess word has a repeated letter; for example:
print(check_guess(guess='burbs', word='urban'))
Prints ⬜🟨🟨⬜⬜
instead of the intended 🟨🟨🟨⬜⬜
.
I've tried adding many conditions to fix it; however, none of them seem to work.
This is the best I came up with (2.0):
SQUARES = {
'correct_place': '🟩',
'correct_letter': '🟨',
'incorrect_letter': '⬜'
}
def check_guess(guess: str, word: str):
wordle_pattern = []
word_list = [*word]
temp = ''
for i, letter in enumerate(guess):
if __is_correct_place(word[i], letter):
wordle_pattern.append(SQUARES['correct_place'])
word_list[i] = '/'
temp += '_'
else:
wordle_pattern.append(SQUARES['incorrect_letter'])
temp += letter
for i, letter in enumerate(temp):
if letter in word_list:
wordle_pattern[i] = SQUARES['correct_letter']
word_list.remove(letter)
return ''.join(wordle_pattern)
def __is_correct_place(letter: str, guessed_letter: str):
return letter == guessed_letter