У вас есть ряд проблем, но поскольку вы не включили весь свой код, я могу лишь дать вам несколько советов о том, как действовать:
Помните из моего последнего ответа, что одиночная черепаха общая , поэтому установка цвета черепахи на цвет вируса недостаточна. Вам необходимо хранить информацию о вирусе вместе с Person и использовать эту информацию, когда придет время привлечь человека. I.e.:
# to Person.__init__ add the property
self.virus = None
Сделайте вашу Person.infect()
функцию просто:
def infect(self, virus):
self.virus = virus
Обратите внимание, что код, который вы имели: turtle.colormode("v_colour")
полностью неверен, поскольку colormode()
- неправильный метод и v_colour
не должно быть в кавычках. Но нам это все равно не нужно. Теперь в вашем методе Person.draw()
добавьте следующее прямо перед turtle.begin_fill()
:
if self.virus is not None:
turtle.color(self.virus.colour)
else:
turtle.color("black")
Когда вы набираете 'x', вы должны начать видеть, как люди становятся красными.
Я также не знаю, как посчитать, сколько там красной черепахи.
Не считайте красных черепах! (Ваш текущий count_infected()
совершенно неверен - вы не должны создавать новых людей и ничего рисовать.)
Вы можете перебрать self.people
в поисках людей, у которых есть свойство self.virus
, которое не None
. Но World
имеет свойство self.infected
, которое вы должны увеличивать при вызове infect_person()
. Однако, поскольку вы выбираете человека случайным образом, это не будет работать как есть, поскольку вы можете увеличить счетчик в два раза для одного и того же человека. Вам нужно изменить infect_person()
, чтобы продолжить захват случайного человека , пока не найдет того, кто еще не заражен. Имеет ли это смысл, зависит от правил назначения.
Ваша функция World.cure_all()
должна быть переписана для циклического перебора self.people
, вызывая cure()
для каждого человека. Метод Person.cure()
должен установить для свойства self.virus
значение None
.