2017-09-13 52 views
0

我正在研究模擬封閉系統中的魚的程序。 我希望能夠創建每個魚的多個實例,以便每個人都可以單獨跟蹤有點像口袋妖怪。for循環不接受饋送值

我有此節我的初始化值:

TilapiaWeight = 0.05 
TilapiaFCR = 0.1 
TilapiaFeedStatus = 10 
TilapiaFeedAmount = 0.9*TilapiaWeight 
WasteAmt = (1-TilapiaFCR)*TilapiaFeedAmount 
Waste = 10 
days = ["Mon"],["Tue"],["Wed"],["Thu"],["Fri"],["Sat"],["Sun"] 
time = 0 
PlantUptakeList = [0.002,0.003] #the uptake rate of each plant 
Plants = []#Testing list appending["Green Lettuce","Red Lettuce"] 
PlantUptakeSum = 0 
PlantsPerM2 = 30 
PTX=[] 

我的更新部分 而TilapiaWeight < 0.5及廢棄物> = 0:

TilapiaFeedStatus = TilapiaFeedStatus + TilapiaFeedAmount 
TilapiaWeight = TilapiaWeight + (TilapiaFCR*TilapiaFeedAmount) 
Waste = Waste + WasteAmt 
TilapiaFeedStatus=TilapiaFeedStatus - TilapiaFeedAmount 
Waste = Waste - PlantUptakeSum 
PlantsUpdate = [x+0.0001 for x in PlantUptakeList] 
PlantUptakeList = PlantsUpdate 
PlantUptakeSum = sum(PlantUptakeList) 
PrintTilapia = "Weight",TilapiaWeight,"Waste",Waste,"Day:",time,"Plant uptake",PlantUptakeList 
PrintTilapiaList = [TilapiaFeedStatus, TilapiaFeedAmount, TilapiaWeight, Waste, time] 
time = time + 1 

我可以不明白的是,我可以如何運行這個說羅非魚1和羅非魚2,他們可能有不同的起始重量。 我也試圖用

TilapiaLog.append(set((PrintTilapiaList))) 

在第二塊結束時記錄所有的值,因爲它遍歷,但它只是使同一組的時間越來越長列表重複x次...

class Fish: 
def __init__(self, type, number, weight, status, feed, fcr, wastestatus): 
    self.type = type 
    self.number = number 
    self.weight = weight 
    self.status = status 
    self.feed = feed 
    self.fcr = fcr 
    self.wastestatus = wastestatus 
def update(self, type, number, weight, status, feed, fcr, wastestatus): 
    status = status + feed 
    weight = weight + (fcr * feed) 
    wastestatus = wastestatus + (1-fcr) 
    PrintTilapia = type, number, weight, status, feed, fcr, wastestatus 
    print(type, number, weight, status, feed, fcr, wastestatus) 

    return type, number, weight, status, feed, fcr, wastestatus 
    #...do something to this fish 

然後創建許多魚類實例:

tilapia1 = 'Tilapia',1,0.005,1,1,0.15,0 
tilapia2 = 'Tilapia',2,0.01,1,1,0.15,0 

我再根據下面的建議,以更新

你將它們分組集合

fishes = (tilapia1, tilapia2) 

print(tilapia1) #('Tilapia', 1, 0.005, 1, 1, 0.15, 0) 

然後你讓他們住進去,發展,不管你喜歡

time_span = 10 
for t in range(time_span): 
    for f in fishes: 
    print(f) #('Tilapia', 1, 0.005, 1, 1, 0.15, 0) 
    Fish.update(f) 

這將返回:

Fish.update(tilapia1) 
    TypeError: update() missing 7 required positional arguments: 'type', 'number', 'weight', 'status', 'feed', 'fcr', and 'wastestatus' 

這怎麼可能,如果我給它這些值?

+1

這聽起來像是理想的課堂工作。 –

回答

1

您創建一個類Tilapia保持你的魚的特徵和行爲。

class Tilapia: 
    def __init__(self, weight, status, ...): 
     self weight = weight 
     self.status = status 
    def update(self): 
     ...do something to this fish 

然後創建許多魚類實例:集合

tilapias = [tilapia1, tilapia2, ...] 

然後你讓他們住在

tilapia1 = Tilapia(12, 'happy') 
tilapia2 = Tilapia(5, 'hungry') 
... 

你將它們分組,發展,不管你喜歡

for t in range(time_span): 
    for tilapia in tilapias: 
     tilapia.update() 

您可能需要f ind OOP上的一個很好的教程

+0

謝謝我的傢伙,我確實需要一個好的嘖嘖。我在構建迭代時遇到了困難,讓它們在while循環中運行,這正是我非常需要的。 – shabba

+0

更新的問題 – shabba