You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

广度优先搜索(BFS)代码出现Else语法错误,求修复方案

修复BFS代码的语法错误及逻辑问题

你的代码出现Else: invalid syntax是因为**return True语句打断了if-else的结构**,导致else没有对应的if。同时代码还有几处逻辑和语法问题,以下是修复后的完整代码及错误说明:

修复后的代码

from collections import deque

graph = {}
graph["you"] = ["alice", "bob", "claire"]
graph["bob"] = ["anuj", "peggy"]
graph["alice"] = ["peggy"]
graph["claire"] = ["thom", "jonny"]
graph["anuj"] = []
graph["peggy"] = []
graph["thom"] = []
graph["jonny"] = []

def person_is_seller(name):
    return name[-1] == 'm'

def search(start_name):
    search_queue = deque()
    search_queue += graph[start_name]
    searched = []
    
    while search_queue:
        person = search_queue.popleft()
        # 只处理未搜索过的人
        if person not in searched:
            if person_is_seller(person):
                print(f"{person} is a mango seller")
                return True
            else:
                search_queue += graph[person]
                searched.append(person)
    # 遍历完都没找到卖家
    print("No mango seller found")
    return False

search("you")

错误点说明

  • 语法错误根源:原代码中return True写在了if person_is_seller(person)的代码块外面,导致else失去了对应的if,直接引发语法错误。必须把return True放在判断卖家的if块内。
  • 逻辑反转:原代码判断if person in searched,这会跳过所有未搜索的人,逻辑完全搞反,应该改为if person not in searched。
  • 未定义函数:原代码没有把BFS逻辑封装到search函数里,直接调用search('you')会报错,需要把队列、已搜索列表的初始化和循环逻辑放到search函数内部。
  • 字符串拼接问题:原代码print(person + "is a mango seller")缺少空格,修复后用f-string更清晰。
  • 缩进混乱:多处代码缩进错误,比如return False的位置,原代码放在了while循环内部,会导致循环执行一次就退出,必须移到循环外部。

内容的提问来源于stack exchange,提问作者Lulu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:40:40