This is a cool project, but I wanted to tell you that your evaluate_guess function is wrong.
evaluate_guess(answer="crest", guess="erase")
"MYNYM"
Many people misunderstand this but it's not how the rules actually work. Correct here would be MYNYN, because there is only one E in the correct answer. There must be a 1-1 correspondence between any 'M' letter in the guess and the letter in the answer. This is similar to the rules for the game "Mastermind".