Hangman Python错误

时间:2014-11-25 03:19:59

标签: python algorithm while-loop eof func

当我尝试运行代码时,我一直收到EOF错误。我想知道如何解决这个问题?在此先感谢。当我尝试删除if_name_时,程序没有任何语法错误,但它没有运行。

以下链接显示错误: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 个答案:

答案 0 :(得分:0)

我发现的一些事情......

  • guess_characterguess_letter似乎是同一个变量,但在定义之前使用guess_letter。
  • input允许输入变量名或任何python代码块。要将输入用作字符串,您必须强制输入字符串或(更容易)使用raw_input
  • 您尝试在列表上执行join操作。这是不可能的。您可以使用append将项目添加到列表中。

所以,这里的代码有一些修复。你必须修复打印循环,但它应该更好,让你超越早期的错误。

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()