Informatika1-2014/Gyakorlat5

A MathWikiből
(Változatok közti eltérés)
(Ismétlés a feladatok elõtt)
(Ismétlés a feladatok elõtt)
 
(egy szerkesztő 3 közbeeső változata nincs mutatva)
45. sor: 45. sor:
 
           for elemN in bejárható_objektumN if feltételN]
 
           for elemN in bejárható_objektumN if feltételN]
 
</python>
 
</python>
Több feltétel is ciklus is írható akár.
+
Több feltétel és ciklus is írható akár.
  
 
Pl:
 
Pl:
52. sor: 52. sor:
 
[x for x in [-1, 2, -3, 4] if x > 0]  # [2, 4]
 
[x for x in [-1, 2, -3, 4] if x > 0]  # [2, 4]
 
</python>
 
</python>
 
  
 
== Ismétlés a feladatok elõtt ==
 
== Ismétlés a feladatok elõtt ==
89. sor: 88. sor:
 
</python>
 
</python>
  
==== Listákkal manipulálása függvényekkel ====
+
==== Listák manipulálása függvényekkel ====
  
 
* Tekintsük a következõ függvényt, mely egy számokat tartalmazó listát kap és vissza szeretné adni a listát melyben a számok négyzetei vannak:
 
* Tekintsük a következõ függvényt, mely egy számokat tartalmazó listát kap és vissza szeretné adni a listát melyben a számok négyzetei vannak:
116. sor: 115. sor:
 
print L    # [1, 9, 25]
 
print L    # [1, 9, 25]
 
</python>
 
</python>
Ez már négyzetre emeli az értékeket, de van egy nem kívánt mellékhatása, a bemenet '''L''' listát is megváltoztatta, ezt legtöbbször nem szeretnénk.
+
Ez már négyzetre emeli az értékeket, de van egy nem kívánt mellékhatása, a bemeneti '''L''' listát is megváltoztatta, ezt legtöbbször nem szeretnénk.
  
 
* A jó megoldás:
 
* A jó megoldás:
131. sor: 130. sor:
 
</python>
 
</python>
 
Egy új listát töltünk fel a kívánt elemekkel és ezt adjuk vissza, így a bemeneti listát biztosan nem bántottuk.
 
Egy új listát töltünk fel a kívánt elemekkel és ezt adjuk vissza, így a bemeneti listát biztosan nem bántottuk.
 +
 +
 +
==== Szummázás adott értékig ====
 +
 +
* A következõ egy olyan függvény, ami szummázza a bemeneti '''L''' lista elemeit egészen addig amíg a szumma értéke kisebb mint 20, majd visszaadja az így kapott szummát:
 +
 +
<python>
 +
def resz_sum(L):
 +
    i = 0
 +
    s = 0
 +
    while s + L[i] < 20:
 +
        s += L[i]
 +
        i += 1
 +
    return s
 +
 +
lista = [5, 2, 7, 8, 4, 7]
 +
print resz_sum(lista)    # 14
 +
</python>
 +
 +
Egy másik megoldás:
 +
<python>
 +
def resz_sum2(L):
 +
    s = 0
 +
    for e in L:
 +
        if s + e < 20:
 +
            s += e
 +
        else:
 +
            break    # megszakítja a ciklust
 +
    return s
 +
</python>
  
 
== CloudCoder feladatok ==
 
