Search
Nejprve se seznámíte s operačním systémem Ubuntu (jedna z nejrozšířenějších verzí Linuxu). Pro přístup k internetu použijte internetový prohlížeč Mozilla Firefox (ikona s liškou v levé postranní liště).
Začátek kurzu bude věnován programování s Robotem Karlem, díky kterému se seznámíme se základními příkazy všech programovacích jazyků:
Cílem je osvojit si základní principy programování a především pochopit, co je to program. 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á.
Stiskem “ctrl+alt+t” otevřete terminálové okno, umožňující přímé zadávání příkazů počítači. Získáváme tak více možností využití počítače a jeho výpočetních prostředků, nicméně je tento přístup vhodný spíše pro pokročilé uživatele a programátory (ale těmi se přece chcete stát.) Do příkazové řádky 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:
Vytvořte nyní ve svém domovském adresáři složku BootCamp:
mkdir BootCamp
Podrobnější návod s obrázky naleznete zde.
Do příkazového řádku napište Python3. Spustí se Python v režimu “Interactive shell”.
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(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”, v druhém výsledek zadaného výrazu, tedy číslo 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)
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)
V textovém editoru napište následující jednoduchý program.
print("Hello World!")
Uložte program jako textový soubor do složky Programovani 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!
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í:
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.
Poznali jsme tři základní datové typy, se kterými můžeme v Pythonu pracovat. Jsou to:
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)
V Pythonu existují funkce, které z hodnoty jednoho datového typu udělají hodnotu jiného datového typu.
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))
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!")
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)
Napište program, který načte jedno číslo (stranu čtverce) a následně vypíše obvod a obsah čtverce.
# Jana a = float(input("Zadejte stranu ctverce: ")) obvod = 4*a obsah = a*a print("Obvod je: "+str(obvod)) print("Obsah je: "+str(obsah))
Volné autorské řešení:
Miroslav Müller
Napište program, který načte dvě čísla (strany obdélníku) a následně vypíše obvod a obsah obdélníku.
# Bartolomej a = float(input("Zadejte cislo strany a: ")) b = float(input("Zadejte cislo strany b: ")) print(2*(a+b)) print(a*b)
Napište program, který načte jedno číslo (poloměr kruhu) a následně vypíše obvod a obsah daného kruhu.
# Luka Jovanovic r = float(input("Zadejte polomer kruhu:")) obvod = 2*3.14*r obsah = 3.14*r*r print("Obvod kruhu je: "+str(obvod)) print("Obsah kruhu je: "+str(obsah))
Napište program, který načte jedno číslo (poloměr koule) a následně vypíše povrch a objem dané koule.
# Jiri Kubik pi = 3.14 r = float(input("Zadejte polomer koule: ")) V = (4/3)*pi*r**3 S = 4*pi*r*r print("Povrch koule o polomeru",r,"je:",S) print("Objem koule o polomeru " + str(r) + " je: " + str(V))
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.
# Jana a = float(input("Zadejte a: ")) b = float(input("Zadejte b: ")) print("a+b =", a+b) print("a-b =", a-b) print("a*b =", 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”.
# autor neznamy a = input("Zadejte a: ") b = input("Zadejte b: ") c = a a = b b = c #a, b = b, a print(a+b) print(type(a)) print("a =", a) print("b =", b)
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.")
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 = 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 = 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ů.
Napište program, který načte postupně 3 čísla – délku, šířku a výšku kvádru – a spočítá objem tohoto kvádru.
# Bartolomej Bornus delka = float(input("Zadejte delku: ")) sirka = float(input("Zadejte sirku: ")) vyska = float(input("Zadejte vysku: ")) objem = delka*sirka*vyska print(objem)
Načtěte od uživatele souřadnice dvou bodů v rovině (dohromady tedy 4 čísla) a vypočítejte jejich vzdálenost.
Nápověda:
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)
# Marek Bistricky import math a1 = float(input("Zadej x1: ")) a2 = float(input("Zadej y1: ")) b1 = float(input("Zadej x2: ")) b2 = float(input("Zadej y2: ")) vzdalenost = math.sqrt((b1-a1)**2+(b2-a2)**2) print(vzdalenost)
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
# Vojta J. import math a=float(input("Zadejte stranu a:")) b=float(input("Zadejte stranu b:")) c=float(input("Zadejte stranu c:")) s=(a+b+c)/2 obsah=math.sqrt(s*(s-a)*(s-b)*(s-c)) #Heronuv vzorec print("Obsah trojuhelniku je",obsah)
Načtěte jedno celé číslo ze vstupu a vypište zda-li je sudé nebo liché.
#Luka a = int(input("Zadejte cislo:")) if a%2==0: print("cislo je sude") else: print("cislo je liche")
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.
# Marek Bistricky # Lucka d = float(input("Zadej prumer sudu: ")) v = float(input("Zadej vysku sudu: ")) r = (d/2)*10 vyska = v*10 pi = 3.14 V = pi*r**2*vyska mnozstvi = float(input("Zadej mnozstvi vodz v sudu: ")) if mnozstvi >= V: print("Sud pretece") else: print("Voda se do sudu vejde") vyska = mnozstvi/pi*r**2 print(vyska)
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”.
# Luka a = int(input("Zadejte cislo:")) if a>10 and a<20: print("Zadane cislo lezi v intervalu") else: print("Zadane cislo nelezi v intervalu")
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.”
# Lucka a = int(input("Zadej cislo a: ")) b = int(input("Zadej cislo b: ")) if a>b: print(a) elif b>a: print(b) else: print("Cisla se rovnaji")
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ý.
# MarekBistricky a = float(input("Zadejte a: ")) b = float(input("Zadejte b: ")) c = float(input("Zadejte c: ")) x = (-c**2+a**2+b**2)/(2*a*b) x2 = (-a**2+c**2+b**2)/(2*c*b) x3 = (-b**2+a**2*+c**2)/(2*a*c) if ((a+b)>c and (b+c)>a) and (a+c)>b: print("Trojuhelnik lze sestrojit") if x == 0 or x2 == 0 or x3 == 0: print("Trojuhelnik je pravouhly") elif x > 0 or x2 > 0 or x3 > 0: print("Trojuhelnik je ostrouhly") else: print("Trojuhelnik je tupouhly") else: print("Trojuhelnik nelze setrojit")
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.
# Lucka import math a = float(input("Zadejte koeficient a: ")) b = float(input("Zadejte koeficient b: ")) c = float(input("Zadejte koeficient c: ")) D = b**2-(4*a*c) if D < 0: print("Rovnice v R nema reseni") elif D == 0: x=(-b)/(2*a) print("Reseni rovnice je x=",x) else: x1=((-b)-math.sqrt(D))/(2*a) x2=((-b)+math.sqrt(D))/(2*a) print("Reseni rovnice je x1=",x1,"a x2=",x2)
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).
# Vojta x1 = float(input("Zadej souradnici X prvniho bodu: ")) y1 = float(input("Zadej souradnici Y prvniho bodu: ")) x2 = float(input("Zadej souradnici X druheho bodu: ")) y2 = float(input("Zadej souradnici Y druheho bodu: ")) if((x2-x1) == 0): print("Smernice lezi v nekonecnu") else: print("Smernice je:", ((y2 - y1)/(x2 - x1)))
Napište program, který načte souřadnice tří bodů v rovině. Zjistěte, jestli leží na jedné přímce.
# Vojta x1 = float(input("Zadej souradnici X prvniho bodu: ")) y1 = float(input("Zadej souradnici Y prvniho bodu: ")) x2 = float(input("Zadej souradnici X druheho bodu: ")) y2 = float(input("Zadej souradnici Y druheho bodu: ")) x3 = float(input("Zadej souradnici X tretiho bodu: ")) y3 = float(input("Zadej souradnici Y tretiho bodu: ")) vekx = x2 - x1 veky = y2 - y1 a = -veky b = vekx c = -a*x1 - b*y1 if(a*x3+b*y3+c==0): print("Body lezi v primce.") else: print("Body nelezi v primce.")
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.
# Vojta a = float(input("Zadej prvni cislo: ")) o = str(input("Zadej operaci: ")) b = float(input("Zadej druhe cislo: ")) if (o == "+"): print(a+b) elif (o == "-"): print(a-b) elif (o == "*"): print(a-b) elif (o == "/"): print(a-b) else: print("Nezadal jsi platnou operaci.")
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 :)
2017 Vojta (Bez dokumentace)
# 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")