“str”对象没有“已访问”属性

2024-09-25 00:30:42 发布

您现在位置:Python中文网/ 问答频道 /正文

class Graph:
    def __init__(self):
        self.nodes={}
        self.visited = False
        self.discovered = False


    def vertices(self):
        return self.nodes.keys()

    def __len__(self):
        return len(self.nodes)

    def adj(self,u):
        if u in self.nodes:
            return self.nodes[u]

    def insertNode(self,u):
        if u not in self.nodes:
            self.nodes[u]={}


    def insertEdge(self,u,v,w):
        self.insertNode(u)
        self.insertNode(v)
        self.nodes[u][v]=w


def bfs(g,radix):

    queue=[radix]

    while queue:
        u=queue.pop(0)
        u.visited=True
        for v in G.adj(u):
            if not v.visited:
                queue.append(v)
    return queue


if __name__=='__main__':

    g = Graph()
    for u, v, w in [('a', 'b', 3), ('a', 'd', 2), ('b', 'c', 5), ('c', 'd', 9), ('c', 'e', 1), ('d', 'e', 4)]:
       g.insertEdge(u, v, w)

bfs(g,'a')

我的问题是,当我打电话时:

bfs(g,'a')

PyCharm返回:

u.visited=True
AttributeError: 'str' object has no attribute 'visited'

Tags: inselffalselenreturnifqueuedef
2条回答

您将字符串值传递给了radix变量。之后,您将队列设置为等于其中包含radix的数组,因此在while循环中u变为'a',然后尝试对其调用.visited属性,这是不可能的,因为字符串没有访问属性

方法pop()从列表中删除元素并返回它。 所以u=queue.pop(0)正在删除'a',它也在返回它。 此处将生成错误:

u.visited=True

因为字符串'a'没有名为visited的属性

相关问题 更多 >