Cvičení 1: Úvod do cvičení
instalace Python
náplň cvičení
odevzdávací systém
Odevzdávací systém
Pro přihlášení do odevzdávacího systému musíte znát vaše hlavní přístupové heslo.
Domácí úlohy jsou dvojího typu lehká/těžká, typ úlohy určuje jméno souboru, který odevzdáváte. Sledujte pokyny u zadání každé domácí úlohy
Dotazník
* Prosím věnujte pár minut vyplnění dotazníku
Organizace cvičení
Ti, kteří již programují a znají algoritmy, si je procvičí
Ti, kteří zatím jen programovali, se naučí nejdříve analyzovat problém a vybrat vhodný algoritmus.
Ti, kteří zatím neprogramovali, se naučí základy jazyka Python a algoritmickému přístupu k programování
Zápočet
Zápočet získáte, pokud ze cvičení získáte minimálně 12 bodů.
Ve cvičení bude 10 úloh. Můžete si vybrat buď lehčí úlohu za 1 bod, nebo těžší úlohu za 2 body. Lehké úlohy nepředpokládají žádné znalosti mimo přednášky a cvičení. Těžší úlohy se hodí pro ty z vás, kteří již programovat umí a jsou i náročnější a rozsáhlejší.
Každou úlohu je nutné odevzdat nejpozději do 3 týdnů od zadání (cvičící může udělit vyjímku - na základě lékařského potvrzení atp.)
Z každé úlohy musí student získat nenulový počet bodů, hodnocení úlohy provádí odevzdávací systém a je možné získat i desetinné hodnocení za částečně fungující úlohu.
Poslední úloha ve cvičeních bude větší semestrální práce za 5 bodů.
Každý může řešit libovolné úlohy - teoreticky můžete získat až 25 bodů z cvičení.
Pokud začnete řešit těžkou úlohu a její řešení se Vám nepodaří, lze i později odevzdat úlohu lehčí.
Zápočet je nutné získat před zkouškou
Počítačová laboratoř
Linuxové počítače se nesmí vypínat a je také zakázáno z nich odpojovat jakékoliv kabely, a to včetně síťového (ethernet) kabelu!
Pro připojení vlastního počítače využijte buď WiFi připojení nebo připravené kabely vyvedené na stoly v laboratoři.
Připojení na počítač:
Pro nastavení hesla v učebnách je možné se přihlásit pomocí username: problem s heslem: login.
Pro odhlášení je třeba stisknout CTRL+Q.
Pro práci na počítači si spusťte terminál (Applications $\rightarrow$ Terminal)
Změna hesla se provede příkazem passwd
spuštěným z terminálu . Změna se projeví okamžitě na všech stanicích.
Úkol 1 Spuštění Pythonu
Na počítačích v laboratoři je již instalován Python3.
Spuštění Python z terminálu, napište příkaz: python3
2 + 3
10 / 3
a = 10
a
Výrazy
* Operace:
+,-
sčítání, odčítání - nejmenší priorita
*,/, //, %
násobení, dělení, dělení se zaokrouhlením dolů - celočíselné dělení, zbytek po dělení - vyšší priorita než sčítání
+,-
unární operace, neboli +,-
před číslem - vyšší priorita než předchozí řádek
**
mocnění - nejvyšší priorita
* Operace se vyhodnocují v pořadí jejich priorit. V případě shodných priorit zleva doprava. Tedy:
2 + 3 * 4 - 1 = 2 + (3 * 4) - 1
2 - 3 + 1 = (2 - 3) + 1
3. / 2. * 10. = (3. / 2.) * 10.
3. * 2. ** 5 + 1 = (3. * (2. ** 5)) + 1
POZOR vyjímka 2 ** 2 ** 3 = 2 ** (2 ** 3)
Úkol 2 - Python jako kalkulačka
Python rozlišuje celá čísla a reálná čísla. Pokud je jeden operand ve výrazu reálné číslo, je celý výraz reálné číslo. Pokud je ve výrazu $/$, pak je výsledek vždy reálné číslo. Reálná čísla lze převést na celá zahozením desetinného rozvoje příkazem int(reálné číslo)
. Opačně celé číslo na reálné převedete příkazem float(celé číslo)
.
Zjistěte kolik je:
14 % 6
14 % -6
14 % 2.5
14 // 6
14 / 6
int(14 / 6)
14.0 // 6.0
14 // -6
int(14 / -6)
float(14 // -6)
2 ** 2 ** 2 ** 2
Přidejte závorky, aby platilo (řešení ověřte v Pythonu):
Proměnné
Proměnná slouží k uchování hodnoty výrazu
Název proměnné musí:
začínat písmenem, nebo znakem _
obsahuje pouze písmena, číslice, a znak _
nesmí být shodný s klíčovým slovem jazyka Python3 - False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield
Možné názvy proměnných a, a2016, a_ted_to_sem_ulozim, rozdil_dvou_cisel, as5
Špatné názvy proměnných 1a, as, 1_a, is
U proměnných závisí na velikosti písmen (python je case-sensitive). Proměnná cislo
je tedy jiná než proměnná Cislo
.
Přiřazení hodnoty proměnné se děje operátorem '='.
Výstup
Pokud Váš program něco spočítá, je důležité tuto hodnotu nějak zobrazit.
Standardní výstup programu je na obrazovku pomocí funkce print
:
print(1, 2, 3)
print("1 + 2 je", 1 + 2)
print("Hodnota promenne a je", a)
Program v jazyce Python
Program v Pythonu je zapsaný v textovém souboru.
Interpret Pythonu (např. program python3
) vykonává zadané příkazy postupně tak jsou uvedeny v souboru.
Program lze vytvořit v libovolném textovém editoru, který vytváří prostý text. Pozor: nelze použít např. textové editory typu Word, protože ukládají formátovaný dokument, který interpret Pythonu neumí zpracovat.
Pro jednodušší tvorbu programů slouží integrovaná prostředí:
IDLE - velmi jednoduché na ovládání, automatické doplňování textu, nápověda, ladění, součást prostředí Python. Spouští se příkazem
idle3
nebo ̈́
idle
(záleží na distribuci pythonu).
Pyzo - velmi jednoduché a příjemné ovládání
PyCharm - uživatelsky příjemnější, složitější na učení
Eclipse - PyDev, komplexní prostředí pro vývoj programů v jazycích Java, C/C++ i Python, složitější pro začátečníky.
Vstup
Váš program často potřebuje zadat nějakou vstupní hodnotu.
Standardní vstup programu je z terminálu funkce input
:
a = int(input())
b = float(input(“Zadejte realne cislo:”))
c = input(“Zadej cokoliv”)
První dva příklady přetypují zadaný vstup na číslo celé, nebo reálné. To není vždy možné, třeba pokud zadáte chybně číslo 1a2
. Jak tuto situaci ošetřit se dozvíte později.
Zatím předpokládejte korektně zadané vstupy.
Další možností je předat data jako argumenty příkazové řádky:
import sys # načtení modulu pro použití funkcí a proměnných modulu sys
a = int(sys.argv[1])
print("Zadana hodnota:")
print(a)
Úkol 3 - První program v Pythonu
Úkol 4 - Výpočty v Pythonu
Vytvořte program pocitani.py, který načte dvě čísla z příkazové řádky a vytiskne jejich součet, rozdíl, součin, podíl
Pro načtení čísel použijte konstrukci
import sys
a = float(sys.argv[1])
b = float(sys.argv[2])
print(a+b)
print(a-b)
print(a*b)
print(a/b)
Zadejte vstupy (10, 20), (100.0, 120.0) a (55.5, 0). Jaké jsou výstupy?
Cykly
Základní druhy cyklů
For cyklus
for cyklus standardně prochází zadaný seznam hodnot
for cyklus je založen na proměnné, která prochází seznam hodnot a pro každou hodnotu ze seznamu provede blok instrukcí
for proměnná in seznam:
blok instrukcí
for k in range(1, 20, 1):
print(k)
for i in "abcd":
print(i)
for i in (1, 10, 2, 8):
print(i)
Pro standardní procházení nějakého rozmezí je kontrukce range(start, cíl, krok), případně jednodušší verze range(cíl), kdy start je automaticky 0 a krok je nastaven na 1, nebo range(start, cíl), kdy krok je roven 1.
Lze vytvořit i for cyklus, který má dynamicky měnící se seznam hodnot, případně vrací nekonečně krát stejné/rozdílné hodnoty. V tomto případě se pak jedná spíše o while cyklus a vám doporučujeme vzhledem k přehlednosti implementovat takový program jako while cyklus.
Úkol 5 - Součet třetích mocnin, test odevzdávacího systému
Přejmenujte program na cubic_sum.py a upravte jej tak, aby počítal součet třetích mocnin $$\sum^{n}_{k=0}k^3$$
Dále upravte program tak, aby zkontroloval, zda se součet třetích mocnin rovná $$\sum^{n}_{k=0}k^3 = \left(\frac{n(n+1)}{2}\right)^2$$
Program vytiskne na jednu řádku součet třetích mocnin, na další řádku vytiskne výsledek podle vzorečku
Vytištěné výsledky musí být celá čísla.
PříkladyVstup:
4
Výstup:
100
100
Vstup:
12
Výstup:
6084
6084
Vstup:
5
Výstup:
225
225
Větvení programu
Pokud potřebujeme vykonat část programu jen při splnění určitých podmínek, použijeme příkaz if.
Jeho nejdednodušší tvar je:
if podmínka:
kód
V tomto případě se nejdříve vyhodnotí podmínka a je-li splněna, je vykonán příslušný kód. Pokud podmínka splněna není, kód se nevykoná.
Příklad: vytiskni “sudé číslo” pokud proměnná $a$ obsahuje sudé číslo.
if (a % 2) == 0:
print("sude cislo")
Obecnější tvar větvení je
if podmínka1:
kód1
elif podmínka2:
kód1
else:
kód2
V tomto případě lze použít vícero bloků elif.
Příklad: pokud je v proměnné $a$ záporné číslo, vytiskni “zaporne”, jinak vypis jestli je číslo v proměnné $a$ liché nebo sudé.
a = 4
if a < 0:
print("zaporne")
elif (a % 2) == 0:
print("sude")
else:
print("liche")
Úloha 6
Domácí práce
Domácí úkol
Lehká varianta
Předpokládejte, že všechny vstupy jsou zadány korektně a vstup obsahuje tři řádky, každá řádka obsahuje pouze jedno celé číslo.
Výsledek musí být celé číslo.
PříkladyVstup:
5
3
2
Výstup:
50
tj. $3^2 + 4^2 + 5^2 = 50$
Vstup:
1
18
2
Výstup:
2109
Vstup:
8
8
2
Výstup:
64
Těžká varianta
Vstup:
jedna řádka ze standarního vstupu
řádka obsahuje posloupnost celých čísel $x_1, ... ,x_n$ oddělených mezerou
pro načtení a převedení vstupu na pole celých čísel můžete použít příkaz
nums = list(map(int, input().split()))
Program najde nejdelší rostoucí posloupnost $x_i < x_{i+1} < ... < x_{i+j}$, která se skládá pouze z sudých záporných čísel.
Výstup: dvě řádky na standardní výstup
Pokud je v posloupnosti více stejně dlouhých rostoucích posloupností, pak program hledá tu s největším součtem.
Pokud taková posloupnost neexistuje, pak je výstupem 0 a na dalším řádku také 0.
Program pod názvem seq_sum.py
nahrajte do odevzdávacího systému (úloha HW01).
Příklady
Hledá se nejdelší
nepřerušená posloupnost. V následující ukázce je nejdelší taková
-100 -8 -6 -4
se součtem -118.
Vstup:
6 4 -100 -8 -6 -4 -8 15
Výstup:
4
-118
Dvě stejně dlouhé sekvence, rozhoduje součet
Vstup:
3 -10 -8 -2 1 -6 -4 -2 2
Výstup:
3
-12
Žádná sekvence
Vstup:
1 3 -5 -7 0 2
Výstup:
0
0