2017-09-13 53 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