2012-10-25 25 views
6

संकलक बाहर से पता चला है:अजगर सिंटैक्स त्रुटि: 'वापसी' समारोह

File "temp.py", line 56 
    return result 
SyntaxError: 'return' outside function 

कहाँ मैं गलत था?

class Complex (object): 
    def __init__(self, realPart, imagPart): 
     self.realPart = realPart 
     self.imagPart = imagPart    

    def __str__(self): 
     if type(self.realPart) == int and type(self.imagPart) == int: 
      if self.imagPart >=0: 
       return '%d+%di'%(self.realPart, self.imagPart) 
      elif self.imagPart <0: 
       return '%d%di'%(self.realPart, self.imagPart) 
    else: 
     if self.imagPart >=0: 
       return '%f+%fi'%(self.realPart, self.imagPart) 
      elif self.imagPart <0: 
       return '%f%fi'%(self.realPart, self.imagPart) 

     def __div__(self, other): 
      r1 = self.realPart 
      i1 = self.imagPart 
      r2 = other.realPart 
      i2 = other.imagPart 
      resultR = float(float(r1*r2+i1*i2)/float(r2*r2+i2*i2)) 
      resultI = float(float(r2*i1-r1*i2)/float(r2*r2+i2*i2)) 
      result = Complex(resultR, resultI) 
      return result 

c1 = Complex(2,3) 
c2 = Complex(1,4) 
print c1/c2 

इसके बारे में क्या?

class Complex (object): 
    def __init__(self, realPart, imagPart): 
     self.realPart = realPart 
     self.imagPart = imagPart    

    def __str__(self): 
     if type(self.realPart) == int and type(self.imagPart) == int: 
      if self.imagPart >=0: 
       return '%d+%di'%(self.realPart, self.imagPart) 
      elif self.imagPart <0: 
       return '%d%di'%(self.realPart, self.imagPart) 
     else: 
      if self.imagPart >=0: 
       return '%f+%fi'%(self.realPart, self.imagPart) 
      elif self.imagPart <0: 
       return '%f%fi'%(self.realPart, self.imagPart) 

    def __div__(self, other): 
     r1 = self.realPart 
     i1 = self.imagPart 
     r2 = other.realPart 
     i2 = other.imagPart 
     resultR = float(float(r1*r2+i1*i2)/float(r2*r2+i2*i2)) 
     resultI = float(float(r2*i1-r1*i2)/float(r2*r2+i2*i2)) 
     result = Complex(resultR, resultI) 
     return result 

c1 = Complex(2,3) 
c2 = Complex(1,4) 
print c1/c2 
+3

आपका दांतेदार बनाना असंगत है। पीईपी -8 द्वारा अनुशंसित प्रति अनुमान स्तर के चार रिक्त स्थान का उपयोग करें। –

+0

@ टिचोड्रोमा मैंने उपरोक्त कोड को अपडेट किया है। लेकिन यह अभी भी फ़ंक्शन के बाहर 'वापसी' दिखाता है ... – lavitanien

+2

आपके पास अभी भी असंगत इंडेंट है। कृपया प्रत्येक स्तर के संकेत के लिए * चार * रिक्त स्थान का उपयोग करें। अभी आपके पास अभी भी चार और आठ रिक्त स्थान मिश्रित हैं। –

उत्तर

10

मैं अपना इंडेंटेशन जांचूंगा, ऐसा लगता है। क्या आप संभवतः टैब और रिक्त स्थान मिला रहे हैं? PEP8 (Python Style Guide)4 spaces only का उपयोग करने की अनुशंसा करता है। अन्य भाषाओं के विपरीत, व्हाइट स्पेस पायथन में एक बड़ा अंतर बनाता है, इसलिए स्थिरता महत्वपूर्ण है।

जब आयकर विकल्प के साथ अजगर कमांड लाइन दुभाषिया लागू, यह कोड है कि अवैध रूप से टैब और रिक्त स्थान घुलमिल के बारे में चेतावनी जारी करता है:

ऊपर भी निम्न सिफारिश करता है। इन चेतावनियों का उपयोग करते समय त्रुटियां बन जाती हैं। ये विकल्प अत्यधिक अनुशंसित हैं!

विशेष रूप से, अपने 2 else बंद (शायद इंडेंट किया जाना चाहिए) हो रहा है, और इस विधि def __div__(self, other): भी (जो मुझे लगता है कि अपनी अन्य def रों के रूप में एक ही स्तर पर होना चाहिए - यानी, ले जाया गया " बाहर "इंडेंट के बजाय)।

टैब/रिक्त स्थान मिश्रण करने में समस्याएं आसान हैं क्योंकि दोनों वर्ण "अदृश्य" हैं।

+1

@ टिचोड्रोमा सहमत हुए .. मैं बस कुछ और टिप्पणी जोड़ रहा था .. – Levon

+0

मैंने उपरोक्त कोड को अपडेट किया है। लेकिन यह अभी भी कार्य के बाहर 'वापसी' दिखाता है ... – lavitanien

2

मेरी कॉपी और पेस्ट, सब कुछ इस लाइन से द्वारा:

else: 
if self.imagPart >=0: 
     return '%f+%fi'%(self.realPart, self.imagPart) 
elif self.imagPart <0: # Everything under here.. 

इस लाइन के लिए:

resultI = float(float(r2*i1-r1*i2)/float(r2*r2+i2*i2)) 
result = Complex(resultR, resultI) 
return result # Needs to be unindented. 

गलत खिसकने है।

2

सुनिश्चित करें कि आपके __div__ को आपके __str__ के समान स्तर पर घोषित किया गया है (अभी, यह __str_ के अंदर घोषित किया गया है)।

1

वैसे मैं पाइथन दुनिया के लिए नया हूं। मैंने जो सीखा वह रिटर्न स्टेटमेंट इस तरह कुछ होना चाहिए।

उदाहरण एक: -

def split_train_test(data, test_ratio): 
    shuffled_indices = np.random.permutation(len(data)) 
    test_set_size = int(len(data) * test_ratio) 
    test_indices = shuffled_indices[:test_set_size] 
    train_indices = shuffled_indices[test_set_size:] 
    return data.iloc[train_indices],data.iloc[test_indices] 

उदाहरण दो: -

def load_housing_data(housing_path=HOUSING_PATH): 
    csv_path = os.path.join(housing_path, "housing.csv") 
    return pd.read_csv(csv_path) 

मैं यहाँ उत्तर दिया: - https://stackoverflow.com/a/47377418/2298357

संबंधित मुद्दे