Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python需要帮助,以了解在迭代过程中我的集合被更改的位置_Python_Set_Minesweeper - Fatal编程技术网

python需要帮助,以了解在迭代过程中我的集合被更改的位置

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

我为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 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):