背景故事:我一直在努力学习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/
应该如此
遗漏了什么?此外,如果您可以深入了解代码背后的含义信息,以帮助进一步学习。谢谢大家!
答案 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'."