Python字典在循环外重置

Eas*_*led 0 python dictionary for-loop

我正在建造一个生物模拟器.它将在两个for循环中运行,一个跟踪一天,一个跟踪一天中的时间.我有一本叫做清醒的所有生物的字典,它是在每天开始时设置的.在一天中的某个时刻,生物会变得疲倦并进入睡眠状态.模拟将它们从清醒字典中删除,这样它们就不会被考虑用于剩余的时间循环.但是问题出在这里,由于某些原因,唤醒字典会在每天的循环中重置,以便访问睡眠的生物.我在这里发布了相关代码,这是唯一一次使用awake.谁能解释我做错了什么?

        for i in range(self.Day):
            start = clock()
            awake = self.creatures
            for j in range(self.timeOfDay):          
                print("Life Time " + str(i + 1) + "/" + str(self.Day) 
                       + " Hour " + str(j + 1) + "/" + str(self.timeOfDay))
                print(self)
                traveling = []
                for creature in awake:
                    goal = None
                    while goal == None:
                        priority = creature.priority()
                        if priority == "improveShelter":
                            goal = creature.findBest(land.Shelter, self.map)
                        elif priority == "sleep":
                            goal = creature.findBest(land.Shelter, self.map)
                            print(awake)
                            awake.pop(creature)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 6

您正在循环awake并同时修改它.这意味着将跳过某些项目.

创建一个副本awake代替断开循环迭代器,awake这样你就可以在不影响循环的情况下修改后者:

for creature in list(awake):
Run Code Online (Sandbox Code Playgroud)

你最大的问题,然而,就是你设置awakeself.creatures在循环的开始,有效地改变self.creatures.也许你打算用self.awake呢?