Sage programozása
Kezelőfelület:
Segítség a parancsokhoz:
0 1 2 3 4 5 6 7 8 9 |
Sage-ben a szintaxist a Python nyelvből merítették, így a parancsok többsége működik Pythonban is.
Python:
Alapműveletek:
-29 |
Egészek hányadosa esetén nem végzi el az osztást, hanem törtként kezeli őket:
5/6 |
Ha azonban az egyik szám tizedes tört, akkor tizedes törtként számol tovább:
0.833333333333333 |
A Sage alapból csak a cella utolsó eredményét írja ki.
42 |
A print függvénnyel tudunk cellán belül eredményt kiíratni:
6 42 |
Pontosvesszővel is elválaszthatjuk a parancsokat:
6 42 |
32 |
(Pythonban az osztás és a hatványozás kicsit másképp működik.)
Egész osztás és maradékos osztás:
3 |
1 |
Változók: A változók lehetnek bármilyen angol karaktereket, számokat és _ jelet tartalmazó, betűvel kezdődő név.
|
5 |
Előző eredmény: _
5 |
Az értékadás = jellel történik, ilyenkor a bal oldalon nem állhat kifejezés, csak egy változó:
Traceback (click to the left of this block for traceback) ... SyntaxError: can't assign to operator |
|
|
3 |
A változó szerepelhet az értékadás jobb oldalán is. A jobb oldali kifejezés kiértékelődik, és ez lesz a változó új értéke.
|
30 |
A
b=b+1
kifejezés rövidítése:
|
31 |
62 |
Lehet egyszerre több értékadást is elvégezni:
|
3 |
4 |
Két változó cseréje:
|
4 |
3 |
Két változó cseréje külön változóval:
|
Logikai műveletek:
True |
False |
true, True: igaz
false, False: hamis.
and: és
or: vagy
not: nem
<, >, <=, >=, ==, != : kisebb, nagyobb, nem nagyobb, nem kisebb, egyenlő, nem egyenlő
True |
True |
False |
True |
Szövegek megadásához ' vagy " jelet használjunk. A két jel között nincs különbség.
'abc' |
'abcdef' |
"Teal'c" |
Listák
[1, 2, 3, 'alma'] |
listák összeadása:
[1, 2, 3, 'alma', 4, 5] |
|
[10, 20, 30, 40] |
A listák elemszámát a len paranccsal kérdezhetjük meg (length angol szó rövidítése).
4 |
Az i. elemet lista[i] módon érhetjük el. Vigyázat: a sorszámozás 0-tól kezdődik.
10 |
20 |
30 |
40 |
Traceback (click to the left of this block for traceback) ... IndexError: list index out of range |
A negatív indexek visszafelé lépkednek a listán:
40 |
30 |
20 |
10 |
Traceback (click to the left of this block for traceback) ... IndexError: list index out of range |
Van lehetőség a lista elemeit átírni:
|
['barack', 20, 30, 40] |
Részlistát lista[mettől:meddig] módon kérhetünk, ahol a "meddig" számként jelölt elemet már nem adja vissza.
['barack', 20, 30] |
[20, 30, 40] |
A teljes lista:
['barack', 20, 30, 40] |
Nem kell kiírnunk azt az oldalt, amiben nem szeretnénk megkötést.
Az első kivételével a teljes lista:
[20, 30, 40] |
Az utolsó kivételével a teljes lista:
['barack', 20, 30] |
A teljes lista:
['barack', 20, 30, 40] |
Megjegyzés: ezek működnek szöveggel is:
['barack', u'k\xf6rte', 30, 40] |
5 |
'cd' |
Gyakran előfordul, hogy 0-tól kell kezdenünk egy számolást:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14] |
Használhatjuk a következő jelöléseket:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
[11, 13, 15, 17, 19] |
A .. köré tehetünk vesszőket is:
[11, 13, 15, 17, 19] |
[1.00000000000000, 1.30000000000000, 1.60000000000000, 1.90000000000000, 2.20000000000000, 2.50000000000000, 2.80000000000000] |
Lekérdezhetjük, hogy egy elem benne van-e a listában:
['barack', u'k\xf6rte', 30, 40] |
False |
False |
for ciklus:
A ciklus végrehajta a kódot úgy, hogy a változót végighelyettesíti a lista elemein.
for változónév in lista:
végrehajtandó kód bentebb kezdve
1 négyzete: 1 2 négyzete: 4 3 négyzete: 9 ok |
Százig a számok összege:
5050 |
5050 |
Az l lista 0 . eleme: barack Az l lista 1 . eleme: körte Az l lista 2 . eleme: 30 Az l lista 3 . eleme: 40 |
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] |
if:
if feltétel:
végrehajtandó kód, ha a feltétel igaz
else: (ez a rész opcionális)
végrehajtandó kód, ha a feltétel hamis
Még minden ok |
Az is_prime függvény megmondja egy számról, hogy prímszám-e.
File: /home/petya/download/sage-4.8-linux-64bit-ubuntu_10.04.3_lts-x86_64-Linux/local/lib/python2.6/site-packages/sage/rings/arith.py Type: <type ‘function’> Definition: is_prime(n) Docstring:
|
True |
False |
100-ig a prímszámok:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 |
100-ig a prímszámok listában:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] |
Van lehetőség egy if elágazáson belül több feltételt is megadni:
if feltétel:
végrehajtandó kód, ha a feltétel igaz
elif feltétel2:
végrehajtandó kód, ha a feltétel2 igaz
...
else: (ez a rész opcionális)
végrehajtandó kód, ha az összes feltétel hamis
x pozitív |
x pozitív |
while ciklus:
A while ciklus használata egyszerűbb, mint a for ciklusé. Addig fut, amíg a feltétel igaz. Pontosan: minden körben leellenőrzi, hogy a feltétel igaz-e. Ha igen, akkor lefut a megadott kód mégegyszer.
while feltétel:
végrehajtandó kód
0 1 2 3 4 5 6 7 8 9 |
10 |
Találtam ikerprímet: 1019 1021 |
break:
A for és while ciklusokon belül kiadott break leállítja a ciklus futását (egészen pontosan a legbelső for/while ciklus futását amennyiben több ciklus van egymásba ágyazva).
5 |
1 2 |
Függvények írása:
def függvénynév(paraméterek):
kód
return visszatérési érték
|
Ha a return-t kicserélnénk print-re, akkor is kiírná az eredményt a függvény meghívasok, ám nem tudnánk egy változóban elmenteni.
2 |
|
2 |
n-ig a számok összege:
|
5050 |
n-ig a talált prímek száma:
|
25 |
Listát megfordító eljárás:
[3, 2, 1] |
|
[3, 2, 1] |
[42, 'kiwi', 'barack', 'alma'] |
|
|
[3, 2, 1] |
A next_prime(n) függvény kiírja az n-et követő első prímet. Ilyet mi is könnyen tudunk írni:
11 |
A return után végetér a függvény futása.
|
11 |
Írjunk faktoriálist kiszámoló programot!
|
120 |
Az átláthatóság kedvéért el is tüntethetjük a kódot, ha az első sorba %hide parancsot írunk:
|
720 |
A függvényünk csak akkor működik, ha a legalább egyszer lefuttatjuk. Ezt a Sage is megcsinálja helyettünk a betöltéskor, ha %auto -val kezdjük a cellát:
|
Az alábbi sor minden megnyitás után más véletlenszámot ad:
0.97156838714451421 |
Listák:
Egy lista elemként tartalmazhat bármit, akár egy másik listát is.
[1, 'alma', [1, 2], [[]], [[], []], [[[]]]] |
|
[[1, 2], [8, 9]] |
[1, 2] |
2 |
3 17 |
Listákat nagyon könnyen előállíthatunk a következő módon:
[képlet for változó in lista]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] |
[8, 8, 8, 8, 8, 8, 8, 8, 8, 8] |
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100] |
|
[0, 0.198669330795061, 0.389418342308651, 0.564642473395035, 0.717356090899523, 0.841470984807897, 0.932039085967226, 0.985449729988460, 0.999573603041505, 0.973847630878195, 0.909297426825682, 0.808496403819590, 0.675463180551151, 0.515501371821464, 0.334988150155905, 0.141120008059867, -0.0583741434275805, -0.255541102026832, -0.442520443294853, -0.611857890942720, -0.756802495307929, -0.871575772413589, -0.951602073889516, -0.993691003633465, -0.996164608835841, -0.958924274663138, -0.883454655720152, -0.772764487555986, -0.631266637872320, -0.464602179413755, -0.279415498198923, -0.0830894028174937] |
|
Lehetőségünk van még plusz feltételt írni. Csak a feltételt teljesítő elemek kerülnek be a listába.
[képlet for változó in lista if feltétel]
100-ig a prímek:
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] |
Az utolsó 3 prím 100 előtt:
[83, 89, 97] |
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765] |
A következő Fibonacci szám: 1 melynek felbontása 1 A következő Fibonacci szám: 1 melynek felbontása 1 A következő Fibonacci szám: 2 melynek felbontása 2 A következő Fibonacci szám: 3 melynek felbontása 3 A következő Fibonacci szám: 5 melynek felbontása 5 A következő Fibonacci szám: 8 melynek felbontása 2^3 A következő Fibonacci szám: 13 melynek felbontása 13 A következő Fibonacci szám: 21 melynek felbontása 3 * 7 A következő Fibonacci szám: 34 melynek felbontása 2 * 17 A következő Fibonacci szám: 55 melynek felbontása 5 * 11 A következő Fibonacci szám: 89 melynek felbontása 89 A következő Fibonacci szám: 144 melynek felbontása 2^4 * 3^2 A következő Fibonacci szám: 233 melynek felbontása 233 A következő Fibonacci szám: 377 melynek felbontása 13 * 29 A következő Fibonacci szám: 610 melynek felbontása 2 * 5 * 61 A következő Fibonacci szám: 987 melynek felbontása 3 * 7 * 47 A következő Fibonacci szám: 1597 melynek felbontása 1597 A következő Fibonacci szám: 2584 melynek felbontása 2^3 * 17 * 19 A következő Fibonacci szám: 4181 melynek felbontása 37 * 113 A következő Fibonacci szám: 6765 melynek felbontása 3 * 5 * 11 * 41 |
Az n-ig található prímek számának meghatározására írtunk egy primek függvényt:
|
Felhasználva ezt a módszert, ez megírható egyszerűbben:
|
25 |
2000 prímtényezős felbontása:
2^4 * 5^3 |
Írjuk ki 2000 pozitív osztóit!
Azaz minden osztója 2^k * 5^l alakú, ahol k=0,1,2,3,4 és l=0,1,2,3. Ezt könnyen megoldhatjuk dupla for használatával:
[1, 5, 25, 125, 2, 10, 50, 250, 4, 20, 100, 500, 8, 40, 200, 1000, 16, 80, 400, 2000] |
Szorzótábla:
[[1, 2, 3, 4, 5], [2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20], [5, 10, 15, 20, 25]] |
|
|
|