sage 5.0令人困惑的语法错误

时间:2012-11-18 03:31:12

标签: python sage

我的操作系统不支持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上。

任何帮助都非常感激。

1 个答案:

答案 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