Hangman Python Error

171 Views Asked by At

I keep getting an EOF error when I try to run the code. I was wondering how I can fix this? Thanks in advance.When I try to remove if_name_ the program does not have any syntax errors but it does not run.

Here is a link that shows the error: codepad.org/d5p1Mgbb

 def get_secret_word():

 while True:

 secret_word = input('Please enter a word to be guessed\nthat does not contain ? or whitespace:')

 if not ('?' in secret_word or ' ' in secret_word or secret_word == '' ):

             return secret_word 

 def is_game_over(wrong_guess,secret_word,output,chars_guessed):

   if wrong_guess == 7:

   print('You failed to guess the secret word:',secret_word)

        return True

   for guess in secret_word:

   if guess in chars_guessed:
        output += guess

 else:

     output += '?'

 if not('?' in output):

 print('You correctly guessed the secret word:',secret_word)

 return True

  else:

  return False

  def display_hangman(wrong_guess):

  if wrong_guess == 1:

   print('\n |')

  elif wrong_guess == 2:

   print('\n |','\n 0')

   elif wrong_guess == 3:

   print('\n |','\n 0','\n |')

  elif wrong_guess == 4:

  print('\n |','\n 0','\n/|')

  elif wrong_guess == 5:

  print('\n |','\n 0','\n/|\\')  

  elif wrong_guess == 6:

  print('\n |','\n 0', '\n/|\\','\n/')

  elif wrong_guess == 7:

  print('\n |','\n 0','\n/|\\','\n/','\\')

  def display_guess(secret_word,chars_guessed):

        print("")

       output = ''

 for guess in secret_word:

 if guess in chars_guessed:

   output += guess

else:

    output += '?'

if '?' in output:

output += '\nSo far you have guessed: '

for guess in chars_guessed:

output += guess + ","

print(output.strip(","))

def get_guess(secret_word,chars_guessed):

while True:

guess_letter = input('Please enter your next guess: ')

if guess_letter == '':

print('You must enter a guess.')

continue

elif len(guess_letter) > 1:

print('You can only guess a single character.')

elif guess_letter in chars_guessed:

print('You already guessed the character:',guess_letter)

else:

return guess_letter

def main():

wrong_guess = 0 

chars_guessed = [] 

secret_word = get_secret_word()

output=''

while not(is_game_over(wrong_guess,secret_word,output,chars_guessed)):
    display_hangman(wrong_guess)
    display_guess(secret_word, chars_guessed)
    guess_character = get_guess(secret_word, chars_guessed)
    chars_guessed.join(guess_letter)
    chars_guessed.sort()
    if not guess_letter in secret_word:
        wrong_guess += 1
return wrong_guess
pass


if __name__ == '__main__':

main()
1

There are 1 best solutions below

3
On

A few things I found...

  • guess_character and guess_letter appear to be the same variable, but guess_letter is used before defined.
  • input allows for the entry of variable names or any block of python code. In order to use input as strings you must force input to string or (much easier) use raw_input
  • You were attemption to do a join operation on a list. This isn't possible. You can add an item to a list with append though.

So, here's the code with a few fixes. You'll have to fix the print loops but it should be better and get you past the earlier errors.

def get_secret_word():
    while True:
        secret_word = raw_input('Please enter a word to be guessed\nthat does not contain ? or whitespace:')
        if not ('?' in secret_word or ' ' in secret_word or secret_word == '' ):
            return secret_word 
def is_game_over(wrong_guess,secret_word,output,chars_guessed):
    if wrong_guess == 7:
        print('You failed to guess the secret word:',secret_word)
        return True
    for guess in secret_word:
        if guess in chars_guessed:
            output += guess
        else:
            output += '?'
        if not('?' in output):
            print('You correctly guessed the secret word:',secret_word)
            return True
        else:
            return False
def display_hangman(wrong_guess):
    if wrong_guess == 1:
        print('\n |')
    elif wrong_guess == 2:
        print('\n |','\n 0')
    elif wrong_guess == 3:
        print('\n |','\n 0','\n |')
    elif wrong_guess == 4:
        print('\n |','\n 0','\n/|')
    elif wrong_guess == 5:
        print('\n |','\n 0','\n/|\\')  
    elif wrong_guess == 6:
        print('\n |','\n 0', '\n/|\\','\n/')
    elif wrong_guess == 7:
        print('\n |','\n 0','\n/|\\','\n/','\\')

def display_guess(secret_word,chars_guessed):
    print("")
    output = ''
    for guess in secret_word:
        if guess in chars_guessed:
            output += guess
        else:
            output += '?'
            if '?' in output:
                output += '\nSo far you have guessed: '
                for guess in chars_guessed:
                    output += guess + ","
                    print(output.strip(","))
def get_guess(secret_word,chars_guessed):
    while True:
        guess_letter = raw_input('Please enter your next guess: ')
        if guess_letter == '':
            print('You must enter a guess.')
            continue
        elif len(guess_letter) > 1:
            print('You can only guess a single character.')
        elif guess_letter in chars_guessed:
            print('You already guessed the character:',guess_letter)
        else:
            return guess_letter
def main():
    wrong_guess = 0 
    chars_guessed = [] 
    secret_word = get_secret_word()
    output=''

    while not(is_game_over(wrong_guess,secret_word,output,chars_guessed)):
        display_hangman(wrong_guess)
        display_guess(secret_word, chars_guessed)
        guess_character = get_guess(secret_word, chars_guessed)
        chars_guessed.append(guess_character)
        chars_guessed.sort()
        if not guess_character in secret_word:
            wrong_guess += 1
    return wrong_guess
    pass


if __name__ == '__main__':
    main()