|
| 1 | +# <var>N</var>-tice |
| 2 | + |
| 3 | +Už víš, že pomocí `return` lze z funkce vracet hodnotu: |
| 4 | + |
| 5 | +``` python |
| 6 | +def dvojnasobek(x): |
| 7 | + return x * 2 |
| 8 | +``` |
| 9 | + |
| 10 | +Jak ale napsat funkci, která vrátí dvě hodnoty? |
| 11 | +Chci třeba napsat funkci, která spočítá podíl a zbytek po dělení. |
| 12 | + |
| 13 | +Dvě hodnoty se dají vrátit jako seznam: |
| 14 | + |
| 15 | +``` python |
| 16 | +def podil_a_zbytek(a, b): |
| 17 | + podil = a // b |
| 18 | + zbytek = a % b |
| 19 | + |
| 20 | + return [podil, zbytek] |
| 21 | + |
| 22 | +print(podil_a_zbytek(5, 2)) |
| 23 | +``` |
| 24 | + |
| 25 | +Lepší je ale vrátit *dvojici* čísel – dvě čísla oddělená čárkou: |
| 26 | + |
| 27 | +``` python |
| 28 | +def podil_a_zbytek(a, b): |
| 29 | + podil = a // b |
| 30 | + zbytek = a % b |
| 31 | + |
| 32 | + return podil, zbytek |
| 33 | + |
| 34 | +print(podil_a_zbytek(5, 2)) |
| 35 | +``` |
| 36 | + |
| 37 | +Tomuhle se říká dvojice – nebo trojice, čtveřice, pětice, šestice, prostě |
| 38 | +<var>n</var>-tice (angl. *tuple*) hodnot. |
| 39 | +Funguje podobně jako seznam, ale nedají se do ní přidávat prvky, nebo odebírat |
| 40 | +a jinak měnit. |
| 41 | +Když mám trojici, vždycky zůstane jako trojice. |
| 42 | + |
| 43 | +Když máš <var>n</var>-tici, můžeš ji přiřazením *rozbalit* (angl. *unpack*) |
| 44 | +do několika proměnných: |
| 45 | + |
| 46 | +``` python |
| 47 | +podil, zbytek = podil_a_zbytek(5, 2) |
| 48 | + |
| 49 | +print(podil) |
| 50 | +print(zbytek) |
| 51 | +``` |
| 52 | + |
| 53 | +<var>N</var>-tice mají spoustu využití, například: |
| 54 | + |
| 55 | +* Bod v prostoru má 3 souřadnice – trojice čísel! |
| 56 | +* Hrací karta má barvu a hodotu – dvojice čísla a řetězce, např. `(2, 'piky')` |
| 57 | + |
| 58 | +Občas je potřeba dát <var>n</var>-tice do seznamu, např. abys uložil{{a}} |
| 59 | +informace o celém balíčku hracích karet. |
| 60 | +V podobných případech je potřeba každou <var>n</var>-tici uzavřít do závorek, |
| 61 | +aby bylo jasné kde začíná a kde končí. |
| 62 | +Tady je seznam dvojic: |
| 63 | + |
| 64 | +```python |
| 65 | +ruka = [(2, 'piky'), (10, 'kříže'), (8, 'káry')] |
| 66 | +``` |
| 67 | + |
| 68 | +Když takový seznam máš, můžeš ho projít v cyklu `for` s pomocí rozbalování: |
| 69 | + |
| 70 | +``` python |
| 71 | +for hodnota, barva in ruka: |
| 72 | + print('Hraju', hodnota, 'a jsou to', barva) |
| 73 | +``` |
| 74 | + |
| 75 | +## Zip |
| 76 | + |
| 77 | +<var>N</var>-tice, respektive sekvenci <var>n</var>-tic vrací funkce `zip`, |
| 78 | +která umožňuje projít zároveň několik seznamů, |
| 79 | +jejichž prvky si navzájem odpovídají: |
| 80 | + |
| 81 | +``` python |
| 82 | +veci = ['tráva', 'slunce', 'mrkev', 'řeka'] |
| 83 | +barvy = ['zelená', 'žluté', 'oranžová', 'modrá'] |
| 84 | +mista = ['na zemi', 'nahoře', 'na talíři', 'za zídkou'] |
| 85 | + |
| 86 | +for vec, barva, misto in zip(veci, barvy, mista): |
| 87 | + print(barva, vec, 'je', misto) |
| 88 | +``` |
| 89 | + |
| 90 | + |
0 commit comments