Python 带有输入的If语句检查输出是否错误

Python 带有输入的If语句检查输出是否错误,python,if-statement,python-3.4,Python,If Statement,Python 3.4,背景故事:我一直在努力学习python,而不是简单地从别人那里学习。我创建了一个使用webbrowser的简单脚本。这可能是一个肮脏的脚本,我想输入像“你应该这样做”,“这可以简化”。我不明白的是使用if语句来处理不正确的输入,提示,然后重新检查if语句。我试着搜索,但没有任何帮助 import webbrowser a = input ('Do you want to search?(y or n)') if a == ('y' or 'yes' or 'Y' or 'Yes' or 'YES

背景故事:我一直在努力学习python,而不是简单地从别人那里学习。我创建了一个使用
webbrowser
的简单脚本。这可能是一个肮脏的脚本,我想输入像“你应该这样做”,“这可以简化”。我不明白的是使用
if
语句来处理不正确的输入,提示,然后重新检查if语句。我试着搜索,但没有任何帮助

import webbrowser
a = input ('Do you want to search?(y or n)')
if a == ('y' or 'yes' or 'Y' or 'Yes' or 'YES'):
    b = input ('What do you want to search?')
    ab = ('https://www.google.com//search?q='+b)
    urlab = ab
    webbrowser.open(urlab)

else:
    x = input('Where do you want to go?: ')
    new = 2 # open in a new tab, if possible
    # open a public URL, in this case, the webbrowser docs
    url = x
    webbrowser.open(url)
问题是:我该如何处理错误答案的循环。如果他们使用的不是列出的是,它将打印
请使用('y'或'yes'或'y'或'yes'或'yes')
,然后再次提示并允许输入。我知道我必须将其更改为嵌套的if语句,以允许相同的no语句移动到下一个。同样,当我使用代码并输入
'y'
时,它将以我的默认值(firefox)打开,但如果我输入任何其他内容,它只会在IE中打开,而不使用谷歌搜索,而是像
http://fun/
而不是
https://www.google.com//search?q=fun
应该如此。

你遗漏了什么?此外,如果您可以发布有关代码背后含义的深入信息,以帮助进一步学习。谢谢大家!

有一种不同的方法来检查该值是否为给定值之一。您应该使您的if条件如下:

if a in ('y', 'yes', 'Y', 'Yes', 'YES'):
if a == True:
这是快速和可理解的

以下是您的情况不起作用的原因。
假设我们输入了
“no”
。让我们看看if语句中发生了什么:
1.首先,计算
('y'或'yes'或'y'或'yes'或'yes')
。由于Python中的非空字符串转换为
True
,因此此部分将全部计算为
True

2.然后,进行比较。看起来是这样的:

if a in ('y', 'yes', 'Y', 'Yes', 'YES'):
if a == True:
使用
a
作为字符串
'no'
。那显然不是你想要的。使用上述方法a,一切都会好起来

要不断地重新询问直到收到正确的输入,请使用
break
语句尝试无休止的循环:

while True:
    a = input()
    if a in ...:
        # process input
        break
    else:
        print("please use 'y' or 'yes' or 'Y' or 'Yes' or 'YES'")

以下代码应该可以工作:

import webbrowser
a = 'y'
while a != 'n':
    a = input ('Do you want to search?(y or n)')
    a = a[0].lower()
    if a in  "y":
        b = input ('What do you want to search?')
        ab = ('https://www.google.com//search?q='+b)
        urlab = ab
        webbrowser.open(urlab)

    elif a not in "n":
        print "Please only enter 'y' or 'n'."
while循环告诉python循环,只要答案不是“n”

a=a[0]告诉python只使用响应的第一个字母。这是为了以后比较容易

.lower()代码告诉python将结果转换为小写。同样,这是为了以后更容易进行比较

现在,我们的答案将始终是小写,并且输入第一个字母。所以y,yes,yes,yes和n,no,no将转换为y或n。当然,任何其他文本都将以相同的方式处理(小写和第一个字符),但我们只关心y和n

剩下的应该很简单。由于我们限制了答案的可能性,我们可以做一个简单的比较

以下是仅检查是和否的修改:

import webbrowser
a = 'y'
while a != 'n':
    a = input ('Do you want to search?(y or n)')
    a = a.lower()
    if a in  ("y", "yes"):
        b = input ('What do you want to search?')
        ab = ('https://www.google.com//search?q='+b)
        urlab = ab
        webbrowser.open(urlab)
    elif a in "no"
        a = "n"
    elif a not in ("n", "no"):
        print "Please only enter 'y' or 'n'."

@Leva7的比较比我的好,因为我的比较会将任何以“y”开头的东西视为是,而将任何以“n”开头的东西视为否。不过,在这种情况下,这可能不是问题。谢谢你,巴德,我真的很喜欢转换。这是我现在可以使用的东西,以后当我更深入的时候可以使用。再次感谢!别忘了选择答案;)与往常一样,python社区提供了清晰、非恶意的响应。非常感谢。我可能会考虑同时使用你的和@jasonD回复来学习如何使用这两种风格。再次感谢!!这与你的问题无关,但你要保证这是你最后一次使用像“a”、“b”、“x”这样的垃圾变量名。每个必须阅读这样代码的人都讨厌编写代码的人,几个月后你回来阅读自己的代码时,也包括你在内。改用有意义的名称:“a”可能是“continue”b'可能是“搜索字符串”;'“x”可能是“新url”。做出这样的承诺,以后不要再恨自己了:)。谢谢你的建设性建议。这就是他们在我的基础课上展示我的方式,它有点消失了。我会记住这一点,并且一定会做到!谢谢我得了令人震惊的感冒,只是在稍微好一点的状态下重新阅读了我的评论,只是想在别人之前指出,我建议使用“continue”作为变量名是非常愚蠢的“继续”是保留的。也许“用户继续”或类似的东西会更有意义。对不起,尽管我犯了错误,但我希望主要观点有一定道理:)