广度优先搜索(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
相关产品推荐
相关产品推荐

