2

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

非常感谢任何帮助。

4

1 回答 1

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)

但如果我使用%cpaste4 空格等效项(不幸%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
于 2012-11-18T04:11:15.467 回答