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'."
背景故事:我一直在尝试真正学习 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'."