2016-11-10 32 views
0

我对python编程相当陌生,最近遇到了这个问题。“或”与Python中的按位运算符之间的区别

while(True): 
panelType = input("Enter the type of panel[a, b, c, d]: ") 
if(panelType.lower() != "a" 
    | panelType.lower() != "b" 
    | panelType.lower() != "c" 
    | panelType.lower() != "d"): 
    logger.error("Not a valid input. Try Again") 
else: 
    break 

当我使用位运算符我得到这个错误:unsupported operand type(s) for |: 'str' and 'str'。但是,一旦我将其更改为OR运营商,它运行良好。

任何人都可以解释为什么发生这种情况?

感谢

+1

使用'如果panelType.lower()未在集合([ '一', 'B', 'C', 'd'])'。 – SparkAndShine

回答

4

!=具有优先级低于|所以它试图计算"a" | panelType.lower()这是没有意义的。

|是运营商意味着数字,类似*+,因此是很有意义你会做比较,如>!=之前计算。在这种情况下,您想要or,它的优先级更低。

更好的是:

if panelType.lower() in ('a', 'b', 'c', 'd'): 
+0

酷!谢谢您的帮助。我试图在其他帖子中找到答案,但我只是不知道要搜索什么 – djskj189

相关问题