gpt4 book ai didi

python - 案例之间不支持“<” - 猜数字游戏

转载 作者:行者123 更新时间:2023-11-30 22:36:30 25 4
gpt4 key购买 nike

我正在尝试用 Python 为学校项目创建一个猜数字游戏。我已经制作了一个运行得相当好的基本游戏,但我想添加一些异常处理,以防用户输入错误的内容。例如,这是我的代码的一部分:

def Normal_Guess():
number = round(random.uniform(0.0, 100.0),2)
guess = ""
while guess != number:
try:
guess = float(input("Please guess a number between 0 and 100: "))
except ValueError or TypeError:
print ("That isn't even a number!")

if guess < number and guess >= 0:
print ("You need to guess higher!")
elif guess > number and guess <= 100:
print ("You need to guess lower!")
elif guess == number:
print("Congratulations! You guessed the number!")
elif guess < 0 or guess > 100:
print ("The number you guessed is not between 0 and 100")
else:
print("That isn't even a number!")
New_Game()

当用户输入浮点或整数值作为“猜测”时,这工作正常,并且如果用户首先输入除数字之外的任何内容,我的 Try-Except 子句似乎会捕获,但程序似乎也会继续到“if”语句。我收到一个 TypeError 消息,指出“'str' 和 'float' 实例之间不支持'<'”。

我尝试过将整个循环包含在 Try-Except 子句中,但这不起作用。我不知道我做错了什么。非常感谢任何帮助。

最佳答案

首先,您捕获异常的方式无效。表达式 ValueError 或 TypeError 的值始终为 ValueError,因为这就是短路如何处理两个非 False 参数。要获取两种类型的错误来触发 block ,请使用元组,例如(ValueError, TypeError)

问题是,即使代码中捕获到异常,它也会继续到 if block 。您有四个简单的选择可以避免这种情况:

  1. except block 中使用 continue 语句告诉循环继续前进,而不处理以下 if 结构:

    try:    guess = float(input("Please guess a number between 0 and 100: "))except (ValueError, TypeError):    print ("That isn't even a number!")    continue

    这可能是四个选项中最简洁、最简单的。

  2. 不要使用 except block 来响应错误。相反,依赖于猜测值仍然是 "" 的事实。为此,您必须在循环的每次迭代中预先初始化猜测,而不是在循环外进行一次:

    while guess != number:    guess = ""    try:        guess = float(input("Please guess a number between 0 and 100: "))    except (ValueError, TypeError):        pass        if guess == "":        print ("That isn't even a number!")    elif guess < number and guess >= 0:        ...

    就我个人而言,我不喜欢这种方法,因为它需要在每个循环中进行初始化。这还不错,只是不如选项 #1 干净。

    此选项的一个变体是直接检查 guess 是否是 str 的实例。然后,您可以将其初始化为用户输入,从而使转换操作更加清晰:

    while guess != number:    guess = input("Please guess a number between 0 and 100: ")    try:        guess = float(guess)    except (ValueError, TypeError):        pass        if isinstance(guess, str):        print ("That isn't even a number!")    elif guess < number and guess >= 0:        ...
  3. 使用 else 子句,它是 try block 的可能元素之一。仅当没有发生异常时,此子句才会执行:

    try:    guess = float(input("Please guess a number between 0 and 100: "))except (ValueError, TypeError):    print ("That isn't even a number!")else:    if guess < number and guess >= 0:        ...

    虽然此选项会创建额外的缩进层,但对于那些普通的 continue 不起作用的情况,值得记住。当您需要在分支之前对错误和非错误情况进行额外处理时,有时会发生这种情况。

  4. 将整个 if block 放入 try block 中。这样只有在没有错误的情况下才会执行。这是我最不喜欢的选项,因为我喜欢尽可能精简我的 try block ,以避免捕获我不打算捕获的异常。在 Python 中,与 Java 等语言相比,try 对性能的影响相对较小,因此对于您的简单情况,这仍然是一个选项:

    try:    guess = float(input("Please guess a number between 0 and 100: "))    if guess < number and guess >= 0:        ...except (ValueError, TypeError):    print ("That isn't even a number!")

关于python - 案例之间不支持“<” - 猜数字游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44140553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com