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)
您正在循环awake
并同时修改它.这意味着将跳过某些项目.
创建一个副本来awake
代替断开循环迭代器,awake
这样你就可以在不影响循环的情况下修改后者:
for creature in list(awake):
Run Code Online (Sandbox Code Playgroud)
你最大的问题,然而,就是你设置awake
到self.creatures
在循环的开始,有效地改变self.creatures
.也许你打算用self.awake
呢?