2

私のOSはSage5.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
その後、彼らは積み重なっていきます。私の目には、構文は問題ないように見えます。
MacOS10.5とGCC4.0.1を使用しています。

どんな助けでも大歓迎です。

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)

%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
于 2012-11-18T04:11:15.467 に答える