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)
65. sor: 65. sor:
  
 
def fv(x):
 
def fv(x):
     return hatvany(x, 3) + 2 * hatvany(x,2) + 2 * x + 1
+
     return hatvany(x, 3) + 2 * hatvany(x, 2) + 2 * x + 1
 
</python>
 
</python>
  
87. sor: 87. sor:
 
         n = collatz_lepes(n)
 
         n = collatz_lepes(n)
 
         print n
 
         print n
 +
</python>
 +
 +
==== Listákkal 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:
 +
<python>
 +
def negyzet1(L):
 +
    for e in L:
 +
        e = e ** 2
 +
    return L
 +
 +
L = [1, 3, 5]
 +
print negyzet1(L)  # [1, 3, 5]
 +
</python>
 +
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:
 +
<python>
 +
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
 +
</python>
 +
 +
<python>
 +
def negyzet3(L):
 +
    retval = []
 +
    for e in L:
 +
        retval.append(e ** 2)
 +
    return retval
 
</python>
 
</python>
  

A lap 2014. október 14., 01:24-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 is 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ákkal 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
def negyzet3(L):
    retval = []
    for e in L:
        retval.append(e ** 2)
    return retval

CloudCoder feladatok

Személyes eszközök