0

私は生き物シミュレーターを構築しています。1 つは日付を追跡し、もう 1 つは時刻を追跡する 2 つの for ループ内で実行されます。私は、目覚めと呼ばれるすべての生き物の辞書を持っています。これは、毎日の開始時に設定されています。時間ループのある時点で、生き物は疲れて眠りにつくでしょう。シミュレーションはそれらを起動中の辞書から削除して、残りの時間ループで考慮されないようにします。しかし、ここに問題があります。なんらかの理由で、眠っている生き物にアクセスできるように、1日のループのたびに起きている辞書がリセットされます。関連するコードをここに投稿しました。これは、アウェイクが使用される唯一の時間です。誰かが私が間違っていることを説明できますか?

        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)
4

2 に答える 2

6

ループしawakeて同時に変更しています。これは、特定の項目がスキップされることを意味します。

代わりに のコピーを作成しawakeてループ反復子を切断し、ループawakeに影響を与えずに後者を変更できるようにします。

for creature in list(awake):

ただし、最大の問題は、ループの開始時にを設定awakeして、実質的に を変更することです。おそらく、代わりに使用するつもりでしたか?self.creaturesself.creaturesself.awake

于 2013-04-03T14:40:48.573 に答える