If 语句输入检查不正确的输出

If statement with input check with incorrect outputs

背景故事:我一直在尝试真正学习 python 而不是仅仅从别人那里剪下来。我创建了一个使用 webbrowser 的简单脚本。它可能是一个肮脏的脚本,我喜欢像 "you should do this"、“this 这样的输入可以简化”。我想不通的是使用 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)

问题是:我如何做一个循环来处理不正确的答案。如果他们使用的不是列出的 yes,它将打印 please use ('y' or 'yes' or 'Y' or 'Yes' or 'YES'),然后再次提示并允许输入。我知道我必须将它更改为嵌套的 if 语句,以允许相同的 no 移动到下一个。同样,当我使用代码并输入 'y' 时,它将以我的默认设置(firefox)打开,但如果我输入任何其他内容,它只会在 IE 中打开而没有 google 搜索但 "searching" 喜欢 http://fun/ 而不是 https://www.google.com//search?q=fun
遗漏了什么?另外如果能post资料深入代码背后的含义,有助于进一步学习。谢谢大家!

有一种不同的方法可以检查该值是否为给定值之一。你应该让你的 if 条件是这样的:

if a in ('y', 'yes', 'Y', 'Yes', 'YES'):

速度快且易于理解。

这是您的条件不起作用的原因。
假设我们输入了 'no'。让我们看看您的 if 语句中会发生什么:
1. 首先,对 ('y' or 'yes' or 'Y' or 'Yes' or 'YES') 求值。由于 Python 中的非空字符串转换为 True,因此这部分将 完全 计算为 True
2. 然后,进行比较。看起来像这样:

if a == True:

其中 a 是一个字符串 'no'。那显然不是你想要的。使用上面介绍的方法就可以了

要不断重新询问直到收到正确的输入,请尝试使用 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, 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'."