属性错误:“列表”对象没有属性“mark_safe”

问题描述 投票:0回答:1

我正在尝试做cs50 ai课程的扫雷项目,但我遇到了一些错误。

我这里有这个功能:

def mark_safe(self, cell):
        """
        Marks a cell as safe, and updates all knowledge
        to mark that cell as safe as well.
        """
        self.safes.add(cell)
        for sentence in self.knowledge:
            sentence.mark_safe(cell)

我在行中遇到错误...

sentence.mark_safe(cell)

属性错误:“列表”对象没有属性“mark_safe”

在 self.knowledge 列表中应该包含我创建的 Sentence 类中的对象,并且这些对象有一个名为“mark_safe”的属性,这就是为什么我不理解错误

class Sentence():
    """
    Logical statement about a Minesweeper game
    A sentence consists of a set of board cells,
    and a count of the number of those cells which are mines.
    """

    def __init__(self, cells, count):
        self.cells = set(cells) #cells = {A,B,C}
        self.count = count

    def __eq__(self, other):
        return self.cells == other.cells and self.count == other.count

    def __str__(self):
        return f"{self.cells} = {self.count}"

    def known_mines(self):
        """
        Returns the set of all cells in self.cells known to be mines.
        """
        if len(self.cells) == self.count:
            return self.cells
        else:
            return set()

    def known_safes(self):
        """
        Returns the set of all cells in self.cells known to be safe.
        """
        if self.count == 0:
            return self.cells
        else: 
            return set()

    def mark_mine(self, cell):
        """
        Updates internal knowledge representation given the fact that
        a cell is known to be a mine.
        """
        if cell in self.cells:
            self.cells.remove(cell)
            self.count -= 1

    def mark_safe(self, cell):
        """
        Updates internal knowledge representation given the fact that
        a cell is known to be safe.
        """
        if cell in self.cells:
            self.cells.remove(cell)
python artificial-intelligence cs50 knowledge-management
1个回答
-1
投票

def mark_safe(self, cell):必须在 Sentence(): class 中定义...需要正确的顺序和缩进。 Self 指的是定义该方法的类。您的函数未在类范围内声明。

句子实例也必须启动。

class Sentence():
    """
    Logical statement about a Minesweeper game
    A sentence consists of a set of board cells,
    and a count of the number of those cells which are mines.
    """

    def __init__(self, cells, count):
        self.cells = set(cells) #cells = {A,B,C}
        self.count = count
        self.safes = None ## init with proper value here
        self.knowledge= None ## init with proper value here

    def __eq__(self, other):
        return self.cells == other.cells and self.count == other.count

    def __str__(self):
        return f"{self.cells} = {self.count}"

    def known_mines(self):
        """
        Returns the set of all cells in self.cells known to be mines.
        """
        if len(self.cells) == self.count:
            return self.cells
        else:
            return set()

    def known_safes(self):
        """
        Returns the set of all cells in self.cells known to be safe.
        """
        if self.count == 0:
            return self.cells
        else: 
            return set()

    def mark_safe(self, cell):
        """
        Marks a cell as safe, and updates all knowledge
        to mark that cell as safe as well.
        """
        self.safes.add(cell)
        for sentence in self.knowledge:
            sentence.mark_safe(cell)

sentence = Sentence(cellsvalue, countvalue) ## put right init parameters here cells and count

sentence.mark_safe(cell)
© www.soinside.com 2019 - 2024. All rights reserved.