Использование оператора AND и NOT в Python [дубликат]
этот вопрос уже есть ответ здесь:
вот мой пользовательский класс, который у меня есть, который представляет собой треугольник. Я пытаюсь написать код, который проверяет, если self.a
,self.b
и self.c
больше 0, что означает, что У меня есть угол, угол, угол.
ниже вы увидите код, который проверяет для A и B, однако, когда я использую self.a != 0
затем он отлично работает. Я считаю, что я не использую &
правильно. Есть идеи? Вот как я это называю:print myTri.detType()
class Triangle:
# Angle A To Angle C Connects Side F
# Angle C to Angle B Connects Side D
# Angle B to Angle A Connects Side E
def __init__(self, a, b, c, d, e, f):
self.a = a
self.b = b
self.c = c
self.d = d
self.e = e
self.f = f
def detType(self):
#Triangle Type AAA
if self.a != 0 & self.b != 0:
return self.a
#If self.a > 10:
#return AAA
#Triangle Type AAS
#elif self.a = 0:
#return AAS
#Triangle Type ASA
#Triangle Type SAS
#Triangle Type SSS
#else:
#return unknown
3 ответа:
вы должны написать :
if (self.a != 0) and (self.b != 0) :
"
&
" является битовым оператором и не подходит для булевых операций. Эквивалент "&&
" есть "и" в Python.более короткий способ проверить, что вы хотите, это использовать оператор "in":
if 0 not in (self.a, self.b) :
вы можете проверить, является ли что-либо частью итерационного с "in", он работает для :
- ОК. То Есть:
"foo" in ("foo", 1, c, etc)
вернет true- списки. То Есть:
"foo" in ["foo", 1, c, etc]
будет возвращает true- строки. То Есть:
"a" in "ago"
вернет true- дикт. То Есть:
"foo" in {"foo" : "bar"}
вернет trueв качестве ответа на комментарии:
Да, использование "in" медленнее, так как вы создаете объект кортежа, но на самом деле производительность здесь не проблема, плюс читаемость имеет большое значение в Python.
для проверки треугольника, это легче читать:
0 not in (self.a, self.b, self.c)
чем
(self.a != 0) and (self.b != 0) and (self.c != 0)
это легче рефакторинга тоже.
конечно, в данном примере это действительно не так важно, это очень простой фрагмент. Но этот стиль приводит к подходящие для Python код, который ведет к счастливой программист (и потери веса, улучшения сексуальной жизни и т. д.) по большим программам.
ключевое слово
and
, а не&
, потому что&
- это битовый оператор.будьте осторожны с этим... просто чтобы вы знали, в Java и C++,
&
оператор также является битовым оператором. Правильный способ сделать логическое сравнение этих языках&&
. Точно так же|
является битовым оператором, а||
является логическим оператором. В Pythonand
иor
используются для логических сравнений.