我的操作系统不支持Sage 5.4,所以我现在仍然坚持使用5.0。 定义此函数在python中没有注册语法错误,我不认为它在Sage 5.4中出错(如果可能的话我会很高兴确认。)我想知道为什么它在5.0中失败了
def num_matchings(G):
if min(G.degree_sequence())== 0 or G.num_edges()==0:
return 0
elif G.num_edges()==1:
if G.edges()[0][2] ==None:
return 1
else:
return G.edges()[0][2]
else:
H = copy(G)
K = copy(G)
e = G.edges()[0]
if e[2] ==None:
w=1
else:
w = e[2]
H.delete_edge(e)
K.delete_vertices([e[0],e[1]])
return num_matchings(H) + w*num_matchings(K)
我尝试定义时遇到的第一个错误是
File "<ipython console>", line 4
==Integer(1):
^
SyntaxError: invalid syntax
然后他们堆积在那之后。在我看来,语法看起来很好
我在使用GCC 4.0.1的Mac OS 10.5上。
任何帮助都非常感激。
答案 0 :(得分:2)
[旁白:.delete_vertives()
中的拼写错误。]
你的语法本身很好。但是,从错误消息中,您只需将代码复制并粘贴到控制台中即可。这只适用于某些非常简单的情况。您还使用制表符进行缩进,这也可能导致另一组令人头疼的问题。您应该切换到4空格标签。
如果要将代码插入实时控制台,可以使用%paste
(如果可以,则从剪贴板复制)或%cpaste
。
例如,如果我复制并粘贴您的代码,我会得到:
sage: def num_matchings(G):
....: if min(G.degree_sequence())== 0 or G.num_edges()==0:
....: return 0
....: elif G.num_edges()==1:
------------------------------------------------------------
File "<ipython console>", line 4
==Integer(1):
^
SyntaxError: invalid syntax
sage: if G.edges()[0][2] ==None:
....: return 1
------------------------------------------------------------
File "<ipython console>", line 2
SyntaxError: 'return' outside function (<ipython console>, line 2)
但如果我使用%cpaste
的4个空格当前(不幸的是%paste
目前无法在我的5.4.1安装上运行):
sage: %cpaste
Pasting code; enter '--' alone on the line to stop.
:
:def num_matchings(G):
: if min(G.degree_sequence())== 0 or G.num_edges()==0:
: return 0
[etc.]
: K.delete_vertices([e[0],e[1]])
: return num_matchings(H) + w*num_matchings(K)
:--
sage: num_matchings(graphs.LadderGraph(5))
8