man子手代码卡在try / except块上

时间:2019-09-17 02:19:06

标签: python

对不起,我基本上是一名婴儿编码员。当我尝试运行此Python hangman程序时,它会说“这不是有效的输入”,如except框中的内容。大家可以让我知道我在做什么错吗?

import random

print("Welcome to Hangman for Python! A word will be chosen randomly. You will have to guess it!\n")

Hangman变量:

    HANGMAN = (
    """
    -----
    |   |
    |
    |
    |
    |
    |
    |
    |
    --------
    """,
    """
    -----
    |   |
    |   0
    |
    |
    |
    |
    |
    |
    --------
    """,
    """
    -----
    |   |
    |   0
    |  -+-
    |
    |
    |
    |
    |
    --------
    """,
    """
    -----
    |   |
    |   0
    | /-+-
    |
    |
    |
    |
    |
    --------
    """,
    """
    -----
    |   |
    |   0
    | /-+-\ 
    |
    |
    |
    |
    |
    --------
    """,
    """
    -----
    |   |
    |   0
    | /-+-\ 
    |   | 
    |
    |
    |
    |
    --------
    """,
    """
    -----
    |   |
    |   0
    | /-+-\ 
    |   | 
    |   | 
    |
    |
    |
    --------
    """,
    """
    -----
    |   |
    |   0
    | /-+-\ 
    |   | 
    |   | 
    |  |
    |
    |
    --------
    """,
    """
    -----
    |   |
    |   0
    | /-+-\ 
    |   | 
    |   | 
    |  | 
    |  | 
    |
    --------
    """,
    """
    -----
    |   |
    |   0
    | /-+-\ 
    |   | 
    |   | 
    |  | | 
    |  | 
    |
    --------
    """,
    """
    -----
    |   |
    |   0
    | /-+-\ 
    |   | 
    |   | 
    |  | | 
    |  | | 
    |
    --------
    """)

代码:

life = len(HANGMAN) - 1
words = ["theeverythingstore"]
word = words[random.randint(0, len(words) - 1)]
guess = list(len(word) * '*')

letters_guessed = []

print(HANGMAN[0])

while list.count(guess, "*") > 0 and life != 0:
    guess_joined = "".join(guess)
    print("You have {0} lives left. The word so far is 
{1}.".format(life, guess_joined))
    try:
        char = input("\nEnter a letter: ")
    except:
        print("This is not a valid input")
    else:
        if len(char) > 1 or len(char) == 0:
            print("This has more than one letter or none. Try again!")
            continue
        elif char.isalpha() == False:
            print("I need a letter from a to z.")
            continue
        else:
            if char in letters_guessed:
                print("You already entered that letter!")
                continue
            else:
                char = char.lower()
                letters_guessed.append(char)

                for letter in range(len(word)):
                    if char == word[letter]:
                        guess[letter] = char

                if char not in word:
                    life -= 1
                    print(HANGMAN[(len(HANGMAN) - 1) - life])

                if '*' not in guess:
                    print("Congratulations! {} was the word!".format(word))
                    break
                if life == 0:
                    print("Unlucky, the word was {}. Try next time".format(word))
                    break

实际结果:

  

您还有10条生命。到目前为止,这个词是******************。

     

输入字母:e这是无效输入,您还有10条生命。   到目前为止,这个词是******************。

     

输入字母:

1 个答案:

答案 0 :(得分:0)

像这样的包罗万象的except通常是不好的,因为它使您完全了解当前所处的那种情况:有些事情失败了,但您不知道是什么。

您可以做的第一件事是删除(或仅注释掉)except块,然后看看会发生什么。 Python将引发异常并结束程序(因为不再有异常处理)。虽然看起来很糟糕,但Python还将打印错误的详细信息,这将帮助您了解发生了什么。

执行完此操作后,您可能需要用以下内容替换该块:

except Exception as e:
    print ("Invalid input (%s)" % e)

这将捕获(几乎)您先前捕获的所有异常,但是它也将为您提供一些有用的东西(一个异常名称)