Informatika2-2015/Gyakorlat05
A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „= 5. gyakorlat - Referenciak, Objektumok = Ezen a gyakorlaton az előző heti előadás anyagát dolgo…”) |
|||
(egy szerkesztő 2 közbeeső változata nincs mutatva) | |||
8. sor: | 8. sor: | ||
# osztok | # osztok | ||
# evek | # evek | ||
+ | # unnep_datum | ||
# docstringek | # docstringek | ||
# ponttabla | # ponttabla | ||
A '''ponttabla''' feladat ugyan kicsit bonyolultabb, mint amiket itt általában laboron feladok, de jobban próbál egy valós problémához hasonlítani ami veletek is előfordulhat. Úgy gondolom olyan szinten kéne körülbelül most lennetek, hogy meg tudjátok azt oldani, ha nem is 10-20 perc alatt, de néhány óra alatt. Tananyag szempontjából nincsen semmi új benne, de a megírt programok bonyolultságában is kell fejlődni. | A '''ponttabla''' feladat ugyan kicsit bonyolultabb, mint amiket itt általában laboron feladok, de jobban próbál egy valós problémához hasonlítani ami veletek is előfordulhat. Úgy gondolom olyan szinten kéne körülbelül most lennetek, hogy meg tudjátok azt oldani, ha nem is 10-20 perc alatt, de néhány óra alatt. Tananyag szempontjából nincsen semmi új benne, de a megírt programok bonyolultságában is kell fejlődni. | ||
+ | |||
+ | == Feladatok megoldása == | ||
+ | |||
+ | === osztok === | ||
+ | |||
+ | <python>import pprint | ||
+ | |||
+ | def osztok(szamok, printer): | ||
+ | oszto_szotar = {} | ||
+ | for szam in szamok: | ||
+ | l = [] | ||
+ | for i in range(1, szam+1): | ||
+ | if szam % i == 0: | ||
+ | l.append(i) | ||
+ | oszto_szotar[szam] = l | ||
+ | |||
+ | return printer.pformat(oszto_szotar)</python> | ||
+ | |||
+ | === evek === | ||
+ | |||
+ | <python>import datetime | ||
+ | def evek(szulinapok): | ||
+ | d = {} | ||
+ | for szulinap in szulinapok: | ||
+ | ev = szulinap.year | ||
+ | if ev in d: | ||
+ | d[ev] += 1 | ||
+ | else: | ||
+ | d[ev] = 1 | ||
+ | return d</python> | ||
+ | |||
+ | === unnep_datum === | ||
+ | |||
+ | <python>import datetime | ||
+ | |||
+ | def unnep_datum(nev): | ||
+ | if nev == "forradalom": | ||
+ | return datetime.date(1848, 3, 15) | ||
+ | elif nev == "allamalapitas": | ||
+ | return datetime.date(1083, 8, 20) | ||
+ | elif nev == "otvenhat": | ||
+ | return datetime.date(1956, 10, 23)</python> | ||
+ | |||
+ | === docstringek === | ||
+ | |||
+ | <python>def jo_docstring(szoveg): | ||
+ | if not szoveg: | ||
+ | return False | ||
+ | if not szoveg[0].isupper(): | ||
+ | return False | ||
+ | if szoveg.find('.') == -1 or szoveg.find('.') < len(szoveg)-1: | ||
+ | return False | ||
+ | return True | ||
+ | |||
+ | def docstringek(javaslatok): | ||
+ | return filter(jo_docstring, javaslatok)</python> | ||
+ | |||
+ | Alternatív megoldás lambdával: | ||
+ | |||
+ | <python>def docstringek(javaslatok): | ||
+ | return filter(lambda s : s and s[0].isupper() and s.find('.') == len(s) - 1, javaslatok)</python> | ||
+ | |||
+ | === ponttabla === | ||
+ | |||
+ | <python>def ponttabla(tablazat): | ||
+ | print tablazat | ||
+ | sorok = tablazat.split("\n") | ||
+ | nevek = sorok[0].split("|")[1:] | ||
+ | n = len(nevek) | ||
+ | for i in range(n): | ||
+ | nevek[i] = nevek[i].strip() | ||
+ | |||
+ | pontok = [0 for i in range(n)] | ||
+ | for sor in sorok[1:]: | ||
+ | elemek = sor.split("|") | ||
+ | for i in range(n): | ||
+ | pontok[i] += int(elemek[i+1]) | ||
+ | |||
+ | pont_szotar = {} | ||
+ | for i in range(n): | ||
+ | pont_szotar[nevek[i]] = pontok[i] | ||
+ | return pont_szotar</python> | ||
+ | |||
+ | == Házi feladatok megoldása == | ||
+ | |||
+ | === kodolt_datum === | ||
+ | |||
+ | <python>import datetime | ||
+ | |||
+ | def kodolt_datum(kod): | ||
+ | dekodolas = {'e' : 1, 'k' : 2, 'h' : 3, 'n' : 4, 'o' : 5, 'a' : 6, 't' : 7, 'y' : 8, 'i' : 9, 'u' : 0} | ||
+ | ev = 1000 * dekodolas[kod[0]] + 100 * dekodolas[kod[1]] + 10 * dekodolas[kod[2]] + dekodolas[kod[3]] | ||
+ | honap = 10 * dekodolas[kod[4]] + dekodolas[kod[5]] | ||
+ | nap = 10 * dekodolas[kod[6]] + dekodolas[kod[7]] | ||
+ | return datetime.date(ev, honap, nap)</python> | ||
+ | |||
+ | === nev_neptun === | ||
+ | |||
+ | <python>def nev_neptun(neptunok): | ||
+ | return sorted(neptunok.values())</python> | ||
+ | |||
+ | Vagy ha a lista ''sort()'' metódusát szeretnénk használni akkor: | ||
+ | |||
+ | <python>def nev_neptun(neptunok): | ||
+ | kodok = neptunok.values() | ||
+ | kodok.sort() | ||
+ | return kodok</python> |
A lap jelenlegi, 2015. március 19., 18:09-kori változata
Tartalomjegyzék |
5. gyakorlat - Referenciak, Objektumok
Ezen a gyakorlaton az előző heti előadás anyagát dolgozzuk fel.
Feladatok
Feladatok a CloudCoder-en megtalálhatóak. Ajánlott sorrend:
- osztok
- evek
- unnep_datum
- docstringek
- ponttabla
A ponttabla feladat ugyan kicsit bonyolultabb, mint amiket itt általában laboron feladok, de jobban próbál egy valós problémához hasonlítani ami veletek is előfordulhat. Úgy gondolom olyan szinten kéne körülbelül most lennetek, hogy meg tudjátok azt oldani, ha nem is 10-20 perc alatt, de néhány óra alatt. Tananyag szempontjából nincsen semmi új benne, de a megírt programok bonyolultságában is kell fejlődni.
Feladatok megoldása
osztok
import pprint def osztok(szamok, printer): oszto_szotar = {} for szam in szamok: l = [] for i in range(1, szam+1): if szam % i == 0: l.append(i) oszto_szotar[szam] = l return printer.pformat(oszto_szotar)
evek
import datetime def evek(szulinapok): d = {} for szulinap in szulinapok: ev = szulinap.year if ev in d: d[ev] += 1 else: d[ev] = 1 return d
unnep_datum
import datetime def unnep_datum(nev): if nev == "forradalom": return datetime.date(1848, 3, 15) elif nev == "allamalapitas": return datetime.date(1083, 8, 20) elif nev == "otvenhat": return datetime.date(1956, 10, 23)
docstringek
def jo_docstring(szoveg): if not szoveg: return False if not szoveg[0].isupper(): return False if szoveg.find('.') == -1 or szoveg.find('.') < len(szoveg)-1: return False return True def docstringek(javaslatok): return filter(jo_docstring, javaslatok)
Alternatív megoldás lambdával:
def docstringek(javaslatok): return filter(lambda s : s and s[0].isupper() and s.find('.') == len(s) - 1, javaslatok)
ponttabla
def ponttabla(tablazat): print tablazat sorok = tablazat.split("\n") nevek = sorok[0].split("|")[1:] n = len(nevek) for i in range(n): nevek[i] = nevek[i].strip() pontok = [0 for i in range(n)] for sor in sorok[1:]: elemek = sor.split("|") for i in range(n): pontok[i] += int(elemek[i+1]) pont_szotar = {} for i in range(n): pont_szotar[nevek[i]] = pontok[i] return pont_szotar
Házi feladatok megoldása
kodolt_datum
import datetime def kodolt_datum(kod): dekodolas = {'e' : 1, 'k' : 2, 'h' : 3, 'n' : 4, 'o' : 5, 'a' : 6, 't' : 7, 'y' : 8, 'i' : 9, 'u' : 0} ev = 1000 * dekodolas[kod[0]] + 100 * dekodolas[kod[1]] + 10 * dekodolas[kod[2]] + dekodolas[kod[3]] honap = 10 * dekodolas[kod[4]] + dekodolas[kod[5]] nap = 10 * dekodolas[kod[6]] + dekodolas[kod[7]] return datetime.date(ev, honap, nap)
nev_neptun
def nev_neptun(neptunok): return sorted(neptunok.values())
Vagy ha a lista sort() metódusát szeretnénk használni akkor:
def nev_neptun(neptunok): kodok = neptunok.values() kodok.sort() return kodok