== CloudCoder feladatok ==
  
 
* [https://ccweb.math.bme.hu/cloudcoder/ https://ccweb.math.bme.hu/cloudcoder/]
 
* [https://ccweb.math.bme.hu/cloudcoder/ https://ccweb.math.bme.hu/cloudcoder/]

A lap jelenlegi, 2014. október 14., 01:44-kori változata

Tartalomjegyzék

Listákról még

  • Listák a listában (mátrix):
M = [[1,2,3],[4,5,6],[7,8,9]]
  • Ennek elsõ eleme:
print M[0]    # [1,2,3]
  • Tehát M elemei listák, így ezeknek is lekérhetjük az elemeit:
print M[0][2]    # 3
  • Ugyanúgy adhatunk hozzá elemeket, mint korábban:
M.append([10,11,12])
print M    # [[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
  • A belsõ listák hossza eltérhet:
N = [[1,2,5],[4],[3,2,1,4]]
  • Bár ez ritka, de keverten szinte bármit tárolhatunk listákban:
H = ["kutya", [1, 5, "macska"], [3, [5, 3]], 5.3]

Listaértelmezések

[kifejezés for elem in bejárható_objektum]

Egy olyan listát hoz létre melyben a kifejezés szerepel a bejárható_objektum minden elemére.

[kifejezés for elem in bejárható_objektum if feltétel]

Mint az elõzõ, de csak azok az elemek lesznek benne melyekre teljesül a feltétel.

[kifejezés for elem1 in bejárható_objektum1 if feltétel1
           for elem2 in bejárható_objektum2 if feltétel2
           for elemN in bejárható_objektumN if feltételN]

Több feltétel és ciklus is írható akár.

Pl:

[x ** 2 for x in [1, 2, 3, 4]]  # [1, 4, 9, 16]
[x for x in [-1, 2, -3, 4] if x > 0]  # [2, 4]

Ismétlés a feladatok elõtt

Függvények használata függvényekben

Használhatunk minden általunk definiált függvényt a függvényinkben. Pl:

def hatvany(x, n):
    return x ** n
 
def fv(x):
    return hatvany(x, 3) + 2 * hatvany(x, 2) + 2 * x + 1

Collatz sejtéses feladat clean code stílusban:

def paros(n):
    if n % 2 == 0:
        return True
    else:
        return False
 
def collatz_lepes(n):
    if paros(n):
        return n / 2
    else:
        return n * 3 + 1
 
def collatz(n):
    while n != 1:
        n = collatz_lepes(n)
        print n

Listák manipulálása függvényekkel

  • Tekintsük a következõ függvényt, mely egy számokat tartalmazó listát kap és vissza szeretné adni a listát melyben a számok négyzetei vannak:
def negyzet1(L):
    for e in L:
        e = e ** 2
    return L
 
L = [1, 3, 5]
print negyzet1(L)   # [1, 3, 5]

Nem úgy mûködik ahogy szeretnénk, mert a for ciklus e változója csak egy másolata a lista adott elemének, nem az elem maga, így ha négyzetre emeljük attól még a listában nem történik változás.

  • Próbáljuk akkor közvetlenül elérni az elemeket indexekkel:
def negyzet2(L):
    i = 0
    while i < len(L):
        L[i] = L[i] ** 2
        i += 1
    return L
 
L = [1, 3, 5]
print negyzet2(L)   # [1, 9, 25]
print L    # [1, 9, 25]

Ez már négyzetre emeli az értékeket, de van egy nem kívánt mellékhatása, a bemeneti L listát is megváltoztatta, ezt legtöbbször nem szeretnénk.

  • A jó megoldás:
def negyzet3(L):
    retval = []
    for e in L:
        retval.append(e ** 2)
    return retval
 
L = [1, 3, 5]
print negyzet3(L)   # [1, 9, 25]
print L    # [1, 3, 5]

Egy új listát töltünk fel a kívánt elemekkel és ezt adjuk vissza, így a bemeneti listát biztosan nem bántottuk.


Szummázás adott értékig

  • A következõ egy olyan függvény, ami szummázza a bemeneti L lista elemeit egészen addig amíg a szumma értéke kisebb mint 20, majd visszaadja az így kapott szummát:
def resz_sum(L):
    i = 0
    s = 0
    while s + L[i] < 20:
        s += L[i]
        i += 1
    return s
 
lista = [5, 2, 7, 8, 4, 7]
print resz_sum(lista)    # 14

Egy másik megoldás:

def resz_sum2(L):
    s = 0
    for e in L:
        if s + e < 20:
            s += e
        else:
            break    # megszakítja a ciklust
    return s

CloudCoder feladatok

Személyes eszközök