2009-07-02 16 views
50

में एंड्रॉइड ऑपरेटर का उपयोग करना यहां मेरी कस्टम क्लास है जो मेरे पास त्रिकोण का प्रतिनिधित्व करती है। मैं कोड लिखने की कोशिश कर रहा हूं जो यह देखने के लिए जांच करता है कि self.a, self.b, और self.c 0 से अधिक हैं, जिसका अर्थ है कि मेरे पास कोण, कोण, कोण है।पायथन

नीचे आप ए और बी के लिए जांचने वाले कोड को देखेंगे, हालांकि जब मैं केवल 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 
+64

@ नोहा क्लार्क: आप पाइथन को पढ़ाने के लिए क्या पुस्तक पढ़ रहे हैं? यह बहुत अच्छा नहीं है। मैं जानना चाहता हूं इसलिए मैं इसके खिलाफ सिफारिश कर सकता हूं। –

+364

एस लॉट, मैं वास्तव में तुम्हारा उपयोग कर रहा हूँ! क्या मुझे इसका इस्तेमाल करना बंद कर देना चाहिए? –

+25

भविष्य में सभी को: एस लॉट ने स्पष्ट रूप से अपने अभ्यास को पहचाना है। –

उत्तर

100

आप लिखना चाहिए:

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

"&" बिट बुद्धिमान ऑपरेटर है और बूलियन संचालन के लिए सूट नहीं करता है। पाइथन में "&&" के बराबर "और" है।

आप क्या चाहते हैं की जाँच करने के एक छोटा रास्ता ऑपरेटर "में" उपयोग करने के लिए है:

:

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

आप देख सकते हैं कुछ भी "में" के साथ एक एक iterable का हिस्सा है, यह काम करता है के लिए

  • टुपल्स। आईई: "foo" in ("foo", 1, c, etc) सच
  • सूची लौटाएगा। आईई: "foo" in ["foo", 1, c, etc] सच
  • स्ट्रिंग्स वापस आ जाएगा। आईई: "a" in "ago" सच हो जाएगा
  • डिक्ट। आयरलैंड के लिए: "में" धीमी है जब से तुम एक टपल वस्तु पैदा कर रहे

    हाँ, का उपयोग करते हुए, लेकिन वास्तव में प्रदर्शन एक मुद्दा यहाँ नहीं हैं,: "foo" in {"foo" : "bar"} टिप्पणी करने के लिए वापस आ जाएगी सच

एक जवाब के रूप में प्लस पठनीयता में पाइथन में बहुत कुछ मायने रखता है।

त्रिकोण जांच के लिए इसे पढ़ने के लिए आसान है:

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

से

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

यह भी refactor करने के लिए आसान है।

बेशक, इस उदाहरण में, यह वास्तव में महत्वपूर्ण नहीं है, यह बहुत ही सरल स्निपेट है।लेकिन यह शैली एक पाइथोनिक कोड की ओर ले जाती है, जो बड़े कार्यक्रमों पर एक खुश प्रोग्रामर (और वजन कम करना, यौन जीवन में सुधार आदि) की ओर जाता है।

+7

क्यों "अगर 0 में नहीं है (self.a, self.b):" छोटा? क्या वह वास्तव में बेवकूफ अजगर है? हां यह कुछ पात्रों से छोटा है, लेकिन शायद धीमा है। आपको एक ट्यूपल बनाना है और यह सिर्फ अजीब दिखता है। – Tom

+9

डेटा के इतने छोटे समूह पर गति कोई मुद्दा नहीं है। वैसे भी, Python में गति अक्सर पढ़ने के लिए और अधिक महत्वपूर्ण है। इस मामले में, यह बहुत उपयोगी है क्योंकि यदि आप 3 कोणों को देखना चाहते हैं, तो यह 3 "और" के मुकाबले इसे लिखने के लिए क्लीनर है। –

+5

आम तौर पर उस समय का उपयोग करें जब बाएं हाथ की तरफ परिवर्तनीय है, जैसे: यदि x में (2, 3, 5, 7) ... – FogleBird

20

कीवर्ड and, नहीं & का प्रयोग करें क्योंकि & थोड़ा ऑपरेटर है।

इस से सावधान रहें ... बस आप जानते हैं, जावा और सी ++ में, & ऑपरेटर एक छोटा ऑपरेटर भी है। उन भाषाओं में बूलियन तुलना करने का सही तरीका && है। इसी तरह | थोड़ा ऑपरेटर है, और || एक बूलियन ऑपरेटर है। पाइथन and और or में बूलियन तुलना के लिए उपयोग किया जाता है।

+8

आप _standard_ (यानी, गैर-माइक्रोसॉफ्ट ;-) सी ++ में '&&' के बदले 'और' का उपयोग भी कर सकते हैं। –

+3

वाह! मुझे सच में नहीं पता था कि आप ऐसा कर सकते हैं, एलेक्स। मैंने अपने कुछ सी ++ समझदार दोस्तों से पूछा और वे या तो नहीं जानते थे! ऑनलाइन खोजना भी आसान नहीं है। लेकिन यकीन है कि, मैंने कोशिश की और यह काम किया :-)। धन्यवाद! – Tom

8

इसे पायथन में and और or कहा जाता है।