Reference, funkce, slovník
Lekce 7
Úlohy
Statistika
Napište program, který bude číst čísla ze vstupu, dokud nedostane prázdný řádek. Poté vypíše součet, minimum, maximum, aritmetický průměr a směrodatnou odchylku.
Bezseznamová statistika
Zadání je stejné jako u úlohy Statistika, ale nesmíte použít seznam (nebo jinou podobnou datovou strukturu).
Vstup jako funkce
Na minulé hodině jsme si ukázali, jak načítat neznámý počet řádků ze vstupu.
Napište funkci, která toto obalí a vy následně budete moci zavolat jen
vstup = nacti_radky(), která vám vrátí pole řádků ze vstupu.
Co jsme dnes probrali
Reference
- Co program vypíše?
1 a = [1, 2, 3] 2 b = a 3 b.append(4) 4 print(a) 5 6 c = "Hello" 7 d = c 8 d = "World" 9 print(c) - Python pracuje se dvěma paměťmi
- Stack (nástěnka s lepíky, které říkají, co je v jaké krabici)
- Jeden lepík odkazuje na jednu krabici
- Heap (krabice ve skladu)
- Stack (nástěnka s lepíky, které říkají, co je v jaké krabici)
- Když vytvoříme proměnnou, nějak ji nazveme (jméno na lepíku) a přiřadíme do ní nějaká data (krabice ve skladu)
- Některé krabice jsou znovuotevíratelné (mutable), některé jsou zapečetěné a nemůžeme do nich nic přidávat nebo jinak jejich obsah měnit (immutable)
- Co když chceme ale kopírovat místo vytváření další reference? Použijeme
metodu
copy()
Funkce
- Funkce jsou kusy kódu, které můžeme volat vícekrát
- Můžeme jim předávat vstupní hodnoty (argumenty, parametry)
- Mohou nám vracet výstupní hodnoty (return)
- Definice funkce vypadá takto:
1 def jmeno_funkce(parametr1, parametr2): 2 # telo funkce 3 ... 4 return nejaka_hodnota - Volání funkce vypadá takto:
vysledek = jmeno_funkce(hodnota1, hodnota2) - S funkcemi už jsme se již setkali, např.
print(),input(),len(), atd. - Funkce nám pomáhají rozdělit program na menší části, které se lépe čtou a udržují
Slovníky (dictionary, hashmap, map)
- Seznamy mají velkou nevýhodu - umožňují nám k prvkům přímo 1 přistupovat jen pomocí indexů
- Budeme ale chtít hodnoty přiřazovat i jiným typům. Třeba ke jménu?
- Chceme si pamatovat klíč a hodnotu
- Slovník založíme jako
s = {} - Syntax je poté podobný seznamům, tedy
- Přiřazení do slovníku
1 pocty_bodu = {} 2 3 # Terka má 6 bodů 4 pocty_bodu["Terka"] = 6 - Klíč nemusí být řetězec, může to být i číslo
- Otázka "je klíč ve slovníku?"
1 if "Terka" in pocty_bodu: 2 ... - Iterace přes klíče
1 for klic in pocty_bodu: 2 ... - Iterace přes klíče i hodnoty
1 for klic, hodnota in pocty_bodu.items(): 2 ...
- Přiřazení do slovníku
- To, co je klíčem, musí být immutable typ (např. řetězec, číslo)
- Hodnotou může být cokoliv
-
přímo myšleno bez hledání ↩