如何修复:Python条件被跳过;Tkin

2024-06-16 11:59:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试创建这种对“生命”的模拟(深受初级视频的启发),但当程序遍历包含所有现有生物的类变量时,我的类“生物”的一些实例似乎跳过了检查“if”语句,而其他实例则没有

整个想法是让生物在给定的迭代中“死亡”,因为“生物”的当前“死亡率”设置为1.0-->;100%,但不是这样,每次只有在类变量'bioters'的奇数指数处的生物真正'死亡'

import random as rnd

class Creature(object):

    creatures = []

    counter = 0

    birth_rate = 1.0
    death_rate = 1.0

    def __init__(self):
        self.c_id = "c_" + str(Creature.counter) #creature id
        Creature.counter += 1

    def try_die(self):
        temp = rnd.randint(1, 100)

        if temp < Creature.death_rate * 100:
            Creature.creatures.remove(self)

for i in range(10):
    Creature.creatures.append(Creature())

iteration = 1

while len(Creature.creatures) > 0:
    for creature in Creature.creatures:
        if iteration % 2 == 0:
            creature.try_die()

    print("ITERATION: {}|ALIVE: {}".format(iteration, len(Creature.creatures)))

    iteration += 1

我希望程序在第二次迭代结束,因为死亡率是1.0,每第二次迭代死亡一次,但实际上有10个生物总是在第八次迭代时死亡。具有以下输出:

迭代:1 |活动:10

迭代:2 |活动:5

迭代:3 |活动:5

迭代:4 |活动:2

迭代:5 |活动:2

迭代:6 |活动:1

迭代:7 |活动:1

迭代:8 |活动:0

节目结束了


Tags: 实例self程序ifratedefcounter生物