Python Python Basics (2015) Letter Game App Letter Game Refinement

Andrei Oprescu
Andrei Oprescu
9,546 Points

Does anyone know why my code is going bananas?

This code is taken from the course and I don't know why it is going crazy:

import random


words = [
    'apple',
    'banana',
    'orange',
    'coconut',
    'strawberry',
    'lime',
    'grapefruit',
    'lemon',
    'kumquat',
    'blueberry',
    'melon',
]


while True:

    start = input("Press enter/return to start, or enter Q to quit.")

    if start.lower() == 'q':

      break


    secret_word = random.choice(words)

    bad_guesses = []

    good_guesses = []



   while len(bad_guesses) < 7 and len(list(good_guesses)) != len(secret_word):

     for letter in secret_word:

       if letter in  good_guesses:

          print(letter, end='')

        else:

         print('_', end='')



    print('')

    print("Strikes: {}/7".format(len(bad_guesses)))

    print('')



    guess = input("Guess a letter:  ").lower()


    if len(guess) != 1:

      print("You can only guess a single letter!")

      continue

    elif guess in bad_guesses or guess in good_guesses:

      print("You have already guesses this letter before!")

      continue

    elif not guess.isalpha():

      print("You can only guess letters!")

      continue


    if guess in secret_word:

      good_guess.append(guess)

      if len(good_guesses) == len(list(secret_word)):

        print("You win! The word was {}.".format(secret_word))

        break

    else:

 bad_guess.append(guess)

else:

print("You didn't guess it! My secret word was {}".format(secret_word))

Can you help me solve this?

Thanks

[MOD: added ```python formatting -cf]

Jordan Hoover
Jordan Hoover
Treehouse Project Reviewer

What does going crazy mean? What's happening that is wrong? Also, could you format all your code into one block?

1 Answer

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 56,801 Points

A common error in this code problem is using len(list(secret_word)) provides undesired length if there are repeated letters in the secret word, such as "banana". Only three correct guesses should match, but you'll never get 6 correct guesses. Hint: use set instead of list.

Post back if this doesn't solve your problem. Good luck!!