Základy programování v jazyce Python Lekce 2 - proměnné a struktury Třída, Instance (OBJEKT) Třída: Auto Metody: - brm_brm() - Tu_tůůů() Instance(objekt): Blesk_McQueen Metody: - brm_brm() - Tu_tůůů() Třída, Instance (OBJEKT) Třída: Auto Metody: - brm... brm() - Tu tůůů() Instance(objekt): Blesk_McQueen Metody: - brm... brm() - Tu tůůů() Abstrakce auta Konkrétní auto Některé základní typy Tříd int celá čísla Číslo bez desetinné tečky 10 float čísla s plovoucí tečkou Číslo s desetinnou tečkou popř exponentem 7.82e2 string textový řetězec znaky “Je 28. února” list Očíslovaný seznam Jakékoli objekty indexované int [1,7.82e2, “Ahoj” ] dictionary Slovník Jakékoli objekty indexované str {‘věk’: 7, ‘barva’: ‘zelená’ } (čti: 7,82・102 ) Některé speciální třídy Některé speciální objekty jsou vždy vytvořeny jenom jednou a vždycky mají stejnou adresu v paměti (v rámci jednoho spuštění) None - objekt reprezentující "nic" True, False - dva objekty typu bool = není “rovná se” Krabičky Co se děje když napíšu: a = 10 ??? Krabičky Co se děje když napíšu: a = 10 + 12.5 1) Python se pokusí vyhodnotit pravou stranu od = V našem případě si řekne: co tím programátor myslel? Asi chtěl vytvořit nový objekt do kterého schová číslo 10 Tak to bude třeba objekt int pro celočíselné hodnoty => Python vytvoří nový objekt int s hodnotou 10 Paměť Počítače int adresa:adresa: #1 Krabičky Co se děje když napíšu: a = 10 + 12.5 2) Je na pravé straně ještě něco? ANO Je tam plus, jenže plus co??? 12.5… chmm… programátor asi myslí číslo s desetinnou čárkou = float => Python vytvoří nový objekt float s hodnotou 12.5Paměť Počítače int float adresa: #1 #2 Krabičky Co se děje když napíšu: a = 10 + 12.5 3) Je na pravé straně ještě něco? NE Tak teď + Python koukne jestli je definována funkce + mezi objekty int a float Hurá je! Tak ji použijem! Funkce vrací nový objekt typu float Paměť Počítače int float adresa: #1 #2 float #3 Krabičky Co se děje když napíšu: a = 10 + 12.5 4) Je na pravé straně ještě něco k řešení? NE Adresa v paměti je přiřazena k proměnné v rejstříku proměnných Ostatní objekty které nejsou nadále používané jsou vymazány z pamětiPaměť Počítače float Rejstřík proměnnýcHint float adresa: #1 #2 #3 Proměnná: Adressa: a #3 Funkce print a type ● print(var) ○ vypíše obsah proměnné `var` ● type(var) ○ vrátí typ proměnné `var` Vyzkoušejte! Příklad a = 12 print(type(a)) print(a) b = str(a) print(type(b)) print(b) a = b print(type(a)) print(a) a = int(a) Co se stalo tady? `=` není rovná se Operace s čísly Operátor Popis funkce Příklad + Sčítání 10 + 4 = 14 - Odčítání 10 – 4 = 6 * Násobení 10 * 4 = 40 / Dělení 10 / 4 = 2.5 % Modulo Zbytek po dělení 10 % 4 = 2 ** Exponent Umocnění 10**4 = 10000 // Celočíselné dělení, zaokrouhluje dolů 10//4 = 2 -10//4 = -3, Pozor: ^ je bitový operátor, ne umocňování: print(2^4) #je 6... Relační operátory Operátor Popis funkce Příklad == Se rovná 1 == 2 is False != Se nerovná 1 != 2 is True > (<) Větší (menší) než 1 > 2 is False 1 < 2 is True >= (<=) Větší (menší) nebo rovno 2 >= 2 is True Pozor: => nebo =< nefungují. Operátory identity a ‘Membership’ operátory Operátor Popis funkce Příklad is Porovnání jestli jsou obě proměnné cíli na stejný objekt type(2) is int is True is not Porovnání jestli jsou obě proměnné cíli na jiný objekt type(2) is not int is False in Vyhodnotí jestli je něco v něčem “Ahoj” in “Ahoj Karle” is True Logické Operátory Operátor Popis funkce Příklad and Logické “a” True and True is True True and False is False False and True is False False and False is False or Logické “nebo” True or True is True True or False is True False or True is True False or False is False not Logická “negace” not True is False not False is True Pořadí vyhodnocování () Věci v závorkách se vyhodnotí nejdříve ** *, /, %, // +, <=, <, >, >= ==, != is, is not, in, not in not, or, and Výrazy napravo se vyhodnotí dřív. Příklad: x = y = 3 Později Dřív Práce s logickými operátory maji_chleba = False penize = 50 # Kc karta = False cena_1_strycle = 32.90 # Kc koupit_10_chlebu = ( maji_chleba and ( (penize >= 10 * cena_1_strycle) or karta ) ) Úkol: upravte podmínky tak, aby se dalo koupit 10 chlebů. Pozn.: Doporučujeme zkoušet po částech... Pořádek v Jupyter Notebooku Klikněte sem a budete moct vkládat nadpisy a formátovaný text. Klikněte sem a přejmenujte si notebook Python jako kalkulačka Zadání: Kolik energie je třeba k tomu, abyste se dostali z Koutů nad Desnou (562 m.n.m.) na vrchol Pradědu (1492 m.n.m.)? Kolik gramů hořké čokolády tuto energii obsahuje? Pro výpočet se aproximujte dokonalou koulí o hmotnosti 50 kg, která se valí bez jakéhokoliv odporu. Nápověda: ● pro dokonalou kouli valící se bez odporu platí E = m g Δh ● https://www.kaloricketabulky.cz/jemna-horka-cokolada-70-kakaa Python jako kalkulačka Změna zadání: Jejda! Dali jsme si preventivně celou tabulku, ale měli jsme si dát jen 20 g. Teď se kvůli nepromyšlené konzumaci čokolády naše hmotnost zdvojnásobila. Kolik energie a kolik čokolády to bude teď, když jsme dokonalou koulí o hmotnosti 100 kg? Použijte kód, který už máte, jen upravte hodnotu odpovídající proměnné! Python jako kalkulačka Další změna zadání: Jak by to vyšlo na Marsu? (g_Mars = 0.38 * g_Earth) String - Řetězec znaků t k o J e ž u r á t k o -3 -2 -1 0 1 2 3 4 5 6 7 8 a = 'Ježurátko' a[0] ? a[:] ? a[2:] ? a[:2] ? a[1:6] ? a[2:-2] ? a[-4:] ? a[0:14] ? a[::2] ? a[1:8:2] ? a[::-1] ? b = 2, c = 7 a[b:c] ? b = 1, c = 2**2 a[b:c] ? b = 1.1, c = 4 a[b:c] ? Cvičení - Převod čísla na řetězec Opravte následující blok kódu a faktickou chybu (má být 4-): a = 3 #tady neopravujte b = "Ježura má " + a + "-hlavý penis." #opravte tady print(b) Nápověda: vzpomeňte si na funkci str(). Šifra (Hurvínek's code) sifrovane_sdeleni_podle_Hurvinka = """Kčodčoyčožčo čotčoočohčolčoečo čovčoyčolčoučoščotčoíčotčoečo,čo čojčosčotčoečo čončoečojčolčoečopčoščoíčo""" vyluštěte pomocí vhodného indexování [] Tajemství Templářů Zakódujte následující řetězec znaků: rozdělte ho na dva podřetězce; první bude obsahovat liché a druhý sudé znaky. Ty pak spojte. veta = 'Krutopřísně tajné sdělení obsahující tajemství k ovládnutí světa' BAPHOMET-APPROVED Ponorková šifra Použijte předchozí metodu tentokráte s krokem 3 (tzn. každé třetí písmeno - dostanete tři stringy které sečtete.) sifra = 'Kškon lívi,ik š tntoířl!ei!' Tentokráte dostanete po rozkódování nejčastější zprávu, kterou si posílaly ponorky za II. světové války. Zarámování řetězce Napište skript, který vypíše řetězec ve správně velkém rámečku. Příklad: s = "Ježurátko v rámečku" K řešení budete potřebovat: len("aha") # délka řetězce, výsledek je 3. 3*"la" # násobení řetězců, výsledek je "lalala". print() # už znáte +---------------------+ | Ježurátko v rámečku | +---------------------+ Váš skript Dnešní lekci Vám přinesla ježura, Váš oblíbený pojídač mravenců.