2016-07-07 7 views
-2
import sys 
import os.path 

class Juvenile(object): 
    def createJuv(self, pop, rate): 
     self.pop = pop 
     self.rate = rate 
    def displayJuvpop(self): 
     return self.pop 
    def displayjuvRate(self): 
     return self.rate 

class Adult(object): 
    def createAd(self, pop, rate, brate): 
     self.pop = pop 
     self.rate = rate 
     self.brate = brate 
    def displayAdpop(self): 
     return self.pop 
    def displayAdRate(self): 
     return self.rate 
    def displayBirthrate(self): 
     return self.brate 

class Senile(object): 
    def createSe(self, pop, rate): 
     self.pop = pop 
     self.rate = rate 
    def displaySepop(self): 
     return self.pop 
    def displaySerate(self): 
     return self.rate 


a = Juvenile() 
b = Adult() 
c = Senile() 
`enter code here`pop_model = raw_input("Enter the number of generations: ") 
`enter code here`pop_model = int(pop_model) 
newjuv = 0 
newsen = 0 
newadu = 0 

def menu(): 
    This = True 
    while This == True: 
     print("1) Enter Generation 0 values") 
     print("2) Display Generation 0 values") 
     print("3) Run the model") 
     print("4) Export data") 
     print("5) Quit") 
     decision = raw_input("") 
     if decision == "1": 
      Gen0values() 
     elif decision == "2": 
      display() 
     elif decision == "3": 
      run() 
     elif decision == "4": 
      export() 
     elif decision == "5": 
      sys.exit() 

def run(): 
    print("Juvenile" + " " + "Adult" + " " + "Senile") 
    for i in range(0, pop_model): 
     newjuv = b.displayAdpop()* b.displayBirthrate() 
     newsen = b.displayAdpop() * b.displayAdRate() 
     newadu = a.displayJuvpop() * a.displayjuvRate() 

     print(i + 1,newjuv, newadu,newsen) 

     a.displayJuvpop() = newjuv 
     b.displayAdpop() = newsen 
     c.displaySepop() = newadu 


def Gen0values(): 
    a.createJuv(float(raw_input("Enter the juvenile population: ")), float(raw_input("Enter the Juvenile survival rate: "))) 
    b.createAd(float(raw_input("Enter the Adult population: ")), float(raw_input("Enter the Adult survival rate: ")), float(raw_input("Enter the birth rate: "))) 
    c.createSe(float(raw_input("Enter the Senile population: ")), float(raw_input("Enter the Senile survival rate: "))) 


menu() 

は、エラーがここまで来ている「コールが機能するために割り当てることができません」:Pythonのエラー

def run(): 
    print("Juvenile" + " " + "Adult" + " " + "Senile") 
    for i in range(0, pop_model): 
     newjuv = b.displayAdpop()* b.displayBirthrate() 
     newsen = b.displayAdpop() * b.displayAdRate() 
     newadu = a.displayJuvpop() * a.displayjuvRate() 

     print(i + 1,newjuv, newadu,newsen) 

     a.displayJuvpop() = newjuv 
     b.displayAdpop() = newsen 
     c.displaySepop() = newadu 

エラーは、「機能するように割り当てることができませんコール、ライン60」を思い付きます。スタックオーバーフローのコードがテキストの制限により、データのエクスポートや値の表示など、関連性のない部分を削除しました。

Ps:これは字下げのエラーではなく、コピーして貼り付けることでやや乱れます。

+5

を[あなたがすることはできませんので、それはだ](https://docs.python.org/3/reference/simple_stmts.html#assignment-statements)。あなたは 'a.displayJuvpop()= newjuv'とそれ以外で何を達成しようとしていますか? –

+0

複数世代後の種の個体数を計算するプログラムです。 a.displayJuvpop()= newjuvはクラス値をnewjuvに設定するので、再び計算してテーブルに表示することができます。たとえば、左に世代、右に人口があるとします。説明するのは難しいですが、計算は正しいです。なぜ私が喜ばないかを精緻化する。 –

+0

割り当てに関する有効な構文については、リンクされたドキュメントを参照してください。要するに、関数呼び出しは左辺では有効ではありません。 –

答えて

1

display*pop()関数は、変数ではなくの値を返します。その関数の結果に代入することはできません。ただ、属性に直接割り当てる:

a.pop = newjuv 
b.pop = newsen 
c.pop = newadu