对不起,我基本上是一名婴儿编码员。当我尝试运行此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 = (
"""
-----
| |
|
|
|
|
|
|
|
--------
""",
"""
-----
| |
| 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条生命。 到目前为止,这个词是******************。
输入字母:
答案 0 :(得分:0)
像这样的包罗万象的except
通常是不好的,因为它使您完全了解当前所处的那种情况:有些事情失败了,但您不知道是什么。
您可以做的第一件事是删除(或仅注释掉)except块,然后看看会发生什么。 Python将引发异常并结束程序(因为不再有异常处理)。虽然看起来很糟糕,但Python还将打印错误的详细信息,这将帮助您了解发生了什么。
执行完此操作后,您可能需要用以下内容替换该块:
except Exception as e:
print ("Invalid input (%s)" % e)
这将捕获(几乎)您先前捕获的所有异常,但是它也将为您提供一些有用的东西(一个异常名称)