Ошибка обработки условия сравнения строк

a="Hello"
b="World"
c="Hello"
d="World"
if a==b & c==d :
    print("success")
    

при запуске выдается ошибка:

(unsupported operand type(s) for &: 'str' and 'str')


Ответы (2 шт):

Автор решения: Selasi

Python3 не имеет логического оператора &, вместо оператора & поставьте and, вот так:

a="Hello"
b="World"
c="Hello"
d="World"
if a==b and c==d:
    print("success")
→ Ссылка
Автор решения: Zhihar
  1. для логических условий надо использовать and вместо &&

    if a==b and c==d
    
  2. & - это побитовое "и" и в данном примере он может быть использован:

ошибка:

unsupported operand type(s) for &: 'str' and 'str'

связана с тем, что оператор & имеет больший приоритет, чем оператор ==, поэтому питон пытается выполнить операцию

b & c

но b и c - это строки, а для них оператора побитового "И" не существует

однако если правильно расставить приоритеты, то можно & применить:

if (a==b) & (c==d):

теперь сначала будут вычислены a==b и c==d и хотя они булевы, но булевы однозначно соотносятся с целочисленными значениями - False - 0, True - 1

потому что будут возможны 2 варианты:

  • a == b и c == d - т.е. будет 1 & 1, т.е. 1 и условие будет выполнено
  • a != b и c == d - т.е. будет 0 & 1, т.е. 0 и условие не будет
  • a == b и c != d - т.е. будет 1 & 0, т.е. 0 и условие не будет
  • a != b и c != d - т.е. будет 0 & 0, т.е. 0 и условие не будет

таким образом в данном случае будет выполнено логическое "И" между 0/1 и 0/1 и будет эквивалентна if a==b and c==d:

→ Ссылка