我正在研究我的学校项目,并且在代码的最后我正在努力。最后一行假设检查图是否为半欧拉不起作用,我没有想法如何解决它。我是Python的初学者,希望看到一些好的建议:)
graph = {
"1" : set(["2", "6"]),
"2" : set(["1", "6", "7", "3"]),
"3" : set(["2","7","4", "5"]),
"4" : set(["3", "5"]),
"5" : set(["3","4", "7", "6"]),
"6" : set(["1","2", "7", "5"]),
"7" : set(["2", "3", "5"]),
}
def path(x, node, visited):
if node not in visited:
visited.append(node)
for n in x[node]:
path(x,n, visited)
return visited
visited = path(graph,"1", [])
print("Graph path: ", visited)
values = list(map(len, graf.values()))
print(values)
if all(map(lambda x: x % 2 == 0, values)):
print("Eulerian")
else list(filter(lambda x: x % 2 == 1, values)) >= 2:
print("Semi-eulerian")
答案 0 :(得分:0)
如果你是初学者,你应该远离lambdas;那些使脚本更难阅读。
通过快速查看您发布的内容,您可以将列表与整数进行比较。
https://docs.python.org/2/library/functions.html#func-list
我不知道过滤器/ lambda的输出是什么,但当你用list函数包装它时,你将获得一个列表。我很惊讶脚本并没有彻底崩溃,因为要问一个列表是否大于"大于"整数没有程序性或数学意义。除此之外,它会下降到列表等于整数条件,它总是为假。
此外,您的if / else结构已被破坏 - 您可能意味着" elif" (否则如果)。
只是一个猜测,但如果最后一个条件是"如果在值#34;中至少有2个奇数,则半欧拉,那么你可能意味着(在if子句之后):
elif len(list(filter(lambda x: x % 2 == 1, values))) >= 2:
print("Semi-eulerian")