Informatika2-2015/Gyakorlat06

A MathWikiből
A lap korábbi változatát látod, amilyen Csirke (vitalap | szerkesztései) 2015. március 19., 13:31-kor történt szerkesztése után volt.

Tartalomjegyzék

6. gyakorlat - Referenciak, Hibakezelés

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. lakoma_1
  2. lakoma_2
  3. lakoma_3
  4. lakoma_4
  5. nyeses

Az első négy feladat egymásra épül, ugyanazt a lakoma nevű függvényt fejlesztitek egyre tovább. Ezért amikor kész az egyik feladat, érdemes átmásolni az addigi megoldásotokat a következő feladathoz. De vigyázzatok, az ellenőrző kódot ne másoljátok át, csak a megoldásotokat!

A mostani feladatok mind tartalmaznak a kódvázlatban ellenőrző kódot. Ehhez ne nyúljatok hozzá (a házi feladatnál pl. ha hozzányúltok, az hibásnak számít). Az se fontos, hogy megértsétek ami oda van írva, nem kell elolvasnotok. Ha véletlenül átírnátok, itt az eredeti kódvázlat mindegyik feladathoz:

lakoma_1:

def lakoma(vendegek, valtozasok):
    pass #TODO
 
################################
# Ellenorzo kod, ne modositsuk!
 
def lakoma_1(vendegek, valtozasok):
    assert lakoma(vendegek, valtozasok) == None
    return vendegek

lakoma_2:

def lakoma(vendegek, valtozasok):
    pass #TODO
 
################################
# Ellenorzo kod, ne modositsuk!
 
def lakoma_2(vendegek, valtozasok):
    ret = lakoma(vendegek, valtozasok)
    if ret != None:
        return "" + ret
    else:
        return vendegek

lakoma_3:

def lakoma(vendegek, valtozasok):
    pass #TODO
 
################################
# Ellenorzo kod, ne modositsuk!
 
def lakoma_3(vendegek, valtozasok):
    ret = lakoma(vendegek, valtozasok)
    if ret != None:
        return "" + ret
    else:
        return vendegek

lakoma_4:

def lakoma(vendegek, valtozasok):
    pass #TODO
 
################################
# Ellenorzo kod, ne modositsuk!
 
def lakoma_4(vendegek, valtozasok):
    try:
        ret = lakoma(vendegek, valtozasok)
    except Exception:
        return "Ellenor: hiba " +  sys.exc_info()[0].__name__
    if ret != None:
        return "" + ret
    else:
        return vendegek

nyeses:

def nyes(fa):
    pass #TODO
 
################################
# Ellenorzo kod, ne modositsuk!
 
def nyeses(fa):
    assert nyes(fa) == None
    return fa

Feladatok megoldása

lakoma_1

def lakoma(vendegek, valtozasok):
    for nev, szam in valtozasok:
        vendegek[nev] += szam

lakoma_2

def lakoma(vendegek, valtozasok):
    for nev, szam in valtozasok:
        vendegek[nev] += szam
        if vendegek[nev] < 0:
            return "Hiba: Negativ vendegszam"

lakoma_3

def lakoma(vendegek, valtozasok):
    try:
        for nev, szam in valtozasok:
            vendegek[nev] += szam
            if vendegek[nev] < 0:
                return "Hiba: Negativ vendegszam"
    except:
        return "Hiba: Rossz bemenet"

lakoma_4

def lakoma(vendegek, valtozasok):
    try:
        for nev, szam in valtozasok:
            vendegek[nev] += szam
            if vendegek[nev] < 0:
                return "Hiba: Negativ vendegszam"
    except KeyError:
        return "Hiba: Rossz nev"

nyeses

def nyes(fa):
    i = 0;
    while i < len(fa):
        if fa[i] == []:
            del fa[i]
        else:
            nyes(fa[i])
            i += 1

Itt figyelni kell, hogy csak akkor van i += 1, amikor nem töröltem az elemet. A másik esetben, ha törlöm fa[i]-t, akkor ami eddig fa[i+1] volt, az fog a fa[i] helyre csúszni, úgyhogy ha nem akarom kihagyni, nem szabad i-t növelni.

Személyes eszközök