Использование оператора AND и NOT в Python
Вот мой собственный класс, который у меня есть, который представляет собой треугольник. Я пытаюсь написать код, который проверяет, больше ли self.a
, self.b
и self.c
больше 0, что означает, что у меня есть Angle, Angle, Angle.
Ниже вы увидите код, который проверяет 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
Ответы
Ответ 1
Вы должны написать:
if (self.a != 0) and (self.b != 0) :
"&
" - бит-мудрый оператор и не подходит для булевых операций. Эквивалент "&&
" есть "и" в Python.
Более короткий способ проверить, что вы хотите, использовать оператор "in" :
if 0 not in (self.a, self.b) :
Вы можете проверить, является ли что-то частью итерабельного с "in" , оно работает для:
- кортежей. I.E:
"foo" in ("foo", 1, c, etc)
вернет true
- Списки. I.E:
"foo" in ["foo", 1, c, etc]
вернет true
- Строки. I.E:
"a" in "ago"
вернет true
- Dict. I.E:
"foo" in {"foo" : "bar"}
вернет true
В качестве ответа на комментарии:
Да, использование "in" выполняется медленнее, так как вы создаете объект Tuple, но на самом деле производительность здесь не проблема, плюс читаемость имеет большое значение в Python.
Для проверки треугольника легче читать:
0 not in (self.a, self.b, self.c)
Чем
(self.a != 0) and (self.b != 0) and (self.c != 0)
Это проще для рефакторинга.
Конечно, в этом примере это действительно не так важно, это очень простой фрагмент. Но этот стиль приводит к Pythonic-коду, что приводит к более счастливому программисту (и похуде, улучшению сексуальной жизни и т.д.) В больших программах.
Ответ 2
Используйте ключевое слово and
, а не &
, потому что &
- бит-оператор.
Будьте осторожны с этим... так, чтобы вы знали, что на Java и С++ оператор &
ТАКЖЕ является оператором бит. Правильный способ выполнения логического сравнения на этих языках - &&
. Аналогично |
является оператором бит, а ||
является булевым оператором. В Python and
и or
используются для булевых сравнений.
Ответ 3
Он назвал and
и or
в Python.