2012-10-25 10 views
6

コンパイラを示した:私が間違っていたPythonのでSyntaxError:機能外 'リターン'

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

あなたのインデントが矛盾しています。 PEP-8で推奨されているように、インデント・レベルごとに4つのスペースを使用してください。 –

+0

@Tichodroma上記のコードを更新しました。しかし、それはまだ機能の外に 'リターン'を示しています... – lavitanien

+2

あなたはまだ矛盾したインデントを持っています。インデントのレベルごとに* 4 *スペースを使用してください。今はまだ4つのスペースと8つのスペースが混在しています。 –

答えて

10

私はインデントをチェックします。タブとスペースを混在させる可能性はありますか? PEP8 (Python Style Guide)4 spaces onlyを使用することをお勧めします。他の言語とは異なり、空白はPythonに大きな違いをもたらします。したがって、一貫性が重要です。

-tオプションでPythonのコマンドラインインタプリタを起動し、 それは違法タブとスペースをミックスしたコードに関する警告を発行します。

上記は、次の勧告を行います。 -ttを使用すると、これらの警告はエラーになります。これらのオプションは、高度に がおすすめです!特に

elseあなたの第二は、私はあなたの他のdefのと同じレベルであるべきだと思うことになる(あまりにも(おそらくインデントされなければならない)オフであるように思われ、この方法def __div__(self, other): - すなわち、 "移動インデントされているのではなく「外に出す」)。

両方の文字が「見えない」ため、タブ/ブランクを混ぜても問題はありません。私のコピー&ペーストすることで

+1

@Tichodromaは合意しました。私はちょっとコメントを追加していました。 – 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

まあ私はpythonの世界に新しいです。私が学んだことは、リターンステートメントがこのような何かになるはずです。

例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] 

例2: -

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