我有一個關於在Python中計算循環迭代的快速問題。我已經創建了每個迭代都會「老化」的對象,並且應該在某個特定年齡「死亡」,但有時他們活得更長。下面是我的程序的一個片段:計數循環迭代(Python)
def reproduce():
class Offspring(Species):
def __init__(self,name,life,attack,move,location,status,species,age):
area = 1000
self.name = name
self.life = life
self.attack = attack
self.move = move
self.location = [random.randint(1,area),random.randint(1,area)]
self.status = 1
self.species = 'simple'
self.age = 1
for z in [y for y in petri_dish if y.status == 1 and y.life >= 50 and y.species == 'simple']:
petri_dish.append(Offspring('g' + str(turn/250)+'#'+str(z.name),(random.randint(int(z.life/2),z.life)),(random.randint(int(z.attack/2),z.attack)),(random.randint(int(z.move/2),z.move)),0,1,0,0))
print 'g' + str(turn/250)+'#'+str(z.name), 'was born.'
def move_around():
for x in list(petri_dish):
x.age += 1
if x.status == 0 or (x.species == 'species' and x.age >= 750) or (x.species == 'predator' and x.age >= 3000):
print str(x.name) + ' expired. Cells left: ' + str(len(petri_dish))
petri_dish.remove(x)
else:
x.relocate()
x.target()
if len(petri_dish) >= 75:
for x in list(petri_dish):
if x.life < int(turn/25):
x.status = 0
if turn % 250 == 0:
reproduce()
while len([y for y in petri_dish if y.status == 1]) > 1:
turn += 1
move_around()
子孫類是simple
物種在750歲或以上應該死 - 在750正是理想的,但是這是問題的一部分。我還沒有想出如何遍歷我的對象列表(petri_dish
),並且在迭代中的任何時候,刪除某些對象,無論它們是在status = 0
(死亡)還是已經過時。
對不起,如果這是一個簡單的問題,但循環不是我強大的西裝......我一直在閱讀理解等,但任何額外的材料也將不勝感激。更不用提我的問題了!非常感謝。
是'turn'全局變量嗎?另外,您能否將您的代碼降低到最低限度,以便重現問題?目前,你甚至沒有在代碼中指出相關的行。 –
我看到你正在測試'x.species =='物種'和x.age> = 750',但它似乎在你的班級中設置爲'simple'。看起來這部分測試總是失敗。附註:您的一些行很長,使您的代碼難以閱讀。另外,你正在一個函數中創建一個類,這個函數會被重複調用。你確定你不想讓這個班級生活在頂層嗎? –
謝謝史蒂文!這是我的一個愚蠢的錯誤。我將修改我的代碼並嘗試將Offspring類移到頂層。萬分感謝! – userNaN