Informatika2-2015/Gyakorlat05

A MathWikiből
(Változatok közti eltérés)
13. sor: 13. sor:
  
 
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>

A lap 2015. március 19., 14:21-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:

  1. osztok
  2. evek
  3. unnep_datum
  4. docstringek
  5. 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
Személyes eszközök