Python изменяет значения моих переменных

#python #simulation

#python #Симуляция

Вопрос:

Я запускаю моделирование для концерта, в котором я генерирую количество времени, которое каждый фанат проводит перед сценой, прежде чем отправиться делать что-то еще (купить еду, напитки или сходить в туалет). Однако время, которое я установил для них, не является временем, которое используется в обратном отсчете, пока они не уйдут, чтобы сделать что-то еще.

При выполнении обратного отсчета я получил сообщение об ошибке, в котором говорилось, что я не могу использовать операнд = для NoneType и int, и после изменения способа назначения времени пребывания я понял, что многие времена пребывания были изменены.

Fan код класса

 class Fan:
    stay = 0
    def __init__(self, gender):
        self.gender = gender
  

Этот код создает веер, вычисляет, как долго они будут оставаться перед сценой, и добавляет их в область перед сценой

    for i in range(200):
       x = random.randint(1,10)
       if x <= 7:
           f = Fan("f")
           f.stay = stage.calcstay()
           stage.addfan(f)
           print(i,": ",f.stay)
       else:
           f = Fan("m")
           f.stay = stage.calcstay()
           stage.addfan(f)
           print(i,": ",f.stay)
  

Здесь находится функция для обратного отсчета времени, в течение которого фанаты остаются перед сценой. (буквально следующий бит кода)

 for x in range(360):
    stagefunction()
  

Это stagefunction() метод:

 def stagefunction():
    if len(stage.fans) > 0:
        for i in range(len(stage.fans)):
            print(i,": ",stage.fans[i].stay)
            stage.fans[i].stay  = -1
            if  stage.fans[i].stay <= 0:
                movefromstage(i)
            stage.TTS  = 1
    return
  

Я ожидал, что stagefunction() будет вызываться несколько раз, каждый раз уменьшая количество времени, оставшееся до каждого вентилятора в передней части сцены, на 1 и удаляя тех, кто больше не должен оставаться. Однако я даже не могу пройти stagefunction() даже один раз, потому что время пребывания меняется, и обычно в начале 190-х годов значение изменяется на NoneType

Комментарии:

1. можете ли вы показать свой Fan код класса?

2. Это требует минимального, полного и поддающегося проверке примера.

3. @alec935 Я добавил это

4. @OmariLawrence Спасибо тебе! Я добавил ответ.

Ответ №1:

stay является class variable , а не instance variable . Это означает, что значение stay является универсальным для всех экземпляров класса, и если вы хотите его изменить, вы должны изменить его из класса, а не экземпляра.

Чтобы определить instance variable , поместите его в свою __init__() функцию