Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Den 1

Úvod, grafické programování

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 vyzkoušíme si základní příkazy v tzv. grafickém programování. 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

Pro seznámení s programováním nám pomůže Robot Karel, díky kterému se seznámíme se základními příkazy všech programovacích jazyků:

Cílem tohoto prvního seznámení s programováním je pochopení základní podstaty programování: Program je jakýsi recept, který počítači řekne, co má udělat. Konkrétně se jedná o posloupnost příkazů, které počítač postupně, jeden za druhým, vykoná.

Ovládání počítače z terminálu

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í (“okna”). Využitím terminálu získává uživatel více možností, jak využít možnosti 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 každý pokročilý uživatel i programátor (kterým se chcete stát 8-)) osvojí a pozná 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:

firefox

Ten po odenterování spustí webový prohlížeč Mozilla Firefox.

Podobně jako grafický průzkumník složek pracuje i terminál v tzv. aktuálním adresáři. V tomto kurzu si vystačíme s následujícími příkazy pro práci s aktuálním adresářem:

  • pwd - (print working directory) - tento příkaz vypíše aktuální adresář, ve kterém terminál pracuje. Tento adresář se někdy nazývá pracovní adresář a umožňuje přístup k dalším adresářům a souborům relativně vůči tomuto adresáři.
  • ls - (list directory contents) - příkaz vypíše obsah aktuálního adresáře (podadresáře a soubory v daném adresáři). Tento příkaz nabízí několik parametrů, které kontrolují styl výpisu. Například argument -l (long) způsobí podrobné vypsání informací o souborech. Jeho použití je ls -l.
  • cd - (change directory) - příkaz změní aktuální adresář. Požadováný adresář je uveden za příkazem jako jeho parametr. Pokud jako parametr uvedete dvě tečky “..”, posunete aktuální adresář o úroveň výš v adresářové struktuře. Pokud nezadáte žádný parametr, přesunete se do domovského adresáře uživatele.
  • mkdir - (make directory) - příkaz vytvoří v aktuálním adresáři nový adresář, jehož název je příkazu předán jako parametr.
  • touch - (create file) - příkaz vytvoří v aktuálním adresáři nový soubor, jehož název je příkazu předán jako první parametr

Vytvořte nyní ve svém domovském adresáři (tj. v tom adresáři, ve kterém se nacházíte po otevření terminálu) složku BootCamp:

mkdir BootCamp

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

Podrobnější návod s obrázky naleznete zde.

Spuštění Pythonu v režimu "interactive shell"

Do terminálu napište příkaz

 python3

Spustí se Python v režimu “Interactive shell”, ve kterém je možné Python použít jako velmi pokročilou kalkulačku.

Jednoduchý výpis

Výpis je základní způsob, jakým je uživatel nebo programátor informován o stavu programu. Vypisovat je možné jak daný text, tak aktuální hodnoty proměnných.

Text, který chceme vypsat příkazem print, musí být v uvozovkách, aby počítač věděl, že se jedná o text a ne o další příkaz. Pokud chceme vypsat pouze číslo, nemusíme uvádět uvozovky:

print("Hello world")
print(100)

Místo čísla můžeme také uvést složitější matematický výraz a Python ho sám spočítá. Python tak můžeme používat jako kalkulačku. Zkuste následující příkazy:

