C2184 Úvod do programování v PythonuC2184 Úvod do programování v Pythonu 2. Syntaxe, čísla a matematické operace2. Syntaxe, čísla a matematické operace ČíslaČísla Celá (integer) Reálná ( oat) 1, 5, -25, 0 3.14, -5.5, 6.022e23, 1.6e-19 Aritmetické operátoryAritmetické operátory Klasické sčítání, odčítání, násobení a dělení In [4]: In [70]: 5 + 2 - 4 2 * 5 / 6 Out[4]: 3 Out[70]: 1.6666666666666667 Mocniny a odmocninyMocniny a odmocniny In [6]: In [7]: 5**2 25**(1/2) Out[6]: 25 Out[7]: 5.0 Priorita aritmetických operátorůPriorita aritmetických operátorů Jako v matematice: najdřív **, pak * /, nakonec + - In [8]: Závorky jsou vždy jen (), nepoužíváme [] a {} jako v matematice In [9]: 2**8 - (5 + 5) * 5 * 5 + 5 (10 * ((5-4) * 2 + 1)) ** 2 Out[8]: 11 Out[9]: 900 Celočíselné dělěníCeločíselné dělění Alice a Bob si chtějí rozdělit 7 jablíček... 7 ÷ 2 = 3 (zbytek 1) In [10]: In [11]: Zbytku po dělení se říká také modulo (říkáme "7 modulo 2"). 7 // 2 # Výsledek celočíselného dělení 7 % 2 # Zbytek po dělení Out[10]: 3 Out[11]: 1 FunkceFunkce Objekt, kterému dáme nějaké parametry a on nám něco vrátí, případně něco udělá Funkci voláme pomocí závorek In [71]: In [13]: In [14]: abs abs(-5) print('hello') Out[71]: Out[13]: 5 hello Funkce může mít i více než jeden parametr In [15]: Nebo taky žádný In [16]: Funkce lze vnořovat In [17]: Později si ukážeme, jak vytvářet vlastní funkce max(1, 5, 2) print() print(max(1, abs(-5), 2+2)) Out[15]: 5 5 TypyTypy Každá hodnota v Pythonu má svůj typ. Základní typy: int = celá čísla (integers) float = reálná čísla ( oating-point numbers) complex = komplexní čísla komplexní složka se označuje j (např. 1+2j, 3-1j) bool = logické hodnoty (Boolean): True, False str = řetězce (strings), např. 'Hello World' NoneType = typ, který má pouze jednu hodnotu: None ("nic") hodnotu None vrací např. funkce print FunkceFunkce type Zjišťuje, jakého typu je hodnota In [18]: In [19]: In [20]: In [21]: In [67]: type(1) type(3.14) type(1.0) type(True) type('10') Out[18]: int Out[19]: float Out[20]: float Out[21]: bool Out[67]: str Všechno má svůj typVšechno má svůj typ In [37]: In [38]: In [39]: In [40]: type(print) type(print()) type(int) type(type) Out[37]: builtin_function_or_method Out[38]: NoneType Out[39]: type Out[40]: type Přetypování (Přetypování (type conversion)) Název funkce pro konkrétní typ se jmenuje stejně jako daný typ (např. desetinná čísla float()) In [42]: In [43]: In [44]: In [45]: In [46]: type(10) float(10) type(float(10)) str(10) type(str(10)) Out[42]: int Out[43]: 10.0 Out[44]: float Out[45]: '10' Out[46]: str Proměnné (Proměnné (variables)) "Krabičky" pro uložení hodnot Každá proměnná má svůj název (identi kátor, identi er) Odkazuje na místo v paměti počítače, kde je uložená hodnota (value ) Název proměnné Popisuje její význam Může obsahovat písmena bez diakritiky, číslice, podtržítko _ Nesmí začínat číslem a nesmí být shodný s klíčovým slovem ( ) Používají se malá písmena, slova se oddělují podtržítkem https://docs.python.org/3/reference/lexical_analysis.html#keywords (https://docs.python.org/3/reference/lexical_analysis.html#keywords) time, average_water_temperature, x1, x2, V Propojení proměnné s hodnotou pomocí přiřazení = (assignment) In [47]: In [48]: In [49]: In [50]: In [51]: a = 10 b = 5 a b a = b a c Out[48]: 10 Out[49]: 5 Out[50]: 5 --------------------------------------------------------------------------- NameError Traceback (most recent call last) in ----> 1 c NameError: name 'c' is not defined Proměnné nemají typProměnné nemají typ Do jedné proměnné lze ukládat hodnoty různých typů In [52]: In [53]: In [54]: Tomuto principu se říká dynamické typování x = 10 type(x) x = 'hello' type(x) x = abs type(x) Out[52]: int Out[53]: str Out[54]: builtin_function_or_method Speciální přiřazeníSpeciální přiřazení Operátory přiřázení +=, -=, *=, /=, //=, %=, **= Máme obecně p ?= v, Python interpretuje tento zápis jako p = p ? v, kde p je proměnná, ? je operátor, v může být proměnná nebo hodnota In [55]: In [56]: a = 1 a += 1 a a = 2 a *= 8 a Out[55]: 2 Out[56]: 16 KonstantyKonstanty Proměnné, kterých hodnota by sa neměla měnit Nazýváme je velkými písmeny AVOGADRO_NUMBER = 6.022e23 GOLDEN_RATIO = (1 + 5**(1/2)) / 2 Komentáře (Komentáře (comments)) Doplňují kód, aby bylo jasné, co dělá Python je ignoruje Komentáře na jeden řádek začínají # Komentář na více řádku je uzavřen v """ ... """ def pocitej_odpor(napeti, proud): """Vypocet odporu dle Ohmova zakona. napeti -- vstupni napeti [V] """ odpor = napeti / proud return odpor napeti = 5 # Vstupni napeti [V] VSCode – zakomentování/odkomentování řádku nebo více řádků pomocí Ctrl + / (na české klávesnici -) Komentáře doplňují informace, neduplikují kód Přehlednost – mezera za #, aspoň dvě mezery před # m *= 1000 # Proměnnou m vynásobíme 1000 (zbytečný komentář) m *= 1000 # Přepočet z kilogramů na gramy (užitečný komentář) #Ugly comment a=5#Another ugly comment # Nice comment a = 5 # Another nice comment Příliš mnoho komentářů značí, že možná něco děláme špatně (code smell) Smradlavý kód: Opravený kód n = 25 # Number of students number_of_students = 25 n_students = 25 Moduly (Moduly (modules)) Modul je soubor proměnných, konstant, funkcí a dalších objektů Modul načítáme pomocí klíčového slova import Objekty z modulu vybíráme pomocí tečky . In [57]: In [58]: import math math.pi math.sqrt(2) # Odmocnina Out[57]: 3.141592653589793 Out[58]: 1.4142135623730951 In [59]: In [60]: In [61]: In [62]: In [63]: math.log(100) # Přirozený logaritmus math.log10(100) # Desítkový logaritmus math.sin(90) # Sínus úhlu v radiánech math.radians(90) math.degrees(2 * math.pi) Out[59]: 4.605170185988092 Out[60]: 2.0 Out[61]: 0.8939966636005579 Out[62]: 1.5707963267948966 Out[63]: 360.0 Porovnávací operátory (Porovnávací operátory (comparison operators)) Větší, menší: Rovno, není rovno: Větší rovno, menší rovno: Pozor, nelze zaměňovat = a == Výsledkem těchto operátorů je vždy logická hodnota. a > b, a < b a == b, a != b a >= b, a <= b x = 5 # Do proměnné x přiřaď hodnotu 5! x == 5 # Je x rovno pěti? Logické hodnotyLogické hodnoty Existují pouze dvě: Tyto hodnoty jsou typu bool (zkratka od angl. Boolean, zavedl je matematik George Boole) True, False Logické operátoryLogické operátory Platí a a zároveň b Platí a nebo b Neplatí a (platí opak a, negace a) a and b a or b not a In [ ]: je_duha = prsi and sviti_slunce mam_volno = je_sobota or je_nedele or je_svatek musim_do_prace = not mam_volno Priorita operátorůPriorita operátorů 1. Aritmetické operátory + - * / ... 2. Porovnávací operátory < > == != ... 3. not 4. and 5. or 6. Přiřazení = Pokud to chceme jinak, použijeme závorky In [65]: In [66]: 100 <= 200 and 5 > 10 or 2 + 2 == 4 not True or 9 + 3 > 11 and 5 != 6 Out[65]: True Out[66]: True Zkratky: je to stejné jako 0 <= x < 10 0 <= x and x < 10 CvičeníCvičení Spočítejte výsledek z hlavy: In [ ]: In [ ]: In [ ]: a = True b = False a and b or not a and not b x = 5 y = 10 y > x * x or y >= 2 * x and x < y 13 // 5 > 13 % 5 and not False and (True or True == False) Řešení: In [3]: In [4]: In [5]: a = True b = False a and b or not a and not b x = 5 y = 10 y > x * x or y >= 2 * x and x < y 13 // 5 > 13 % 5 and not False and (True or True == False) Out[3]: False Out[4]: True Out[5]: False