Kurz bude vyučovaný online formou, každý čtvrtek od 15:30 do 17:00 na stránce https://meet.jit.si/programovani-je-hra. Cílem je se seznámit se základy programování v jazyce Python.
Kontakt
Pokud byste se chtěli na cokoliv zeptat, tak jsem k zastižení tady:
Email:tomas [zavináč] slama [tečka] dev
Discord:Tomáš Sláma#6609
Příklady
Příklady jsou nepovinné, nejsme ve škole. Jsou tu hlavně pro to, abyste se lépe pochopili probíranou látku a rozhodně se nebudu zlobit, když za kurz nesplníte všechny. Na druhou stranu budu rád, když se alespoň část pokusíte vyřešit 🙂. Těžké příklady jsou označené hvězdičkou (⭐).
1. hodina (10. 12. 2020)
Proměnné
“krabičky” se jmény, které si drží informace
1
2
3
4
5
6
7
8
9
a=123# krabička a, která drží číslo 123b="Tohle je věta."# krabička b, která drží větuc=a# krabička c, která si uloží, co je v a# print(...) vypíše cokoliv, co do něho dáte# pro nás zatím magieprint(a)print(b)print(c)
jméno krabičky může obsahovat:
velká a malá písmena
čísla (ale ne jako první znak!)
symbol _
1
2
123=1# neplatné, jméno nesmí začínat číslema+b=123# neplatné, jméno nesmí obsahovat +
Máte číselné proměnné a a b. Napište program, který prohodí jejich obsah. [řešení]
Zvládnete to bez použití pomocné proměnné (a bez použití a, b = b, a)? ⭐ [řešení]
Aritmetika
Zajímavost: místo a = a + 3 můžeme používat a += 3 (funguje i pro ostatní operátory). Zápis je tak stručnější a přehlednější.
s proměnnými toho příliš nezvládneme, umět počítat
Python umí vyhodnocovat aritmetické výrazy
běžné jsou +, -, *, /
umí používat také závorky (, )
další operátory:
// – celočíselné dělení
% – zbytek po dělení
** – mocnění
1
2
3
4
5
6
7
8
9
10
11
12
13
a=12+6-5# a = 13b=a/2# b = 6.5c=-b# c = -6.5d=2+2*2# d = 6e=(2+2)*2# e = 8f=2**3# f = 8print(a)print(b)print(c)print(d)print(e)print(f)
Máte proměnnou a, která udává délku strany kostky. Vypište její obsah. [řešení]
Vypište plochu největší koule, která se do kostky vejde. [řešení]
Vypište plochu největší koule, do které se kostka vejde. ⭐ [řešení]
Máte proměnnou celsius s číselnou hodnotou. Vypište, kolik je to Fahrenheitů (odkaz na Wiki, pokud nevíte, jak převod vypadá). [řešení]
if, else
Zajímavost: existuje také elif, které je možné zapojit za if, které se zkusí vykonat jen pokud se if nevykoná.
vykonávání kódu, pokud něco platí/neplatí
pokud je podmínka pravdivá, tak se vykonají všechny následující (správně) odsazené řádky
else je nepovinné, ale může se hodit
1
2
3
4
5
6
7
8
9
a=10ifa==10:print("a je 10!")# vykoná seifa<3:print("a je menší než 3!")# nevykoná seelse:print("a je větší nebo rovno 3!")# vykoná se
ify můžeme vnořovat do sebe a vytvářet tak komplexnější podmínky
1
2
3
4
5
6
7
8
9
a=10ifa<100:ifa<50:print("a je menší než 50")else:print("a je mezi 50 a 100")else:print("a je větší nebo rovno 100")
Máte číselné proměnné a a b. Vypište <, > nebo = podle toho, zda je a menší/větší/rovné. [řešení]
Máte číselnou proměnnou a. Napište program, který vypíše Sudé! když je a sudé a Liché!, když je a liché. Použijte operátor % (zbytek po dělení). [řešení]
Máte číselné proměnné a, b a c, které mají různé hodnoty. Vypište tato čísla od nejmenšího po největší. Využijte toho, že ify mohou být vnořené. ⭐ [řešení]
Chceme napsat robota, který bude hádat čísla od 1 do 100. Uživateli řekne číslo, které hádá, a zeptá se ho, zda je uživatelovo menší, nebo větší. ⭐ [řešení]
Pole
hodně proměnných za sebou
1
2
3
4
5
6
7
8
9
10
11
12
x=[0,0,0]x[0]=1x[1]=10x[2]=3print(x[0])# vypíše hodnotu na první poziciprint(x[1])# vypíše hodnotu na druhé poziciprint(x[2])# vypíše hodnotu na třetí poziciprint(x)# vypíše pole: [1, 10, 3]print(len(x))# vypíše délku pole (3)
po otevření aplikace Processing 3 v pravém horním rohu rozklikni, vyber Add Mode...
nainstaluj z nabídky Python mód
restartuj a Python mód vyber
Odbočka: funkce
„krabička“, která vezme nějaké hodnoty, vykoná kus kódu poté něco vrátí
1
2
3
4
5
6
deffunkce(x):# bere nějakou hodnotuy=x+1returny# a vrátí ji o 1 zvětšenouprint(funkce(4))# vypíše 5print(funkce(-3))# vypíše -2
občas také nemusí nic brát:
1
2
3
4
deffunkce():# žádnou hodnotu neberereturn42# vrací vždy 42print(funkce())# vypíše 42
občas také nemusí nic vracet:
1
2
3
4
deffunkce():print("jen vypisuju, nic neberu ani nevracím")funkce()
Základní Processing program
line(x1, y1, x2, y2) – vykreslení čáry
rect(x1, y1, x2, y2) – vykreslení obdélníku
ellipse(x1, y1, x2, y2) – vykreslení elipsy
1
2
3
4
5
6
7
8
9
10
11
12
defsetup():# kód, který se vykoná pouze jednousize(400,400)# nastavení velikosti oknabackground(255)# nastavení pozadí na bíloudefdraw():# kód, který se dokola opakujeline(200,100,200,230)line(200,230,220,300)line(200,230,180,300)line(200,150,180,200)line(200,150,220,200)ellipse(200,100,50,50)rect(-1,300,401,401)
Přidejte panáčkovi domeček.
Přidejte panáčkovi stylový klobouk.
Používání proměnných
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
x=3# definování proměnnýchy=20defsetup():size(400,400)defdraw():globalx,y# použití proměnných ve funkcibackground(255)ellipse(x,y,10,10)# posouvaní míčku# pokud vyjede mimo obrazovku, vrátíme ho zpětx=(x+3)%widthy=(y+5)%height
Místo posouvání míčku simulujte “odrážení” od stěny. [řešení]
defsetup():# kód, který se vykoná pouze jednousize(400,400)# nastavení velikosti oknabackground(255)# nastavení pozadí na bíloudefdraw():# kód, který se dokola opakujetranslate(width/2,height/2)rotate(radians(45))translate(-width/2,-height/2)line(200,100,200,230)line(200,230,220,300)line(200,230,180,300)line(200,150,180,200)line(200,150,220,200)ellipse(200,100,50,50)rect(-1,300,401,401)
defkeyPressed():ifkey=='a':# vykoná se po zmáčknutí klávesy 'a'
else:# vykoná se po zmáčknutí jiné klávesy
# pro speciální klávesy jako šipky používejte `keyCode`:
ifkeyCode==LEFT:# vykoná se po zmáčknutí levé šipky
existuje také keyReleased, která značí puštění klávesy
Naprogramujte čtverec, který se hýbe po stisknutí wasd. [řešení]
udělejte pohyb plynulý (brždění, když pustíme klávesu) ⭐ [řešení]
Zmáčknutí myši
1
2
3
4
5
defmousePressed():ifmouseButton==LEFT:# vykoná se po zmáčknutí levého tlačítka myši
elifmouseButton==RIGHT:# vykoná se po zmáčknutí pravého tlačítka myši
také je možné využít proměnné mouseX a mouseY, které udržují pozici kurzoru myši
Naprogramujte kruh, který se vždy vykresuje na pozici myši. [řešení]
přidejte pohyb plynulý (aby se kruh plynule přibližoval k myši) [řešení]
Barvičky!
RGB spektrum – míchání červené, zelené a modré složky
# vytvoření třídy, která popisuje lidi# každý člověk má jméno, věk a umí vyrůstclassClovek:# speciální metoda, která se zavolá, když se objekt vytvářídef__init__(self,jmeno,vek):self.jmeno=jmenoself.vek=vek# funkce, kterou má každý člověk# po zavolání zvýší jeho věk o 1defvyrost(self):self.vek+=1# vytvoření objektů alice a bob, kteří jsou lidéalice=Clovek("Alice Novotná",20)bob=Clovek("Bořek Stavitel",34)# zavolání vlastností na objektyalice.vyrost()bob.vyrost()
Přidejte funkci vyrost_o, která bere parametr o a přidá danému člověku tolik let. [řešení]
Přidejte člověku proměnnou vaha a funkce ztloustni a zhubni, které váhu o 1 zvyšují/snižují. [řešení]
Vytvořte Processing sketch, kde bude po obrazovce létat míče (vytvořené myší). [řešení]
hint: vytvořte třídu Ptak, nově vytvořené ptáky ukládejte do pole; každé pole má funkci append(věc), která na jeho konec přidá věc
defsetup():size(400,400)background(255)fill(0)# černý texttextSize(32)# velikost textu 32textAlign(CENTER,CENTER)# vycentrování# vykreslení textu doprostřed obrazovkytext('Ahoj!',width/2,height/2)
používání kódu (funkcí, proměnných), který naprogramovali ostatní
syntax:
naimportování knihovny: import <jméno knihovny>
používání věcí z knihovny: <jméno knihovny>.věc
math
matematika-related věci
funkce:
math.sin, math.cos, math.tan
math.logaritmus, math.factorial
…
konstanty:
math.pi, math.e
random
generování náhodných čísel:
math.randint(a, b) – náhodné celé číslo od a do b
math.random() – náhodné desetinné číslo od 0 do 1
Docstringy
způsob komentování toho, co dělá celá funkce
automaticky z něj lze vygenerovat dokumentaci ke knihovně, ve které je
pomáhá pokročilejším prostředím
1
2
3
4
5
defmoje_funkce():"""Tahle moje funkce dělá moc cool věci."""# ...# kód funkce# ...
8. hodina (18. 2. 2021)
stringy
proměnné typu str v sobě ukládají text
věci, které string nejsou, lze na string převést přes funkci str
string lze přímo z textu vytvořit buďto 'takhle', nebo "takhle"
1
2
3
4
5
6
7
a="Tohle je hezká věta."# normální stringb="Tohle"+" je "+"další."# spojování více stringů do jednohoc="5^420 = "+str(5**420)# spojování a převádění čísel na stringprint(a)print(b)print(c)
9. hodina (25. 2. 2021)
rekurze
funkce, která odkazuje „sama na sebe“
dokáže výrazně zjednodušit kód
1
2
3
4
5
6
7
8
deffactorial(n):ifn==0:# tzv. "base case" -- místo, kde se rekurze zastavíreturn1else:# vycházíme z toho, že n * (n - 1)! = n!returnn*factorial(n-1)print(factorial(5))
importsysfromPyQt5.QtWidgetsimport*# import VŠEHO z Pyqt5.QtWidgetsclassMyWindow(QWidget):def__init__(self):super().__init__()# magie# vytvoření labelu (nápisu) a buttonu (tlačítka)self.label=QLabel('Ahoj, světe!')self.button=QPushButton('Stiskni mě!')# vytvoření vertikálního layoutu, který pokládá věci pod sebelayout=QVBoxLayout()layout.addWidget(self.label)layout.addWidget(self.button)# aplikování layoutuself.setLayout(layout)# ukázání widgetuself.show()# magieapp=QApplication(sys.argv)ex=MyWindow()sys.exit(app.exec_())
Ponořme se do Pythonu – dobře napsaná kniha o programování v Pythonu 3, na kterou se můžete podívat, pokud byste se rádi Python učili i ve svém volném čase.