所以我有以下功能:
def ask_question():
"""Asking a question which requires a yes or no response"""
response=input()
while response.lower()!="yes" or response.lower()!="no":
print("Invalid response! Answer must be 'Yes' or 'No'.")
response=input()
return response
然而,当我执行函数ask_question()并输入“yes”或“no”时,它会出现响应“响应无效!答案必须为'是'或'否'。”
我无法弄清楚为什么我的生活,我现在已经盯着它看了一会儿。有人可以帮助我吗?
答案 0 :(得分:3)
您需要在循环中使用and
。但为什么?
根据De Morgan's law,您的情况
response.lower()!="yes" or response.lower()!="no":
相当于:(not A) or (not B)
与not (A and B)
相同 - 这不是你想要的(即not (Yes and No)
没有给你你想要的东西)。
因此,更改查询以使用and
会更改为:
response.lower()!="yes" and response.lower()!="no":
相当于(not A) and (not B)
,它与您想要的not (A or B)
相同。换句话说:
if input is "not (Yes or No)", print invalid reponse msg
答案 1 :(得分:1)
如果小写输入不 "yes"
,或,小写输入为,则代码检查会打印消息不是 "no"
,True
几乎是用户可以提供的所有可能输入。当然你可以做if response.lower() != "yes" and response.lower() != "no":
,但它不会是非常pythonic。
相反,您可能希望使用in
运算符执行以下操作:
def ask_question():
"""Asking a question which requires a yes or no response"""
while True:
response = input("Please answer 'yes' or 'no'> ").lower()
if response not in ('yes', 'no'):
print("Invalid response! Answer must be 'yes' or 'no'.")
else:
return response
此代码还可确保用户在提示时第二次正确回答。