Использование оператора 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) :
"&
" является битовым мудрым оператором и не подходит для булевых операций. Эквивалент "&&
"is" и " в Python.
более короткий способ проверить, что вы хотите, это использовать оператор "in":
if 0 not in (self.a, self.b) :
вы можете проверить, является ли что-либо частью iterable с "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)
легче рефакторинг тоже.
конечно, в данном примере это действительно не так важно, это очень простой фрагмент. Но этот стиль приводит к Питоническому коду, который приводит к более счастливому программисту (и похудению, и улучшению сексуальной жизни и т. д.) на больших программах.
ключевое слово and
, а не &
, потому что &
немного оператора.
будьте осторожны с этим... просто, чтобы вы знали, в Java и c++,&
оператор также является битовым оператором. Правильный способ сделать логическое сравнение этих языках &&
. Аналогично |
является битовым оператором, и ||
является логическим оператором. В Python and
и or
используются для логических сравнений.