得到帮助

Sage有大量的内置文档,可以通过键入函数名或常量(例如),后跟问号来访问:

sage: tan?
Type:        <class 'sage.calculus.calculus.Function_tan'>
Definition:  tan( [noargspec] )
Docstring:

    The tangent function

    EXAMPLES:
        sage: tan(pi)
        0
        sage: tan(3.1415)
        -0.0000926535900581913
        sage: tan(3.1415/4)
        0.999953674278156
        sage: tan(pi/4)
        1
        sage: tan(1/2)
        tan(1/2)
        sage: RR(tan(1/2))
        0.546302489843790
sage: log2?
Type:        <class 'sage.functions.constants.Log2'>
Definition:  log2( [noargspec] )
Docstring:

    The natural logarithm of the real number 2.

    EXAMPLES:
        sage: log2
        log2
        sage: float(log2)
        0.69314718055994529
        sage: RR(log2)
        0.693147180559945
        sage: R = RealField(200); R
        Real Field with 200 bits of precision
        sage: R(log2)
        0.69314718055994530941723212145817656807550013436025525412068
        sage: l = (1-log2)/(1+log2); l
        (1 - log(2))/(log(2) + 1)
        sage: R(l)
        0.18123221829928249948761381864650311423330609774776013488056
        sage: maxima(log2)
        log(2)
        sage: maxima(log2).float()
        .6931471805599453
        sage: gp(log2)
        0.6931471805599453094172321215             # 32-bit
        0.69314718055994530941723212145817656807   # 64-bit
sage: sudoku?
File:        sage/local/lib/python2.5/site-packages/sage/games/sudoku.py
Type:        <... 'function'>
Definition:  sudoku(A)
Docstring:

    Solve the 9x9 Sudoku puzzle defined by the matrix A.

    EXAMPLE:
        sage: A = matrix(ZZ,9,[5,0,0, 0,8,0, 0,4,9, 0,0,0, 5,0,0,
    0,3,0, 0,6,7, 3,0,0, 0,0,1, 1,5,0, 0,0,0, 0,0,0, 0,0,0, 2,0,8, 0,0,0,
    0,0,0, 0,0,0, 0,1,8, 7,0,0, 0,0,4, 1,5,0,   0,3,0, 0,0,2,
    0,0,0, 4,9,0, 0,5,0, 0,0,3])
        sage: A
        [5 0 0 0 8 0 0 4 9]
        [0 0 0 5 0 0 0 3 0]
        [0 6 7 3 0 0 0 0 1]
        [1 5 0 0 0 0 0 0 0]
        [0 0 0 2 0 8 0 0 0]
        [0 0 0 0 0 0 0 1 8]
        [7 0 0 0 0 4 1 5 0]
        [0 3 0 0 0 2 0 0 0]
        [4 9 0 0 5 0 0 0 3]
        sage: sudoku(A)
        [5 1 3 6 8 7 2 4 9]
        [8 4 9 5 2 1 6 3 7]
        [2 6 7 3 4 9 5 8 1]
        [1 5 8 4 6 3 9 7 2]
        [9 7 4 2 1 8 3 6 5]
        [3 2 6 7 9 5 4 1 8]
        [7 8 2 9 3 4 1 5 6]
        [6 3 5 1 7 2 8 9 4]
        [4 9 1 8 5 6 7 2 3]

Sage还提供了“Tab completion”:键入函数的前几个字母,然后按Tab键。例如,如果您键入 ta 然后 TAB ,Sage将打印 tachyon, tan, tanh, taylor . 这为在Sage中查找函数和其他结构的名称提供了一个很好的方法。

函数、缩进和计数

要在Sage中定义新函数,请使用 def 命令和变量名列表后面的冒号。例如:

sage: def is_even(n):
....:     return n%2 == 0
sage: is_even(2)
True
sage: is_even(3)
False

注意:根据您正在查看的教程版本,您可能会看到三个点 ....: 在这个例子的第二行。不要键入它们;它们只是为了强调代码是缩进的。在这种情况下,请按 [Return/Enter] 在块的末尾插入一个空行并结束函数定义。

您不指定任何输入参数的类型。可以指定多个输入,每个输入都可以有一个可选的默认值。例如,下面的函数默认为 divisor=2 如果 divisor 未指定。

sage: def is_divisible_by(number, divisor=2):
....:     return number%divisor == 0
sage: is_divisible_by(6,2)
True
sage: is_divisible_by(6)
True
sage: is_divisible_by(6, 5)
False

