Nauč se Python > Kurzy > Hadí workshop @CodeWeekEU > Úvod do Pythonu > N-tice a rozbalování

N-tice

Už víš, že pomocí return lze z funkce vracet hodnotu:

def dvojnasobek(x):
    return x * 2

Jak ale napsat funkci, která vrátí dvě hodnoty? Chci třeba napsat funkci, která spočítá podíl a zbytek po dělení.

Dvě hodnoty se dají vrátit jako seznam:

def podil_a_zbytek(a, b):
    podil = a // b
    zbytek = a % b

    return [podil, zbytek]

print(podil_a_zbytek(5, 2))

Lepší je ale vrátit dvojici čísel – dvě čísla oddělená čárkou:

def podil_a_zbytek(a, b):
    podil = a // b
    zbytek = a % b

    return podil, zbytek

print(podil_a_zbytek(5, 2))

Tomuhle se říká dvojice – nebo trojice, čtveřice, pětice, šestice, prostě n-tice (angl. tuple) hodnot. Funguje podobně jako seznam, ale nedají se do ní přidávat prvky, nebo odebírat a jinak měnit. Když mám trojici, vždycky zůstane jako trojice.

Když máš n-tici, můžeš ji přiřazením rozbalit (angl. unpack) do několika proměnných:

podil, zbytek = podil_a_zbytek(5, 2)

print(podil)
print(zbytek)

N-tice mají spoustu využití, například:

  • Bod v prostoru má 3 souřadnice – trojice čísel!
  • Hrací karta má barvu a hodotu – dvojice čísla a řetězce, např. (2, 'piky')

Občas je potřeba dát n-tice do seznamu, např. abys uložil/a informace o celém balíčku hracích karet. V podobných případech je potřeba každou n-tici uzavřít do závorek, aby bylo jasné kde začíná a kde končí. Tady je seznam dvojic:

ruka = [(2, 'piky'), (10, 'kříže'), (8, 'káry')]

Když takový seznam máš, můžeš ho projít v cyklu for s pomocí rozbalování:

for hodnota, barva in ruka:
    print('Hraju', hodnota, 'a jsou to', barva)

Zip

N-tice, respektive sekvenci n-tic vrací funkce zip, která umožňuje projít zároveň několik seznamů, jejichž prvky si navzájem odpovídají:

veci = ['tráva', 'slunce', 'mrkev', 'řeka']
barvy = ['zelená', 'žluté', 'oranžová', 'modrá']
mista = ['na zemi', 'nahoře', 'na talíři', 'za zídkou']

for vec, barva, misto in zip(veci, barvy, mista):
    print(barva, vec, 'je', misto)

Toto je stránka lekce z kurzu, který probíhá nebo proběhl naživo s instruktorem.