代码不符合条件的条件吗? [Python 3]

时间:2015-02-09 14:50:01

标签: python python-3.x

所以我有以下功能:

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”时,它会出现响应“响应无效!答案必须为'是'或'否'。”

我无法弄清楚为什么我的生活,我现在已经盯着它看了一会儿。有人可以帮助我吗?

2 个答案:

答案 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

此代码还可确保用户在提示时第二次正确回答。