print(3+6)
print(3*6)
print(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ů:

print(2*(3+6))
print((2+4)*(3+6))
print(4*(-2))

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.

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.

Python obsahuje dva typy dělení, mezi kterými je zásadní rozdíl.

print(3/2)
print(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)

print(7 % 4)

Můžeme také “sčítat” textové řetězce. V následujícím příkladu se nejprve spojí řetězce “abc” a “def” a následně se vypíše “abcdef”:

print("abc"+"def")

Ale už nemůžeme (pochopitelně) sčítat textové řetězce s čísly. Proto následující příkaz způsobí chybu.

print("abc"+123)

Nastavení textového editoru Gedit

  1. Otevřete terminálové okno (ctrl+alt+t) a příkazem “gedit” spusťte textový editor.
  2. Pokud najedete kurzorem myši na horní lištu obrazovky, zobrazí se nabídka menu.
  3. Klikněte na “Edit” a vyberte “Preferences”.
  4. V záložce “Editor” nastavte hodnotu “Tab width” na 4. Dále zaškrtněte možnost “Insert spaces instead of tabs” a “Enable automatic indentation”.

Spuštění programu z terminálu

V textovém editoru napište následující jednoduchý program.

print("Hello World!")

Uložte program jako textový soubor do složky Bootcamp a pojmenujte ho “myFirstPythonScript.py”.

V terminálovém okně spustíme tento program příkazem Python3, kterému předáme jako parametr název souboru (ten musí být v aktuálním adresáři):

python3 myFirstPythonScript.py

Tento příkaz spustí námi napsaný program a na terminálu vypíše:

Hello World!

Pomocí šipek je možné procházet historii příkazů (šipka nahoru pro předchozí příkaz, šipka dolu pro následující příkaz v historii).
Pro automatické doplnění jména souboru nebo složky použijte tabulátor.

Proměnné

Podobně jako v matematice můžeme i zde používat proměnné. Proměnná slouží k označení konkrétní hodnoty, se kterou chceme provádět různé operace. Zkuste příkaz:

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í příkazy:

print(x)
print(x+5)
print((x+5)*(x-5))

Při vytváření proměnné byste měli dodržovat následující pravidla ohledně jejich pojmenování:

  • Jméno proměnné může obsahovat pouze písmena anglické abecedy a-z, A-Z, čísla 0-9, a podtržítko “_”.
  • Jméno proměnné nemůže začínat číslem.
  • Python rozlišuje mezi velkými a malými písmeny.

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.

print(promenna)
print(Promenna)

Do proměnné můžete 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)

Velmi užitečná je také možnost měnit hodnotu v proměnné:

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é si můžeme dovolit i následující “psí kusy”:

x = 10
x = (x+1)*(x-1)
print(x)

Uhodnete, co vypíše příkaz print?

Do proměnné “x” jsme nejprve uložili číslo 10. Druhý řádek uloží do proměnné výsledek výrazu “(x+1)*(x-1)”, přičemž “x” má v tuto chvíli hodnotu 10. Ta se dosadí do výrazu a výskedek tak bude (10+1)*(10-1) = 99. To je hodnota, která se uloží do “x” a kterou vypíše příkaz print.

Shrnutí

Poznali jsme tři základní datové typy, se kterými můžeme v Pythonu pracovat. Jsou to:

  • Celá čísla (typ integer, např.: -2, -1, 0, 1, 2, …)
  • Desetinná čísla (typ float, např.: 1.5, 0.35, -0.5, 1.0, …)
  • Textové řetězce (typ string, např.: “Jan Novak”, “abc”, “abc123”, …)

Název datového typu konkrétní hodnoty můžeme získat příkazem type.

datovy_typ = type(3)
datovy_typ = type(3.5)
datovy_typ = type(3.0)
datovy_typ = type(7/3)
datovy_typ = type(7/3.0)
datovy_typ = type(3*3.1)
datovy_typ = type("abc")
datovy_typ = type("123")

Stejně tak můžeme zjistit, jaký datový typ je uložený v zadané proměnné.

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)

Přetypování

V Pythonu existují funkce, které z hodnoty jednoho datového typu udělají hodnotu jiného datového typu.

  • str(hodnota) - Převede zadanou hodnotu na textový řetězec
  • int(hodnota) - Převede zadanou hodnotu na celé číslo. Pokud je zadaná hodnota desetinné číslo, jeho desetinná část se zahodí. Pokud je zadaná hodnota textový řetězec, pak tento řetězec musí reprezentovat celé číslo.
  • float(hodnota) - Převede zadanou hodnotu na desetinné číslo.

x = 5.7
print("V promenne x je ulozena hodnota: " + str(x))
 
y = int(5.7)
print("V promenne y je ulozena hodnota: " + str(y))
 
