2009-07-02 1 views
50

다음은 삼각형을 나타내는 사용자 정의 클래스입니다. self.a, self.bself.c이 0보다 큰지 확인하는 코드를 작성하려고합니다. 이는 각도, 각도, 각도를 의미합니다.Python에서 AND 및 NOT 연산자 사용

아래에서 A와 B를 확인하는 코드가 표시됩니다. 단, self.a != 0을 사용할 경우 제대로 작동합니다. 나는 &을 올바르게 사용하지 않는다고 생각합니다. 어떤 아이디어? 여기에 내가 그것을 호출 오전 방법입니다 &는 비트 연산자이기 때문에

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 
+64

@ 노아 클라크 : 파이썬을 가르치기 위해 어떤 책을 읽고 계십니까? 별로 좋지 않습니다. 내가 그것에 대해 추천 할 수 있도록 알고 싶습니다. –

+364

S. Lott, 저는 실제로 당신을 사용하고 있습니다! 사용을 중단해야합니까? –

+25

앞으로 모두에게 : S. Lott는 분명히 자신의 운동을 인정했습니다. –

답변

100

당신이 작성해야 :

if (self.a != 0) and (self.b != 0) : 

"&는"비트 현명한 연산자와 부울 작업에 적합하지 않습니다. "&&"과 동등한 것은 파이썬에서 "and"입니다.

당신이 원하는 것을 확인하는 짧은 방법은 조작 "의"를 사용하는 것입니다

: 아무것도 "에서"와 반복 가능의 일부인 경우

if 0 not in (self.a, self.b) : 

당신은 확인할 수 있습니다, 그것은 작동

  • 튜플. 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. , 당신은 튜플 객체를 생성하기 때문에 느리다 "의"사용 예

    ,하지만 정말 공연은 여기에 문제가되지 않습니다 : IE : "foo" in {"foo" : "bar"}는 의견에 대한 답변으로

사실

를 반환합니다 플러스 가독성은 파이썬에서 많이 중요합니다. 삼각형 검사에 대한

, 그것은 읽기 쉽게 :

0 not in (self.a, self.b, self.c) 

(self.a != 0) and (self.b != 0) and (self.c != 0) 

보다 그것은 너무 리팩토링하는 것이 더 쉽습니다.

물론이 예제에서는 실제로 그다지 중요하지 않지만 아주 간단한 내용입니다.그러나이 스타일은 파이썬 코드로 이어져 큰 프로그램에서 더 행복한 프로그래머 (그리고 체중 감량, 성생활 개선 등)로 이어집니다.

+7

왜 "0이 (self.a, self.b)에 없다면 :"더 짧습니까? 그게 정말 관용적 인 비단뱀입니까? 그렇습니다. 문자가 짧지 만 속도는 느립니다. 튜플을 만들어야하고 어색해 보인다. – Tom

+9

그런 적은 데이터 묶음의 속도는 문제가되지 않습니다. 어쨌든, 파이썬에서의 속도보다 읽기 쉬운 것이 더 중요합니다. 이 경우 3 각도를 확인하려면 3 "및"보다이 방법을 사용하는 것이 더 깔끔하기 때문에 매우 유용합니다. –

+5

일반적으로 왼쪽면이 가변 일 때와 같이 사용하십시오. x가 (2, 3, 5, 7) ... – FogleBird

20

print myTri.detType() 키워드 and하지 &를 사용합니다.

조심하십시오. 자바와 C++에서 & 연산자는 비트 연산자입니다. 해당 언어에서 부울 비교를 수행하는 올바른 방법은 &&입니다. 마찬가지로 |은 비트 연산자이고 ||은 부울 연산자입니다. Python andor은 부울 비교에 사용됩니다.

+8

_standard_ (즉, 타사 ;-) C++에서'&& '대신'and'를 사용할 수도 있습니다. –

+3

와우! 네가 할 수 있을지 전혀 모르겠다, 알렉스. 나는 C++에 정통한 친구 몇 명에게 물어 봤지만 그들은 몰랐다. 또한 온라인에서 찾기가 쉽지 않습니다. 그러나 충분히, 나는 그것을 시도하고 그것은 일했다 :-). 감사! – Tom

8

파이썬에서는 andor이라고합니다.