2

我一直在使用 Python,但似乎无法通过字符串比较。我写了一个函数来接受用户输入并评估它。用户输入只能是“a”或“b”,否则会出错。我一直在使用这个:

def checkResponse(resp):
    #Make the incoming string trimmed & lowercase
    respRaw = resp.strip()
    respStr = respRaw.lower()
    #Make sure only a or b were chosen
    if respStr != "a" | respStr != "b":
        return False
    else:
        return True

但是,当我输入aor时b,我收到:TypeError: unsupported operand type(s) for |: 'str' and 'str'

这是比较字符串的不正确方法吗?是否有内置函数可以像 Java 一样执行此操作?谢谢!

4

2 回答 2

7

|是按位或运算符。你想要or。(你实际上想要and。)

你写了:

if respStr != "a" | respStr != "b":

位运算符具有高优先级(类似于其他算术运算符),因此这相当于:

if respStr != ("a" | respStr) != "b":

其中两个!=操作是链式比较运算符x != y != z相当于x != y and y != z)。按位或应用于两个字符串是没有意义的。

你的意思是写:

if respStr != "a" and respStr != "b":

您还可以使用链式运算符编写:

if "a" != respStr != "b":

或者,使用包含运算符in

if respStr not in ("a", "b"):
于 2012-07-16T17:00:07.723 回答
5

您想要的是respStr != 'a' and respStr != 'b'or是布尔运算符,|按位运算符-但是,您需要and进行检查)。

但是,您可以以更好的方式编写条件,而无需重复变量名称:

return respStr in ('a', 'b')

True如果 respStr 是aorb否则这将返回False

于 2012-07-16T17:02:59.353 回答