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:
(2, 'piky')
Občas je potřeba dát n-tice do seznamu, např. abys uložila 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)
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)