У меня есть быстрый вопрос о подсчете итераций цикла в 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()
Класс Offspring является simple
вида и должен умереть в возрасте 750 или выше - в идеале на 750 точно, но это часть проблемы. Я не понял, как перебирать список объектов (petri_dish
) и, в любой момент итерации, удалять определенные объекты, независимо от того, находятся они в status = 0
(мертвые) или имеют достаточно возраст.
Извините, если это упрощенный вопрос, но петли - это не мой сильный костюм ... Я читал об этом и понимал, но любой дополнительный материал был бы оценен. Не говоря уже о ответе на мой вопрос! Большое спасибо.
является 'turn' глобальной переменной? также, можете ли вы сократить свой код до минимального, что необходимо для воспроизведения проблемы? в настоящее время вы даже не указали соответствующие строки в коде. –
Я вижу, что вы тестируете «x.species ==» species »и x.age> = 750', но, похоже, для вашего класса это« просто ». Кажется, эта часть теста будет всегда терпеть неудачу. Боковое примечание. Некоторые из ваших строк очень долго заставляют ваш код читать. Кроме того, вы создаете класс в функции, которая вызывается повторно. Вы уверены, что не хотите, чтобы этот класс жил на верхнем уровне? –
Спасибо, Стивен! Это была глупая ошибка с моей стороны. Я пересмотрю свой код и попробую переместить класс Offspring на верхний уровень. Благодаря тонну! – userNaN