如果带输入的语句检查输出不正确

时间:2016-09-18 06:02:20

标签: 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'):
    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)

问题是:我如何做一个能够处理错误答案的重复出现。如果他们使用的是其他内容,那么列出的是,它将打印please use ('y' or 'yes' or 'Y' or 'Yes' or 'YES'),然后再次提示并允许输入。我知道我将不得不将其更改为嵌套的if语句以允许相同而不移动到下一个。同样,当我使用代码并输入'y'时,它将以我的默认值(firefox)打开,但是如果我输入任何其他内容,它只会在没有谷歌搜索的情况下在IE中打开,而是像{{1一样“搜索”而不是http://fun/应该如此 遗漏了什么?此外,如果您可以深入了解代码背后的含义信息,以帮助进一步学习。谢谢大家!

2 个答案:

答案 0 :(得分:1)

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

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

快速且易懂。

这就是你的病情不起作用的原因 我们说我们输入了'no'。让我们看看你的if语句会发生什么:
1.首先,评估('y' or 'yes' or 'Y' or 'Yes' or 'YES')。由于Python中的非空字符串转换为True,因此该部分将完全评估为True
然后,进行比较。它看起来像这样:

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'")

答案 1 :(得分:1)

以下代码应该有效:

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,是,是,是和n,否,否,否将转换为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'."