Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

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

what is wrong with my code

import random
words=['apples','banana','grapes','orange','lemon','melon','strawberry']
while True:
  start=input("Press enter/return to play or q to quit  ")

  if start.lower()=='q':
    break
  secret_word=random.choice(words)
  good_guesses=[]
  bad_guesses=[]
  while len(bad_guesses)<7 and len(good_guesses)!=len(list(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))

    guess=input("guess a letter :").lower()
    if len(guess)!=1;
          print("you can guess only single letters ")
          continue
    elif guess in bad_guesses or guess in good_guesses:
          print("you already guessd that letter ")
          continue
    elif not guess.isaplha():
          print("you can only guess alhabets ")
          continue
    if guess in secret_word :
          good_guesses.append(guess)
          if len(good_guesses)==len(list(secret_word)):
              print("you win the word was {} ".format(secret_word))
              break
    else:
          bad_guesses.append(guess)
  else:
          print("you lose my word was {} ".format(secret_word))

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

2 Answers

Chris Freeman
MOD
Chris Freeman
Treehouse Moderator 68,423 Points

The flow of your code is basically correct. There are syntax errors and typos that need to be fixed. And one logic error. The best way to seek help with code errors is to also post the error you see when the code fails.

  • first error
  File "<string>", line 21
    guess=input("guess a letter :").lower()
        ^
SyntaxError: invalid syntax

A syntax error is sometimes caused by the preceding line:

print("strikes : {}/7".format(len(bad_guesses)) # missing paren
  • second error
  File "<string>", line 22
    if len(guess)!=1; # Need colon not semicolon
                    ^
SyntaxError: invalid syntax
  • third error
Press enter/return to play or q to quit  
_____
strikes : 0/7
guess a letter :a
Traceback (most recent call last):
  File "<string>", line 28, in <module>
AttributeError: 'str' object has no attribute 'isaplha'
    elif not guess.isaplha(): # typo should be isalpha
  • finally, when comparing the length of good_guesses to the length of secret_word, if the secret_word has repeated letters then the number of good guesses will never match the length of the secret word. You can use set instead of list to get a true comparison.
# here
while len(bad_guesses)<7 and len(good_guesses)!=len(set(secret_word)):

# and here 
         if len(good_guesses)==len(set(secret_word)): 

Post back if you need more help. Good luck!!!

i don't understand the third error

thanks

But what the set is doing??

Chris Freeman
Chris Freeman
Treehouse Moderator 68,423 Points

A set does not allow duplicate items. This automatically reduces the secret word down to its unique letters. See more in the set docs