2016-11-10 5 views
0

Я довольно новичок в программировании на питоне, и недавно я столкнулся с этой проблемой.Разница между «или» и побитовым оператором в 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() не в наборе ([ 'а', 'б', 'с', 'd'])'. – SparkAndShine

ответ

4

!= имеет более низкий приоритет, чем | поэтому он пытался вычисления "a" | panelType.lower(), который не имеет никакого смысла.

| оператор предназначен для чисел, подобных * или +, так что имеет смысл вы бы вычислить его, прежде чем делать сравнения, такие как > или !=. Вы хотите or в этом случае, который имеет более низкий приоритет.

еще лучше:

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

Прохладный! Спасибо за помощь. Я пытался найти ответы в других сообщениях, но я просто не знал, что искать – djskj189

 Смежные вопросы

  • Нет связанных вопросов^_^