也可以在调用函数时显式指定一个或其中一个输入;如果显式指定输入,则可以按任意顺序给出它们:

sage: is_divisible_by(6, divisor=5)
False
sage: is_divisible_by(divisor=2, number=6)
True

在Python中,代码块不像许多其他语言那样用大括号或开始和结束块来表示。相反,代码块由缩进表示,缩进必须完全匹配。例如,以下是一个语法错误,因为 return 语句的缩进量与上面其他行的缩进量不同。

sage: def even(n):
....:     v = []
....:     for i in range(3,n):
....:         if i % 2 == 0:
....:             v.append(i)
....:    return v
Syntax Error:
       return v

如果修复缩进,则该函数可以工作:

sage: def even(n):
....:     v = []
....:     for i in range(3,n):
....:         if i % 2 == 0:
....:             v.append(i)
....:     return v
sage: even(10)
[4, 6, 8]

行尾不需要分号;在大多数情况下,一行以换行符结尾。但是,可以将多个语句放在一行中,用分号分隔:

sage: a = 5; b = a + 3; c = b^2; c
64

如果希望一行代码跨越多行,请使用终止反斜杠:

sage: 2 + \
....:    3
5

在Sage中,通过迭代一系列整数进行计数。例如,下面的第一行与 for(i=0; i<3; i++) 在C++或java中:

sage: for i in range(3):
....:     print(i)
0
1
2

下面的第一行是 for(i=2;i<5;i++) .

sage: for i in range(2,5):
....:     print(i)
2
3
4

第三个参数控制步骤,因此如下所示 for(i=1;i<6;i+=2) .

sage: for i in range(1,6,2):
....:     print(i)
1
3
5

通常,您会希望创建一个漂亮的表来显示使用Sage计算的数字。一种简单的方法是使用字符串格式。下面,我们创建三列,每个列的宽度正好是6,并制作一个正方形和立方体表格。

sage: for i in range(5):
....:     print('%6s %6s %6s' % (i, i^2, i^3))
     0      0      0
     1      1      1
     2      4      8
     3      9     27
     4     16     64

Sage中最基本的数据结构是list,顾名思义就是任意对象的列表。例如 range 我们使用的命令创建一个列表(在python2中):

sage: range(2,10)   # py2
[2, 3, 4, 5, 6, 7, 8, 9]
sage: list(range(2,10))   # py3
[2, 3, 4, 5, 6, 7, 8, 9]

下面是一个更复杂的列表:

sage: v = [1, "hello", 2/3, sin(x^3)]
sage: v
[1, 'hello', 2/3, sin(x^3)]

与许多编程语言一样,列表索引是基于0的。

sage: v[0]
1
sage: v[3]
sin(x^3)

使用 len(v) 得到 v 使用 v.append(obj) 将新对象附加到 v 及使用 del v[i] 删除 \(i^{{th}}\) 进入 v

sage: len(v)
4
sage: v.append(1.5)
sage: v
[1, 'hello', 2/3, sin(x^3), 1.50000000000000]
sage: del v[1]
sage: v
[1, 2/3, sin(x^3), 1.50000000000000]

另一个重要的数据结构是字典(或关联数组)。它的工作原理类似于一个列表,只不过它可以与几乎任何对象建立索引(索引必须是不可变的):

sage: d = {'hi':-2,  3/8:pi,   e:pi}
sage: d['hi']
-2
sage: d[e]
pi

还可以使用类定义新的数据类型。用类封装数学对象是一种强大的技术,可以帮助简化和组织Sage程序。下面,我们定义一个类,该类表示 n ;它是从内置类型派生的 list .

sage: class Evens(list):
....:     def __init__(self, n):
....:         self.n = n
....:         list.__init__(self, range(2, n+1, 2))
....:     def __repr__(self):
....:         return "Even positive numbers up to n."

这个 __init__ 方法以在创建对象时初始化该对象 __repr__ 方法打印出对象。我们在 __init__ 方法。我们创建一个类对象 Evens 如下:

sage: e = Evens(10)
sage: e
Even positive numbers up to n.

注意 e 使用 __repr__ 我们定义的方法。要查看基本的数字列表,请使用 list 功能:

sage: list(e)
[2, 4, 6, 8, 10]

我们也可以访问 n 属性或处理 e 就像一张单子。

sage: e.n
10
sage: e[2]
6