Pole
Lekce 7
Úlohy
Statistika (3 body)
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 (4 body)
Zadání je stejné jako u úlohy Statistika, ale nesmíte použít seznam (nebo jinou podobnou datovou strukturu).
Odmocnina (4 body)
Spočítejte druhou odmocninu. Program na vstupu očekává celé číslo. Pokud je jeho odmocnina také celé číslo, vypíše ji.
Jinak nevypíše nic. Nesmíte použít funkci math.sqrt
, operátor **
a jiné.
Jde hlavně o nápad. Nejlepší možné řešení zvládne najít odmocninu ke $2^n$ na $n$ kroků. Až budete mít kód napsaný, proveďte jednoduchou analýzu časové složitosti. Jde mi o to, abyste si byli schopni uvědomit, jak dlouho program běží. Kód opatřete příslušnými komentáři.
Seznamy
- Neboli pole
- Dosud jsme se setkali s proměnnými typu číslo, řetězec, atd.
- My bychom ale chtěli používat i seznamy hodnot
- např. seznam jmen lidí ve třídě, čísla pro výpočet aritmetického průměru
- V Pythonu seznamy hodnot píšeme do hranatých závorek
[
a]
- Příklady
- Seznam pěti čísel
cisla = [2, 5, 3, 7, 8]
- Seznam tří jmen (řetězců)
jmena = ["marek", "petr", "david"]
- Seznam hodnot různých typů
hodnoty = [8, "jablko", None, 2.5, True]
- Seznam pěti čísel
- Můžeme se koukat na hodnoty na tzv. indexech
- Tedy pozice v seznamu
- V Pythonu (a ve většině programovacích jazycích) indexujeme od nuly
- Proč od nuly?
- Kdybychom chtěli v předchozím příkladu vypsat jméno
petr
, napsali bychomjmena = ["marek", "petr", "david"] print(jmena[1]) # Vypíše "petr"
- Co se stane, když se zkusíme podívat na prvek v poli, který leží na neexistujícím indexu? Vyzkoušejte si to
- Do seznamu se přidává pomocí funkce
append(x)
- Volá se přímo na poli; máme-li tedy pole
p
, potom číslo 5 do něj můžeme přidat pomocíp.append(5)
- Funkce
append
přidává na konec seznamu - Jakou má funkce
append
časovou složitost?
- Volá se přímo na poli; máme-li tedy pole
- Seznam můžeme třídit pomocí funkce
sort
- Funkci
sort
voláme přímo na poli, mění staré pole - Alternativa je zavolat funkci
sorted
, které předáme argumentem pole, které chceme setřídit- Funkce sort vrátí nové setříděné pole
- Jak funguje třídění? Jak se porovnávají řetězce?
- Funkci
- Seznamem můžeme iterovat pomocí for-cyklu
jmena = ["matous", "marek", "lukas", "jan"] for jmeno in jmena: print(jmeno) # Vypíše: # matous # marek # lukas # jan
Čtení ze vstupu
- Dosud jsme od uživatele načítali jen jednotlivé datové typy
- Vždy buď jen číslo nebo text
- Co když chceme od uživatele "větší" vstup
- Třeba posloupnost čísel, jména všech lidí ve třídě, apod.
numbers = []
line = input()
while line != "":
for i in line.split():
numbers.append(int(i))
line = input()
print(numbers)
Další zajímavé funkce
sum(pole)
sečte pole čísel a vrátí výsledekmin(pole)
vrátí minimum z čísel v polimax(pole)
vrátí maximum z čísel v poli