【问题标题】:My python code has errors, but just in the try- except loop. [duplicate]我的 python 代码有错误,但只是在 try-except 循环中。 [复制]
【发布时间】:2019-04-29 18:12:27
【问题描述】:

我的 python 代码在 try-except 循环中有一些错误。如果您输入的输入不是“是”或“否”,它首先会打印“是”回复输出,然后在您回答问题后,如果您不输入“是”或“否”,它会显示输出。代码如下:

playAgain = None

while playAgain != "Yes" or "No" or "yes" or "no" or "y" or "n":
    try:
            playAgain = str(input("Do you want to play again? Enter Yes or No: "))         
            if playAgain == "Yes" or "y" or "yes":
                displayIntro()
            elif playAgain == "No" or "no" or "n":
                print("Oh, well. The magic 8 ball will see you next time...")
                sys.exit()
    except:
                print("That wasn't yes or no, idiot. The magic 8 ball will not give a fortune to such an imbocile.")

请帮忙,谢谢!

【问题讨论】:

  • try except 不是循环。 except 捕获发生在 try 中的错误。如果没有发生错误,您将永远无法访问except

标签: python


【解决方案1】:
playAgain != "Yes" or "No" or "yes" or "no" or "y" or "n"

这不是正确的方法。

当您说playAgain != "Yes" 时,您需要对剩余的表达式执行相同的操作。所以一个有效的方法来做你打算做的事情如下:

playAgain != "Yes" or playAgain != "No" or playAgain != "yes" or playAgain != "no" or playAgain != "y" or playAgain != "n"

但这很丑而且太长了。

改为使用

playAgain not in ["Yes", "No", "yes", "no", "y", "n"]

在 Python 中,我们有一些方便的方法来处理此类问题。您可以使用in 运算符检查可能值列表中是否存在(或不存在)相关字符串。读起来也很好:“如果 playAgain (is) not in [this list of values]”。

您甚至可以操作输入,以便您更轻松地使用。也就是说,您降低所有字母并且不检查区分大小写的输入(如果您真的不关心区分大小写的输入;您真的关心是Yes 还是yEs?):

playAgain.lower() not in ["yes", "y"]

应该这样做:

while True:
    playAgain = str(input("Do you want to play again? Enter Yes or No: "))         

    if playAgain.lower() in ["yes", "y"]:
        # do something with your yes input. Consider `break` out of the endless loop.
    elif playAgain.lower() in ["no", "n"]:
        # do something with your no input. Consider `break` out of the endless loop.
    else:
        print("That wasn't yes or no.")

请注意,上述循环是无限的。您需要根据您的程序逻辑进行突破。也就是说,当您需要跳出无限循环时,您需要在某处放置 break 语句。

【讨论】:

  • 感谢您的帮助。此代码已被编辑:
  • playAgain = None 而 playAgain 不在 ["Yes", "No", "yes", "no", "y", "n"]: try: playAgain = str(input("你想再玩一次吗?输入是或否:")) if playAgain == ["Yes", "y", "yes"]: displayIntro() elif playAgain == ["No" "no", "n "]: print("哦,好吧。魔法 8 球下次见……") sys.exit() except: print("那不是是或不是,白痴。魔法 8 球不会给这样一个愚蠢的人发财。”)
  • 但是,这仍然不起作用。
  • 我提供了一个完整的例子。您的代码不起作用,因为您仍然有 if playAgain == ["Yes", "y", "yes"] 它应该在的位置:if playAgain in ["Yes", "y", "yes"]。你在两个地方有同样的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多