a = 3
b = 2
c = a/float(b)
print("V promenne c je ulozena hodnota: " + str(c))
 
cislo = "5"
x = int(cislo)
print("V promenne x je ulozena hodnota: " + str(x))
 
print("5 * 8 = " + str(5*8))

Načtení textového řetězce

Aby měly programy nějaké uplatnění, je důležité, aby komunikovaly s uživatelem u počítače. Již jsme poznali příkaz print, pomocí kterého může program něco vypsat na obrazovku. Další užitečný příkaz je funkce input, která načte od uživatele vstup jako textový řetězec.

jmeno = input("Zadejte Vase jmeno: ")
print(jmeno + " je nejlepsi programator!")

Načtení číselné hodnoty od uživatele

Pokud chceme od uživatele získat číselný vstup je potřeba načtený řetězec přetypovat. K přetypování je možná v Pythonu použít funkce int() pro celá čísla, float() pro desetinná čísla apod.

x = int(input("Zadejte cele cislo: "))
print(x*x)

Funkce input vypíše “Zadejte cele cislo:” a čeká, dokud uživatel nezadá číslo. To musí uživatel zadat na konzoli a potvrdit stiskem klávesy enter. Tato hodnota je následně uložena do proměnné “x”.

Funkcí input můžeme od uživatele načítat také desetinná čísla (typ float). Opět zde upozorňujeme, že Python používá desetinnou tečku (ne čárku).

x = float(input("Zadejte desetinne cislo: "))
print(x*x)

Úkoly na dopoledne

Úkol 1

Napište program, který načte jedno číslo (stranu čtverce) a následně vypíše obvod a obsah čtverce.

Řešení


Úkol 2

Napište program, který načte dvě čísla (strany obdélníku) a následně vypíše obvod a obsah obdélníku.

Řešení


Úkol 3

Napište program, který načte jedno číslo (poloměr kruhu) a následně vypíše obvod a obsah daného kruhu.

Počítejte s hodnotou pi = 3.14.

Řešení


Úkol 4

Napište program, který načte jedno číslo (poloměr koule) a následně vypíše povrch a objem dané koule.

Řešení


Úkol 5

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.

Řešení


Úkol 6

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”.

Budete potřebovat ještě jednu pomocnou proměnnou (např. “c”).

Řešení


Komentáře v Pythonu

Pokud do vašeho programu vložíte symbol “#”, vytvoříte tzv. komentář. Komentáře jsou při spuštění programu ignorovány a jsou určeny pro vás, abyste se ve svém kódu vyznali. Za komentář se považuje celý zbytek řádku za symbolem “#”.

# Toto je komentar
print("Komentare jsou ignorovany.")

Podmínky, příkaz if a if-else

Pokud chcete, aby se vybrané příkazy provedli jen za určitých okolností, tj. pouze při splnění nějaké podmínky, použijeme příkaz “if”. Vyzkoušejte následující program.

a = int(input("Zadejte cislo: "))
if a > 5:
    print("Podminka je splnena.")
    print("Zadane cislo je vetsi nez 5.")
print("Konec programu.")

Pokud je číslo větší než 5, provedou se postupně všechny odsazené příkazy 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.

Pokud chcete vykonat nějakou část kódu, pouze pokud podmínka splněna není, můžete přidat větev “else”.

a = int(input("Zadejte cislo: "))
if a > 5:
    print("Podminka je splnena.")
    print("Zadane cislo je vetsi nez 5.")
else:
    print("Podminka neni splnena.")
    print("Zadane cislo neni vetsi nez 5.")
print("Konec programu.")

Podmínky můžeme skládat použitím operátorů “and” a “or”. Ty odpovídají logickým spojkám “a zároveň” (konjunkce) a “nebo” (disjunkce.)

if (a > 5) and (a < 10):
    print("Cislo je vetsi nez 5 a mensi nez 10.")

Při vyhodnocování podmínek můžete porovnávat čísla i textové řetězce a to pomocí následujících operátorů.

  • == - rovná se
  • != - nerovná se
  • >= - je větší nebo rovno
  • < = - je menší nebo rovno
  • > - je větší
  • < - je menší

