Search
V úvodu se seznámíme s operačním systémem Ubuntu, který je jednou z nejrozšířenějších verzí Linuxu (en) a v průběhu dopoledne se seznámíme s programovacím jazykem Python (en) Pro přístup k internetu použijte internetový prohlížeč Mozilla Firefox (ikona s liškou v levé postranní liště) a otevřete si stránky Bootcampu:
https://cw.fel.cvut.cz/wiki/courses/pri-bootcamp/start
Terminál (též příkazová řádka) je základní způsob, jakým ovládat počítač, bez ohledu na to, jestli má grafické rozhraní pro práci se soubory (“okna”). Využitím terminálu získává uživatel více možností ovládání počítače a jeho výpočetních prostředků. Zprvu se vám může zdát terminál nepřehledný, nicméně časem si jej osvojíte a poznáte jeho prakticky neomezené možnosti.
Terminál otevřete pomocí klávesové zkratky: ctrl+alt+t. Nyní můžete počítači zadávat přímo jednotlivé příkazy, spouštět programy, vytvářet a mazat složky a soubory apod. Každý příkaz je třeba potvrdit stisknutím klávesy enter.
Do terminálu můžete zkusit zadat příkaz pro otevření webového prohlížeče Mozzila Firefox: firefox
firefox
Nejprve si ukážeme podobnosti mezi rozšířeným grafickým správcem soborů (na Windows File Explorer na Ubuntu Nautilus). K terminálu si otevřete i Nautilus (ikonka složky). Přetažením oken na příslušnou stranu monitoru je možné okno rozšířit na polovinu obrazovky.
Jak terminál, tak nautilus, se otevřely v domovském adresáři právě přihlášeného uživatele (tedy vás). K ověření můžeme použít příkaz pwd (print working directory), který do terminálu vytiskne cestu aktuálnímu adresáři. Adresář, ve kterém se právě v příkazové řádce nacházíte, se nazýva pracovní adresář.
pwd
p
w
d
K zobrazení obsahu aktuálního pracovního adresáře v terminálu slouží příkaz ls (list). Podporuje-li to terminál, tak jsou barevně odlišeny adresáře (modrá), soubory (bílá), obrázky (fialová), atd.
ls
l
s
K procházení mezi jednotlivými adresáři je možné pomocí příkazu cd (change directory) a jméno adresáře, do kterého chcete vstoupit, například cd Documents. Pro návrat do nadřezeného adresáře je možné použít cd ... Pozor, jméno adresáře musí být napsáno přesně a musí být dodržena velikost písmen, tedy neprojde cd documents, ale cd Documents už ano.
cd
c
cd Documents
cd ..
cd documents
K vytvoření nového adresáře slouží příkaz mkdir (make directory) následovaný jménem adresáře, například mkdir Bootcamp.
mkdir
m
k
dir
mkdir Bootcamp
K vytvoření nového souboru je možné použít příkaz touch a jméno soboru, například touch notes.txt.
touch
touch notes.txt
Vytvořte nyní pomocí terminálu ve svém domovském adresáři složku BootCamp, v ní složku Day1 (nebo Den1 nebo obdobně) a v ní soubor notes.txt (nebo poznamky.txt, nebo obdobně).
mv main.py /cesta/do/noveho/adresare
main.py
/cesta/do/noveho/adresare
mv script1.py script2.py
script1.py
soubor2.py
rm main.py
rmdir adresar1
adresar1
man ls
ls -la
Podrobný návod s obrázky naleznete zde.
V případě zájmu o další užitečné a často používané přikazy terminálu doporučuji video Beginner's Guide to the Bash Terminal
python3
python3 main.py
Python v tomto módu může sloužit třeba jako kalkulačka. Zkuste mu zadat pár matematických operací.
8/2 5*125 6*2-2*4
.
Je vidět, že Python respektuje přednost násobení před sčítáním a odčítáním. Můžete zadat i složitější výrazy uzávorkováním podvýrazů:
2*(3+6) (2+4)*(3+6) 4*(-2)
Python obsahuje dva typy dělení, mezi kterými je zásadní rozdíl.
3/2 3//2
První z nich je klasické dělení, druhé pak celočíselné dělení.
S celočíselným dělením souvisí zbytek po dělení (operátor modulo)
7%4
Také se hodí znát operátor mocnění, který překvapivě není zapisován ^, ale **.
^
**
2**8
Tenhle výpis výsledků jako číselných hodnot se provádí automaticky. Jinak lze výpis textu i číselných hodnot provádět příkazem print. Takový text musí být v uvozovkách, aby počítač věděl, že se jedná o text a ne o další příkaz. U čísel se uvozovky takhle nepoužívají.
print
print("Hello world") print(100)
Mezi následujícími příkazy je ovšem zásadní rozdíl:
print("3*6") print(3*6)
V prvním případě se vypíše text 3*6, protože uvozovky Pythonu říkají, že znaky v závorce představují text. V druhém případe se vypíše výsledek násobení, tedy 18.
3*6
18
Python totiž rozlišuje data, se kterými pracuje (tzv. datové typy). V prvním případě se jedná o textový řetězec, v případě druhém o číslo.
Výpis dvou textových řetezců lze spojit pomocí operátoru +:
+
print("Nastupuju na FEL v roce: " + "2023")
Otevřete textový editor, například příkazem gedit a napište následující jednoduchý program:
gedit
print("Hello Bootcamp!")
Uložte program jako textový soubor do složky Bootcamp a pojmenujte ho myFirstPythonScript.py.
Bootcamp
myFirstPythonScript.py
V terminálovém okně spustíme tento program příkazem python3, kterému předáme jako parametr název souboru:
python3 myFirstPythonScript.py
Tento příkaz spustí námi napsaný program a na terminálu vypíše:
Hello Bootcamp!
Základní stavební jednotkou každého programovacího jazyka jsou proměnné - bloky paměti počítače, kam je možné uložit rozličná data, která mohou být jak čísla, tak třeba text, nebo když na to přijde, tak třeba obrázek. Jsou-li data čísla, je možné si je představit jako proměnné, co znáte z matematiky je možné nad nimi provádět matematické operace.
Chceme-li zadefinovat jednoduchou proměnnou (x) konkrétní hodnoty (10) napíšeme:
x
10
x = 10
Počítač si uloží hodnotu 10 do paměti a označí ji x. S touto proměnou nyní můžeme pracovat jako s číselnou hodnotou.
Zkuste následující:
x = 10 print(x) print(x+5) print((x+5)*(x-5))
Do proměnné je možné uložit také desetinné číslo nebo textový řetězec.
Pi = 3.14 jmeno = "Jan" prijmeni = "Novak" print(Pi) print(jmeno) print(jmeno+prijmeni) print(jmeno+" "+prijmeni)
Hodnotu proměnných je možné měnit v průběhu programu (pokud by to nešlo, byly by naše možnosti velmi omezené). Vyzkoušejte:
x = 10 print(x) x = 20 print(x) x = x+1 print(x)
První příkaz print vypíše číslo 10, následně jsme změnili hodnotu v proměnné x na 20, a tedy druhý příkaz print vypíše číslo 20. V posledním případě jsme hodnotu v proměnné x zvýšili o jedna.
Při přiřazování nové hodnoty do proměnné je možné provádět i následující “psí kusy”:
x = 10 x = (x+1)*(x-1) print(x)
Do proměnné x jsme nejprve uložili číslo 10. Druhý řádek vypočte výsledek výrazu (x+1)*(x-1), přičemž x ve výrazu má v tuto chvíli stále hodnotu z předchozího řádku (tedy 10), ta se dosadí do výrazu a výsledek tak bude (10+1)*(10-1) = 99. Výsledek se uloží do proměnné x, kterou vypíše příkaz print na třetím řádku.
(x+1)*(x-1)
Při vytváření proměnné byste měli dodržovat následující pravidla ohledně jejich pojmenování:
a-z
A-Z
0-9
_
Vytvoříme-li následující proměnné:
promenna = 10 Promenna = 11
bude Python považovat označení promenna a Promenna za různé proměnné. Zkuste si to.
promenna
Promenna
print(promenna) print(Promenna)
Byť se na první pohled zdají všechny proměnné stejné, má každá z nich typ určený daty, která v nich jsou uložené. Datové typy, se kterými jsme se zatím seznámili jsou:
Název datového typu proměnné x můžeme získat pomocí příkazu type(x) a vypsat ho pomocí print(type(x)).
type(x)
print(type(x))
x = 10 datovy_typ = type(x) print(datovy_typ) x = 3.5 datovy_typ = type(x) print(datovy_typ) x = "abc" datovy_typ = type(x) print(datovy_typ)
Datový typ proměnné se může v průběhu programu měnit podle potřeby. Změnu datového typu vynutíme explicitním přetypováním za použití klíčových slov str, int nebo float:
str
int
float
x = 10 xstr = str(x) print(xstr) xflt = float(x) print(xflt)
year = 2023 print("current year is " + str(year))
Alternativně můžete oddělit jednotlivé argumenty čárkou, kdy print doplní mezery mezi jednotlivé části výpisu.
year = 2023 print("current year is", year)
Občas nemáme některá data přímo, takže nám je musí zadat uživatel. K tomu slouží klíčové slovo input. Takto získaná data ukládáme do proměnné.
input
a = input()
Input umožňuje i vytisknout uživateli do terminálu popis, jaká data po něm chceme.
name = input("Zadejte svoje jméno: ")
Pokud potřebujeme třeba celočíselný uživatelský vstup, opět použijeme přetypování (v tomto případě int), se kterým jsme se seznámili před chvilkou:
N = int(input("Zadej nějaké celé číslo: ")) print(10*N)
Pokud potřebujeme načítat desetinné číslo, použijeme obdobně float:
x = float(input("Zadej nějaké desetinné číslo: ")) print(10*x)
x = x + 1
x += 1
Napište program, který načte jméno jako string a vypíše: Letošního programovacího bootcampu se účastní <jméno>.
Letošního programovacího bootcampu se účastní <jméno>
Řešení
Napište program, který načte jedno číslo (stranu čtverce) a následně vypíše obvod a obsah čtverce.
Napište program, který načte dvě čísla (strany obdélníku) a následně vypíše obvod a obsah obdélníku.
Napište program, který načte jedno číslo (poloměr kruhu) a následně vypíše obvod a obsah daného kruhu.
pi = 3.14
Napište program, který načte jedno číslo (poloměr koule) a následně vypíše povrch a objem dané koule.
Napište program, který načte od uživatele dvě čísla a uloží je do proměnných a a b. Poté vypíše jejich součet, rozdíl a součin.
a
b
Napište program, který načte dvě čísla do proměnných a a b. Program následně prohodí hodnoty v těchto proměnných a vypíše nejprve obsah proměnné a a poté obsah proměnné b.
Komentáře slouží k zaznamenání přídavných informací, které nemusí být na první pohled z kódu zřejmé, čímž usnadňují orientaci v kódu. Komentáře jsou při spuštění programu ignorovány a slouží pouze pro čtenáře (programátora) vašeho kódu.
V pythonu je možné zakomentovat zbytek řádku pomcí symbolu kříže (hashe) #, tedy je možné psát:
#
# jak komentar na cely radek... x = 10 print(x) # ... tak komentar na zbytek radku
Průběh všech programů, které jsme prozatím napasali, byl jednoznačně určen od začátku spuštění. Nicméně často se nám hodí vykonávat příkazy na základě aktuálního stavu programu (tedy například na základě hodnot proměnných), k tomu nám slouží právě podmínky, které kontrolují, jestli se program nachází ve stavu, ve kterém chceme příkazy provést.
V pythonu je možné kontrolovat podmínky pomocí příkazu if následovaný podmínkou a zakončený dvojtečkou :.
if
:
Vyzkoušejte následující program:
a = int(input("Zadejte cele cislo: ")) x = 0 if a > 5: print("Podminka je splnena.") print("Zadane cislo je vetsi nez 5.") x = 1 print("Konec programu, x je:") print(x)
Pokud je číslo větší než 5, provedou se postupně všechny odsazené příkazy (v našem případě dva výpisy a přiřazení x = 1) a posléze i následující neodsazené příkazy. Pokud podmínka splněná není, odsazené příkazy se přeskočí a pokračuje se prvním neodsazeným příkazem.
x = 1
Pokud chcete vykonat nějakou část kódu, i pouze pokud podmínka splněna není, můžete přidat větev else:
else
a = int(input("Zadejte cislo: ")) x = 0 if a > 5: print("Podminka je splnena.") print("Zadane cislo je vetsi nez 5.") x = 1 else: print("Podminka neni splnena.") print("Zadane cislo neni vetsi nez 5.") x = -1 print("Konec programu, x je:") print(x)
Pokud chceme vykoušet postupně vícero různých podmínek je možné mezi if a else přidat libovolné množství podmínek elif:
elif
a = int(input("Zadejte cislo: ")) x = 0 if a > 5: print("Prvni podminka je splnena.") print("Zadane cislo je vetsi nez 5.") x = 1 elif a < 5: print("Druha podminka je splnena.") print("Zadane cislo je mensi nez 5.") x = -1 else: print("Zadna podminka neni splnena.") print("Zadane cislo je 5.") x = 0 print("Konec programu, x je:") print(x)
Někdy mohou být podmínky, za jakých chceme vykonávat jednotlivé příkazy relativně složité a složené z více částí. K jejich skládání můžeme použít logické operátorů and a or. Ty odpovídají logickým spojkám $\land$ (konjunkce, “a zároveň”) a $\lor$ (disjunkce, “nebo”).
and
or
if (a > 5) and (a < 10): print("Cislo je vetsi nez 5 a mensi nez 10.") print("Cislo lezi v intervalu (5,10).")
Při vyhodnocování podmínek můžete porovnávat jak čísla, tak i textové řetězce a to pomocí následujících operátorů.
a == b
a != b
a >= b
a <= b
a > b
a < b
Výsledkem logických výrazů je datový typ bool:
bool
x = 10 vysledek = x > 0 datovy_typ = type(vysledek) print("vysledek: " + str(vysledek) + ", datovy typ: " + str(datovy_typ))
Všimněte si, že vysledek je True (logická pravda). Protikladem k True je logická nepravda False.
True
False
Napište program který načte dvě přirozená čísla, základ a exponent, a vypočítá hodnotu základexponent. Nezapomeňte, že hodnota 00 není definovaná.
Např.:
Zadejte zaklad: 5 Zadejte exponent: 3 5^3 = 125
print("2^3 = " + str(2**3))
Napište program, který načte dvě čísla a vypíše větší z nich. Pokud jsou zadána dvě stejná čísla, program napíše Zadana cisla jsou stejna.
Zadana cisla jsou stejna.
Napište program, který načte číslo a rozhodne, jestli číslo leží v uzavřeném intervalu $<10; 20>$. Pokud ano, program vypíše Cislo je prvkem intervalu., pokud ne, vypíše Cislo neni prvkem intervalu.
Cislo je prvkem intervalu.
Cislo neni prvkem intervalu
Načtěte jedno celé číslo ze vstupu a vypište zda-li je sudé nebo liché.
%
19%7 == 5
Napište program, který načte postupně 3 čísla – délku, šířku a výšku kvádru – a spočítá objem tohoto kvádru.
Načtěte od uživatele délky stran trojúhelníku (3 čísla) a vypočítejte jeho obsah. Použijte Heronův vzorec wiki (cz), podle kterého vypočítáme obsah trojúhelníku jako $S=\sqrt{s(s-a)(s-b)(s-c)}$, kde $s=\frac{a+b+c}{2}$.
print("Druha odmocnina z x je: ", x**(1/2))
Načtěte průměr a výšku sudu (předpokládejte, že rozměry sudu jsou uvedeny v metrech) a spočítejte objem sudu v litrech. Dále načtěte množství vody (v litrech) a rozhodněte, zda se voda do sudu vejde.
Rozšíření: Pokud se voda do sudu vejde, spočtěte do jaké výšky vystoupá její hladina.
Napište program, který načte od uživatele 3 čísla reprezentující délky stran trojúhelníka. Program zkontroluje, jestli takový troúhelník lze sestrojit a pokud ano, zjistí a vypíše, jestli je takový trojúhelník ostroúhlý, pravoúhlý nebo tupoúhlý.
Napište program, který umí vyřešit kvadratickou rovnici zadanou ve tvaru $a x^2 + b x + c = 0$. Program od uživatele načte hodnoty koeficientů $a$, $b$, $c$, rozhodne, jestli má taková rovnice v oboru reálných čísel nějaké kořeny, a pokud ano, tak je spočítá a vypíše.
Napište program, který načte souřadnice dvou bodů v rovině. Program následně vypíše, jakou hodnotu má směrnice přímky, kterou tyto body určují (směrnice přímky je tangens úhlu, který svírá zadaná přímka s osou x). Vhodně ošetřete případ, kdy by byla zadaná přímka k ose x kolmá (v tom případě totiž není směrnice definována).
Napište program, který načte souřadnice tří bodů v rovině. Zjistěte, jestli leží na jedné přímce.