.. _chapter-help: ÐолÑÑение помоÑи ================ Ð Sage еÑÑÑ Ð¸ÑÑеÑпÑваÑÑÐ°Ñ Ð²ÑÑÑÐ¾ÐµÐ½Ð½Ð°Ñ Ð´Ð¾ÐºÑменÑаÑиÑ, к коÑоÑой можно полÑÑиÑÑ Ð´Ð¾ÑÑÑп, напеÑаÑав Ð¸Ð¼Ñ ÑÑнкÑии или конÑÑанÑÑ Ñ Ð¿Ð¾ÑледÑÑÑим вопÑоÑиÑелÑнÑм знаком: .. skip :: 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: <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``. ÐапÑимеÑ, еÑли напеÑаÑаÑÑ ``ta`` и нажаÑÑ ``TAB``, Sage вÑÐ²ÐµÐ´ÐµÑ ``tachyon, tan, tanh, taylor``. ÐÐ°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ ÑвлÑеÑÑÑ Ñ Ð¾ÑоÑим ÑпоÑобом поиÑка имен ÑÑнкÑий или дÑÑÐ³Ð¸Ñ ÐºÐ¾Ð½ÑÑÑÑкÑий в Sage. .. _section-functions: ФÑнкÑии, оÑÑÑÑÐ¿Ñ Ð¸ ÑÑеÑÑики =========================== ÐÐ»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ ÑÑнкÑÐ¸Ñ Ð² Sage, иÑполÑзÑйÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ``def`` и двоеÑоÑие поÑле ÑпиÑка имен пеÑеменнÑÑ : :: sage: def is_even(n): ... return n%2 == 0 ... sage: is_even(2) True sage: is_even(3) False ÐамеÑка: РзавиÑимоÑÑи Ð¾Ñ Ð²ÐµÑÑии ÑÑебного поÑÐ¾Ð±Ð¸Ñ Ð½Ð° вÑоÑой ÑÑÑоке ÑÑого пÑимеÑа можно ÑвидеÑÑ ``...``. Ðе пеÑаÑайÑе Ð¸Ñ , Ñак как они ÑлÑÐ¶Ð°Ñ Ð»Ð¸ÑÑ Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑ Ð¾ÑÑÑÑÐ¿Ñ Ð² коде. Ðе опÑеделÑйÑе Ñипов аÑгÑменÑов. Ðожно опÑеделиÑÑ Ð½ÐµÑколÑко видов ввода, аÑгÑменÑÑ ÐºÐ¾ÑоÑÑÑ Ð¼Ð¾Ð³ÑÑ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ. ÐапÑимеÑ, ÑÑнкÑÐ¸Ñ Ð² ÑледÑÑÑем пÑимеÑе иÑполÑзÑÐµÑ ``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 Также можно задаваÑÑ Ð²Ð²Ð¾Ð´Ð½Ñе даннÑе в Ñвном виде пÑи вÑзове ÑÑнкÑии. ÐÑли задаваÑÑ Ð¿Ð°ÑамеÑÑÑ Ñвно, Ñо поÑÑдок не важен: .. link :: sage: is_divisible_by(6, divisor=5) False sage: is_divisible_by(divisor=2, number=6) True Ð Python блоки кода не оÑделÑÑÑÑÑ ÑигÑÑнÑми Ñкобками или дÑÑгими обознаÑениÑми, как в дÑÑÐ³Ð¸Ñ ÑзÑÐºÐ°Ñ . ÐмеÑÑо ÑÑого иÑполÑзÑÑÑÑÑ Ð¾ÑÑÑÑпÑ. ÐапÑимеÑ, ÑледÑÑÑее вÑдаÑÑ ÑинÑакÑиÑеÑкÑÑ Ð¾ÑибкÑ, Ñак как пеÑед ``return`` Ð½ÐµÑ Ñакого же колиÑеÑÑва оÑÑÑÑпов, как в пÑедÑдÑÑÐ¸Ñ ÑÑÑÐ¾ÐºÐ°Ñ . .. skip :: 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 ÑвлÑеÑÑÑ ÑпиÑок â Ð½Ð°Ð±Ð¾Ñ ÑазлиÑнÑÑ Ð¾Ð±ÑекÑов. ÐапÑимеÑ, команда ``range`` ÑоздаÑÑ ÑпиÑок: :: sage: range(2,10) [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)] ÐндекÑÑ Ð² ÑпиÑке наÑинаÑÑÑÑ Ñ Ð½ÑлÑ, как во Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑзÑÐºÐ°Ñ Ð¿ÑогÑаммиÑованиÑ. .. link :: sage: v[0] 1 sage: v[3] sin(x^3) ÐÑполÑзÑйÑе ``len(v)`` Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð´Ð»Ð¸Ð½Ñ ``v``; ``v.append(obj)`` Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð½Ð¾Ð²Ñй обÑÐµÐºÑ Ðº конÑÑ ``v``, и ``del v[i]``, ÑÑÐ¾Ð±Ñ ÑдалиÑÑ :math:`i`-й ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¸Ð· ``v``: .. link :: 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`` ÑоздаеÑÑÑ Ð² ÑледÑÑÑем виде: .. link :: sage: e = Evens(10) sage: e Even positive numbers up to n. ÐамеÑÑÑе, ÑÑо ``e`` вÑводиÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼ÐµÑода ``__repr__``, коÑоÑÑй бÑл задан нами. ÐÐ»Ñ Ð¿ÑоÑмоÑÑа ÑпиÑка ÑиÑел иÑполÑзÑйÑе ÑÑнкÑÐ¸Ñ ``list``: .. link :: sage: list(e) [2, 4, 6, 8, 10] Ðожно обÑаÑиÑÑÑÑ Ðº аÑÑибÑÑÑ ``n`` или иÑполÑзоваÑÑ ``e`` как ÑпиÑок. .. link :: sage: e.n 10 sage: e[2] 6