Úkoly na odpoledne

Úkol 1

Napište program, který načte postupně 3 čísla – délku, šířku a výšku kvádru – a spočítá objem tohoto kvádru.

Řešení


Úkol 2

Načtěte od uživatele souřadnice dvou bodů v rovině (dohromady tedy 4 čísla) a vypočítejte jejich vzdálenost.

Budete potřebovat funkci pro výpočet druhé odmocniny. Takovou funkci naleznete v modulu math, který musíte do programu naimportovat – nejlépe tak, že na začátku programu uvedete:

import math

Samotná funkce se pak jmenuje sqrt (podle anglického “square root”) a můžete ji používat následujícím způsobem:

odmocnina = math.sqrt(cislo)

Také můžete využít operátor **, kterým lze v Pythonu vyjádřit mocninu:

print("2^3 =", 2**3)

Řešení


Úkol 3

Načtěte od uživatele délky stran trojúhelníku (3 čísla) a vypočítejte jeho obsah. Použijte Heronův vzorec, podle kterého vypočítáme obsah trojúhelníku jako

kde

Řešení


Úkol 4

Načtěte jedno celé číslo ze vstupu a vypište zda-li je sudé nebo liché.

Použijte operátor % (modulo (en)), který vypočte zbytek po dělení. (Např.: 19%7 == 5)

Řešení


Úkol 5

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.

Řešení


Úkol 6

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”.

Řešení


Úkol 7

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.”

Řešení


Volitelné úkoly

Úkol 1

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ý.

Řešení


Úkol 2

Napište program, který umí vyřešit kvadratickou rovnici zadanou ve tvaru a * x2 + 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.

Řešení


Úkol 3

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).

Řešení


Úkol 4

Napište program, který načte souřadnice tří bodů v rovině. Zjistěte, jestli leží na jedné přímce.

Řešení


Úkol 5

Vytvořte jednoduchou kalkulačku. Program načte od uživatele nejprve první číslo, náslědně znaménko operace (“+”, “-”, “*”, “/”) a nakonec druhé číslo. Program provede se zadanými čísly zadanou operaci.

Např.:

Zadejte první číslo: 5
Zadejte operaci: *
Zadejte druhé číslo: 4
5*4 = 20

V programu ošetřete dělení nulou. Můžete také implementovat mocnění přirozeným číslem.

Řešení

Volitelné rozsáhlejší úlohy

Úkol 1 - matematická knihovnička

Spojte úlohy z dnešního dopoledne a odpoledne, které souvisí s matematikou do jedné knihovny. Knihovnu pojmenujte “myMathLib.py” (nebo podobně). K vytvoření knihovny je potřeba vědět, co jsou funkce (viz tutoriál den 4 funkce). Dále implementujte (naprogramujte) další obdobné funkce (například povrch a objem kužele, válce atd.). Kreativitě se meze nekladou :)

Řešení

2017 Vojta (Bez dokumentace)

Příklad použití

# Honza
 
# Importujeme vsechny funkce z knihovny 
import mathlib_vojta
 
# Spocti povrch a objem valce pomoci importovane knihovny
print("Tento program vam ochotne spocita povrch a objem jakehokoliv valce. Napriklad vaseho sudu od piva.")
 
polomer_valce = float(input("Zadejte polomer sudu (v metrech): "))
vyska_valce = float(input("Zadejte vysku sudu (v metrech): "))
 
povrch_valce = mathlib_vojta.povrchV(polomer_valce, vyska_valce)
objem_valce = mathlib_vojta.objemV(polomer_valce, vyska_valce)
 
print("Povrch valce je " + str(povrch_valce) + " m^2")
print("Objem valce je " + str(objem_valce) + " m^3")

Soubor mathlib_vojta.py musí být ve stejném adresáři, jako je skript obsahující tento kód.
courses/pri-bootcamp/01.txt · Last modified: 2019/08/26 12:57 by seredlad