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., 02: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