Informatika1-2014/Gyakorlat5
(→Ismétlés a feladatok elõtt) |
(→Ismétlés a feladatok elõtt) |
||
(egy szerkesztő 4 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 | + | 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á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: | ||
114. sor: | 113. sor: | ||
L = [1, 3, 5] | L = [1, 3, 5] | ||
print negyzet2(L) # [1, 9, 25] | print negyzet2(L) # [1, 9, 25] | ||
− | print L | + | 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 bemeneti '''L''' listát is megváltoztatta, ezt legtöbbször nem szeretnénk. | ||
+ | * A jó megoldás: | ||
<python> | <python> | ||
def negyzet3(L): | def negyzet3(L): | ||
123. sor: | 124. sor: | ||
retval.append(e ** 2) | retval.append(e ** 2) | ||
return retval | return retval | ||
+ | |||
+ | L = [1, 3, 5] | ||
+ | print negyzet3(L) # [1, 9, 25] | ||
+ | print L # [1, 3, 5] | ||
+ | </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. | ||
+ | |||
+ | |||
+ | ==== 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> | </python> | ||
A lap jelenlegi, 2014. október 14., 02: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