python需要帮助,以了解在迭代过程中我的集合被更改的位置
我为cs50任务建立了一个扫雷舰算法。我已识别出我的代码有问题。(扫雷艇类内) 该程序需要mineswipper.py和runner.py,并使用“python runner.py”执行 在使用python runner.py运行时,它会给我一个运行时错误:python需要帮助,以了解在迭代过程中我的集合被更改的位置,python,set,minesweeper,Python,Set,Minesweeper,我为cs50任务建立了一个扫雷舰算法。我已识别出我的代码有问题。(扫雷艇类内) 该程序需要mineswipper.py和runner.py,并使用“python runner.py”执行 在使用python runner.py运行时,它会给我一个运行时错误: Traceback (most recent call last): File "C:\Users\seng\Downloads\minesweeper\minesweeper\runner.py", line 22
Traceback (most recent call last):
File "C:\Users\seng\Downloads\minesweeper\minesweeper\runner.py", line 220, in <module>
ai.add_knowledge(move, nearby)
File "C:\Users\seng\Downloads\minesweeper\minesweeper\minesweeper.py", line 230, in add_knowledge
self.updateknowledge()
File "C:\Users\seng\Downloads\minesweeper\minesweeper\minesweeper.py", line 274, in updateknowledge
for safe in safes:
RuntimeError: Set changed size during iteration
我知道这就是错误发生的地方,用副本替换迭代对象可以解决问题。问题是我看不到我在哪里编辑的设置在第一位
class MinesweeperAI:
def updateknowledge(self):
...
safes = sentence.known_safes()
if safes:
keepgoing = True
for safe in safes.copy():
self.mark_safe(safe)
self.mark\u safe(安全)
通向(扫雷舰级)
和句子。标记安全(单元)
导致
if cell in self.cells:
self.cells.remove(cell)
那么这是如何影响我正在迭代的
保险柜集的呢?如果您能提供建议,我们将不胜感激。问题在于,代码在“保险柜”上循环时是“标记保险柜”
尝试更改:
for safe in self.safes:
致:
这将使“保险柜”的副本循环,使基础集可用于更新。问题是代码在循环“保险柜”时“标记保险柜”
尝试更改:
for safe in self.safes:
致:
这将使“保险箱”的副本循环,使基础集合可供更新。但是编辑集合是如何进行的,先生?在您的代码self中。cells.remove(cell)
正在修改集合。在迭代self.cells
时不能这样做。这就是为什么当你从self.cells
@rdas中删除时,你需要一个副本进行迭代,谢谢你,伙计!但是编辑集合是怎么回事,先生?在你的代码中,self.cells.remove(cell)
正在修改集合。在迭代self.cells
时不能这样做。这就是为什么当你从self.cells
@rdas中删除时,你需要一个副本进行迭代,谢谢你,伙计!
if cell in self.cells:
self.cells.remove(cell)
for safe in self.safes:
for safe in list(self.safes):