これは、三角形を表すカスタムクラスです。 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
あなたは書くべきです:
if (self.a != 0) and (self.b != 0) :
「&
」はビット単位の演算子であり、ブール演算には適していません。 Pythonでは、「&&
」に相当するのは「and」です。
欲しいものをチェックする簡単な方法は、「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を返しますコメントへの回答として:
はい。Tupleオブジェクトを作成しているため、「in」の使用は遅くなりますが、実際にはパフォーマンスは問題ではなく、Pythonでは読みやすさが重要です。
三角形のチェックについては、読みやすいです:
0 not in (self.a, self.b, self.c)
より
(self.a != 0) and (self.b != 0) and (self.c != 0)
リファクタリングも簡単です。
もちろん、この例では、実際にはそれほど重要ではなく、非常に単純なスニペットです。しかし、このスタイルはPythonicコードにつながり、大きなプログラムでより幸せなプログラマー(そして体重の減少、性生活の改善など)につながります。
&
はビット演算子であるため、&
ではなくキーワードand
を使用します。
これに注意してください... JavaとC++では、&
演算子はビット演算子でもあります。これらの言語でブール比較を行う正しい方法は、&&
です。同様に、|
はビット演算子であり、||
はブール演算子です。 Python and
およびor
はブール比較に使用されます。
Pythonではand
およびor
と呼ばれます。