2013-01-31 30 views
1

以下是.sage文件的一部分,我希望能在一个会议上称:鼠尾草5.0语法错误(

def projective_grid(m,n): 
    r""" 
    The mxn grid in projective space 
    """ 
    g = graphs.Grid2dGraph(m,n) 
    g = Graph(g) 
    for i in range(m): 
     g.add_edge(((i,0),(m-i-1,n-1),1)) 
    for j in [1..(n-2)]: 
     g.add_edge(((0,j),(m-1,n-j-1),1)) 
    g.delete_edge(((0,0),(m-1,n-1))) 
    g.add_edge(((0,0),(m-1,n-1),2)) 
    g.delete_edge(((m-1,0),(0,n-1))) 
    g.add_edge(((m-1,0),(0,n-1),2)) 
    if n%2==1 and m == 2: 
     g.delete_edge((0, (n-1)/2), (1, (n-1)/2)) 
     g.delete_edge((0, (n-1)/2), (1, (n-1)/2)) 
     g.add_edge((0, (n-1)/2),(1,(n-1)/2),2) 
    if n == 2 and m%2==1: 
     g.delete_edge(((m-1)/2, 0), ((m-1)/2, 1)) 
     g.delete_edge(((m-1)/2, 0), ((m-1)/2, 1)) 
     g.add_edge(((m-1)/2, 0), ((m-1)/2, 1),2)  
    pos = {} 
    k = -1 
    for i in [1..m]: 
     for j in [1..n]: 
     k+=1 
     pos[k] = (j,i) 
    g.set_pos(pos) 
    return g 

我可以将此代码复制粘贴到一个圣人会议而不产生错误,但当我尝试调用带有的execfile文件(),我得到如下:

sage: execfile('/Users/WyattAlt/Desktop/thesis/stack_test.sage') 
------------------------------------------------------------ 
    File "/Users/WyattAlt/Desktop/thesis/stack_test.sage", line 9 
    for j in [1..(n-2)]: 
       ^
SyntaxError: invalid syntax 

如果我和范围更换有问题的零件(1,N-1)和类似的问题消失,但我想了解为什么这不起作用。有任何想法吗?提前致谢。

编辑:我在OS X 10.5.8

回答

2

贤者语法和Python语法在几个不同的地方,包括在这个范围内的语法。

在幕后,贤者控制台preparses投入标准Python你:

sage: [1..10] 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
sage: preparse('[1..10]') 
'(ellipsis_range(Integer(1),Ellipsis,Integer(10)))' 

事实上,偶数文字包裹:

sage: 10 
10 
sage: preparse('10') 
'Integer(10)' 

当您使用execfile,这是一种纯粹的Python功能,你绕过了Sage preparser。如果你想要的等效,你可以使用load

sage: !echo "print [1..10]" >> test.sage 
sage: !cat test.sage 
print [1..10] 
sage: execfile("test.sage") 
------------------------------------------------------------ 
    File "test.sage", line 1 
    print [1..10] 
       ^
SyntaxError: invalid syntax 

sage: load("test.sage") 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
+0

完美。谢谢您的帮助。 – WKA

+1

不用担心。两点:(1)不要忘记[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)给你的问题,(2)还有[ask.sagemath.org](http://ask.sagemath.org),它与StackOverflow相似,但仅适用于Sage,许多开发者都在此闲逛。 – DSM

+0

将ask.sagemath.org上的+1作为第一个去的地方 - 但幸运的是@DSM和我们其他人偶尔在这里:) – kcrisman