Informatika2-2013/Gyakorlat08
(egy szerkesztő 10 közbeeső változata nincs mutatva) | |||
3. sor: | 3. sor: | ||
* Mûveletek mint C-ben, ami itt még pluszban van: ** (hatványozás) | * Mûveletek mint C-ben, ami itt még pluszban van: ** (hatványozás) | ||
* Függvényeknek nem kell visszatérési értéket adni: | * Függvényeknek nem kell visszatérési értéket adni: | ||
− | < | + | <python> |
def fv_neve(x, y): | def fv_neve(x, y): | ||
return x + y | return x + y | ||
fv_neve(2, 10) | fv_neve(2, 10) | ||
− | </ | + | </python> |
* Több dologra is emlékeztet az elõzõ 2 sor kód: | * Több dologra is emlékeztet az elõzõ 2 sor kód: | ||
** Általában nem kell változóknak a típusát megadnunk | ** Általában nem kell változóknak a típusát megadnunk | ||
15. sor: | 15. sor: | ||
** Nincs pontosvesszõ, így értelemszerûen a sortörés számít | ** Nincs pontosvesszõ, így értelemszerûen a sortörés számít | ||
** függvényhívás mint C-ben. | ** függvényhívás mint C-ben. | ||
+ | * Tömbök helyett vannak listáink, melyek hasonlóan mûködnek: | ||
+ | <python> | ||
+ | l = [4, 5, 7, 8, 9, 4, 6] | ||
+ | b = l[1] + l[0] | ||
+ | l[2] = 8 | ||
+ | |||
+ | print l[2:5] | ||
+ | </python> | ||
+ | * Észrevételek: | ||
+ | ** Változókat nem kell deklarálni, mint ahogy C-ben kellett (nem kell int b, ahhoz hogy használhassam b-t) | ||
+ | ** Listák szintén 0-tól indexelendõk | ||
+ | ** Részlistát lekérhetünk a fenti módon | ||
+ | ** print-el tudunk írni a kimenetre (terminálba a mi esetünkben) | ||
+ | * További adatszerkezetek: | ||
+ | <python> | ||
+ | s = "The quick brown fox jumps over the lazy dog." # string | ||
+ | t = (4, 5) # tuple | ||
+ | |||
+ | d = {"alma":6, "korte":8, "banan":24} # dictionary | ||
+ | print d["korte"] | ||
+ | </python> | ||
+ | * Észrevételek: | ||
+ | ** Stringek és tuple-ök megváltoztathatatlanok, tehát nem írhatom, hogy t[0] = 7, vagy s[2] = 'c', de írhatom, hogy s = "Valami mas" | ||
+ | ** Dictionary, azaz szótárak nem 0-tól n-ig indexelnek, hanem valamilyen kulcs szerint indexelnek, új elemet könnyû rakni hozzájuk pl: d["eper"] = 34 | ||
+ | ** Kommenteket a # jellel írhatunk, a sor végéig hatnak, több soros kommentet pl a """Tobbsoros""" módon lehet | ||
+ | * Beépített függvények az adatszerkezeteken: | ||
+ | <python> | ||
+ | l = range(5) # [0, 1, 2, 3 ,4] | ||
+ | len(l) # 5 | ||
+ | |||
+ | d = {"alma":6, "korte":8, "banan":24} | ||
+ | d.keys() # ["alma", "korte", "banan"] | ||
+ | d.values() # [6, 8, 24] | ||
+ | "korte" in d # True | ||
+ | </python> | ||
+ | * Észrevételek: | ||
+ | ** range függvénnyel megkapjuk az adott hosszú tömb indexeinek a listáját | ||
+ | ** len függvény visszaadja a megadott lista hosszát (ilyen ugye C-ben nem volt) | ||
+ | ** szótár függvények magukért beszélne | ||
+ | * Vezérlési szerkezetek: | ||
+ | <python> | ||
+ | x = 6 | ||
+ | y = 43 | ||
+ | if y > 21: | ||
+ | print "y nagyobb" | ||
+ | elif y == 21: | ||
+ | print "y egyenlo" | ||
+ | else: | ||
+ | print "y kisebb" | ||
+ | |||
+ | l = [5, 4, 6, 2] | ||
+ | for i in l: | ||
+ | print i ** 2 | ||
+ | # 25 16 36 4 | ||
+ | |||
+ | for i in range(len(l)): | ||
+ | print l[i] ** 2 | ||
+ | # 25 16 36 4 | ||
+ | |||
+ | i = 0 | ||
+ | while i < 5: | ||
+ | print i ** 3 | ||
+ | # 0 1 8 27 64 | ||
+ | </python> | ||
+ | * Észrevételek: | ||
+ | ** Nem kellenek zárójelek a feltételek köré | ||
+ | ** A vezérlési szerkezet feje után (a blokk kezdete jelzéseként) kettõspont kell | ||
+ | ** Van elif | ||
+ | ** A for ciklus nem úgy megy mint C-ben, itt egy listán halad végig a ciklusváltozóval | ||
+ | ** A range függvény segíthet a listaindexeken való haladáson, így már inkább C szerû for-t kapunk | ||
+ | ** A while ciklus mint C-ben | ||
+ | |||
+ | |||
+ | * Vannak dolgok amikre lehet emlékeztek, de nem fog mûködne, mert csak sage-ben volt és nem python-ban, ezekre pár példa: | ||
+ | ** 28.factor() | ||
+ | ** x = var('x') | ||
+ | ** expand, solve, plot, is_prime | ||
+ | |||
+ | == Python script futtatása == | ||
+ | |||
+ | ==== Interaktív ==== | ||
+ | * Amit kevésbé fogunk használni, de néha hasznos lehet az az interaktív python: | ||
+ | ** Terminálba írjátok be, hogy python | ||
+ | ** Itt bármilyen parancsot irogathattok, az adott sor eredményét kiírja mindig, vagy print-elhettek is | ||
+ | ** exit()-el lehet kilépni | ||
+ | |||
+ | ==== Script file ==== | ||
+ | * Nyissatok egy gedit-et (terminálba: gedit& [az és jel azért kell, hogy tudjunk tovább dolgozni a terminálban]) | ||
+ | * Mentsétek el ezt az üres file-t valahova '''proba.py''' néven (a kiterjesztés a fontos) | ||
+ | * Terminálban navigáljatok el oda ahova mentettétek (cd mappa, cd ..) | ||
+ | * Írjátok be terminálba hogy '''python proba.py''' | ||
+ | * Remélhetõleg semmi nem történt, akkor minden oké | ||
+ | * Most írjátok a file-ba (gedit-ben), hogy '''print "Hello World"''' | ||
+ | * Mentsétek el, majd terminálba újra '''python proba.py''' | ||
+ | |||
+ | |||
+ | == Feladatok == | ||
+ | |||
+ | === Kiegészítés 1 === | ||
+ | |||
+ | Egészítsd ki az alábbi kódot, hogy a függvény az adott l lista azon elemeibõl álló listát adja vissza, melyek kisebbek az adott n számnál! | ||
+ | |||
+ | <python> | ||
+ | def kisebbek(l, n): | ||
+ | l2 = [] | ||
+ | for <!>: | ||
+ | <!>: | ||
+ | l2.append(i) | ||
+ | return l2 | ||
+ | |||
+ | print kisebbek([1,5,54,7,3,5,75,3,6,3,43], 10) | ||
+ | </python> | ||
+ | |||
+ | === Lista 1 === | ||
+ | Csinálj függvényt ami megfordítja a kapott lista elemeit. Ne a reverse függvényt használd! | ||
+ | |||
+ | Példa be és kimenet: | ||
+ | <python> | ||
+ | l = range(4) | ||
+ | print fordit(l) # [3,2,1,0] | ||
+ | </python> | ||
+ | |||
+ | === Lista 2 === | ||
+ | Csinálj függvényt ami két listából csinál egy szótárat. Egyik lista a kucsokat tartalmazza, a másik az értékeket. | ||
+ | |||
+ | Példa be és kimenet: | ||
+ | <python> | ||
+ | l = [5, "macska", 8] | ||
+ | l2 = [2, [2, 5], "c"] | ||
+ | print szotar(l, l2) # {5:2, "macska":[2,5], 8:"c"} | ||
+ | </python> | ||
+ | |||
+ | === Kiegészítés 2 === | ||
+ | |||
+ | Egészítsd ki az alábbi kódot, hogy egy olyan kódot kapjunk, mely megfordítja majd kiírja az adott '''s''' string-et! | ||
+ | |||
+ | <python> | ||
+ | s = "Volt egyszer egy kiskutya, elment a vasarba" | ||
+ | s2 = "" | ||
+ | for <!>: | ||
+ | s2 = i + s2 | ||
+ | |||
+ | <!> | ||
+ | </python> | ||
+ | |||
+ | === String 1 === | ||
+ | Írasd ki minden második betűjét egy kapott stringnek! | ||
+ | |||
+ | === String 2 === | ||
+ | írasd ki egy string karaktereit úgy, hogy az i. sorban az első i darab betűje van | ||
+ | |||
+ | === Random === | ||
+ | Dobj n-szer dobókockával és utána írd ki az esetek számát és az átlag értéket. | ||
+ | |||
+ | '''Használd:''' | ||
+ | |||
+ | <python> | ||
+ | import random | ||
+ | |||
+ | random.randint(1, 6) # a végpontok is kiosztódnak | ||
+ | </python> | ||
+ | |||
+ | === Euklideszi alg === | ||
+ | Valosítsd meg az algoritmust egy függvénnyel. Használj segéd fv-t vagy rekurziót ha kell. | ||
+ | [http://hu.wikipedia.org/wiki/Euklideszi_algoritmus Algoritmus leírása] |
A lap jelenlegi, 2013. április 2., 03:53-kori változata
Tartalomjegyzék |
Sage/Python Ismétlés
- Mûveletek mint C-ben, ami itt még pluszban van: ** (hatványozás)
- Függvényeknek nem kell visszatérési értéket adni:
def fv_neve(x, y): return x + y fv_neve(2, 10)
- Több dologra is emlékeztet az elõzõ 2 sor kód:
- Általában nem kell változóknak a típusát megadnunk
- A def kulcsszóval tudunk függvényt definiálni
- Fontos a formázás, itt nincs kapcsos zárójel, a szóközök jelzik, hogy melyik blokkon belül vagyunk (itt a return a def-en belül van, de a függvényhívás már nem)
- Nincs pontosvesszõ, így értelemszerûen a sortörés számít
- függvényhívás mint C-ben.
- Tömbök helyett vannak listáink, melyek hasonlóan mûködnek:
l = [4, 5, 7, 8, 9, 4, 6] b = l[1] + l[0] l[2] = 8 print l[2:5]
- Észrevételek:
- Változókat nem kell deklarálni, mint ahogy C-ben kellett (nem kell int b, ahhoz hogy használhassam b-t)
- Listák szintén 0-tól indexelendõk
- Részlistát lekérhetünk a fenti módon
- print-el tudunk írni a kimenetre (terminálba a mi esetünkben)
- További adatszerkezetek:
s = "The quick brown fox jumps over the lazy dog." # string t = (4, 5) # tuple d = {"alma":6, "korte":8, "banan":24} # dictionary print d["korte"]
- Észrevételek:
- Stringek és tuple-ök megváltoztathatatlanok, tehát nem írhatom, hogy t[0] = 7, vagy s[2] = 'c', de írhatom, hogy s = "Valami mas"
- Dictionary, azaz szótárak nem 0-tól n-ig indexelnek, hanem valamilyen kulcs szerint indexelnek, új elemet könnyû rakni hozzájuk pl: d["eper"] = 34
- Kommenteket a # jellel írhatunk, a sor végéig hatnak, több soros kommentet pl a """Tobbsoros""" módon lehet
- Beépített függvények az adatszerkezeteken:
l = range(5) # [0, 1, 2, 3 ,4] len(l) # 5 d = {"alma":6, "korte":8, "banan":24} d.keys() # ["alma", "korte", "banan"] d.values() # [6, 8, 24] "korte" in d # True
- Észrevételek:
- range függvénnyel megkapjuk az adott hosszú tömb indexeinek a listáját
- len függvény visszaadja a megadott lista hosszát (ilyen ugye C-ben nem volt)
- szótár függvények magukért beszélne
- Vezérlési szerkezetek:
x = 6 y = 43 if y > 21: print "y nagyobb" elif y == 21: print "y egyenlo" else: print "y kisebb" l = [5, 4, 6, 2] for i in l: print i ** 2 # 25 16 36 4 for i in range(len(l)): print l[i] ** 2 # 25 16 36 4 i = 0 while i < 5: print i ** 3 # 0 1 8 27 64
- Észrevételek:
- Nem kellenek zárójelek a feltételek köré
- A vezérlési szerkezet feje után (a blokk kezdete jelzéseként) kettõspont kell
- Van elif
- A for ciklus nem úgy megy mint C-ben, itt egy listán halad végig a ciklusváltozóval
- A range függvény segíthet a listaindexeken való haladáson, így már inkább C szerû for-t kapunk
- A while ciklus mint C-ben
- Vannak dolgok amikre lehet emlékeztek, de nem fog mûködne, mert csak sage-ben volt és nem python-ban, ezekre pár példa:
- 28.factor()
- x = var('x')
- expand, solve, plot, is_prime
Python script futtatása
Interaktív
- Amit kevésbé fogunk használni, de néha hasznos lehet az az interaktív python:
- Terminálba írjátok be, hogy python
- Itt bármilyen parancsot irogathattok, az adott sor eredményét kiírja mindig, vagy print-elhettek is
- exit()-el lehet kilépni
Script file
- Nyissatok egy gedit-et (terminálba: gedit& [az és jel azért kell, hogy tudjunk tovább dolgozni a terminálban])
- Mentsétek el ezt az üres file-t valahova proba.py néven (a kiterjesztés a fontos)
- Terminálban navigáljatok el oda ahova mentettétek (cd mappa, cd ..)
- Írjátok be terminálba hogy python proba.py
- Remélhetõleg semmi nem történt, akkor minden oké
- Most írjátok a file-ba (gedit-ben), hogy print "Hello World"
- Mentsétek el, majd terminálba újra python proba.py
Feladatok
Kiegészítés 1
Egészítsd ki az alábbi kódot, hogy a függvény az adott l lista azon elemeibõl álló listát adja vissza, melyek kisebbek az adott n számnál!
def kisebbek(l, n): l2 = [] for <!>: <!>: l2.append(i) return l2 print kisebbek([1,5,54,7,3,5,75,3,6,3,43], 10)
Lista 1
Csinálj függvényt ami megfordítja a kapott lista elemeit. Ne a reverse függvényt használd!
Példa be és kimenet:
l = range(4) print fordit(l) # [3,2,1,0]
Lista 2
Csinálj függvényt ami két listából csinál egy szótárat. Egyik lista a kucsokat tartalmazza, a másik az értékeket.
Példa be és kimenet:
l = [5, "macska", 8] l2 = [2, [2, 5], "c"] print szotar(l, l2) # {5:2, "macska":[2,5], 8:"c"}
Kiegészítés 2
Egészítsd ki az alábbi kódot, hogy egy olyan kódot kapjunk, mely megfordítja majd kiírja az adott s string-et!
s = "Volt egyszer egy kiskutya, elment a vasarba" s2 = "" for <!>: s2 = i + s2 <!>
String 1
Írasd ki minden második betűjét egy kapott stringnek!
String 2
írasd ki egy string karaktereit úgy, hogy az i. sorban az első i darab betűje van
Random
Dobj n-szer dobókockával és utána írd ki az esetek számát és az átlag értéket.
Használd:
import random random.randint(1, 6) # a végpontok is kiosztódnak
Euklideszi alg
Valosítsd meg az algoritmust egy függvénnyel. Használj segéd fv-t vagy rekurziót ha kell. Algoritmus leírása