Čitelný kód, if-else E 3011 Jan Bóhm RECETOX March 13, 2024 Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 1/31 Co nás dnes čeká O jak psát čitelný kód Jan Bóhm (RECETOX) Přednáška IV Názvy objektů Jak pojmenovávat objekty Vždy záleží na dohodě. Obvykle se tým dohodne na nějakých standardech, které je třeba dodržovat. Dnes takové standardy nastavíme: • budeme používat angličtinu a nebude používat speciální znaky a víceslovné názvy funkcí, proměnných - lowCamelCase • jména musí vystihovat, co proměnná znamená / co funkce dělá, např. dateOfBirth, dotProduct(vecl, vec2) • zkratky jsou ok, pokud jsou pochopitelné • dlouhé názvy jsou lepší než nepochopitelné zkratky • nepoužívat jednopísmenné proměnné s výjimkou indexů (např. i, j jako indexy matice jsou ok) • konstanty - KAPITALKY (UCO = 408849) Jan Bôhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 3/31 Jak formátovat kód Formátování kódu Tady je několik pravidel, které pomohou, aby byl kód čitelný • maximálně 80 znaků na řádku 9 mezery za , ; • mezera před i za binární operací +,-,/, °/05... nebo okolo přiřazení = • v případně závorek nepoužívat mezery u nejvyšší priority • nepoužívat zbytečně mezery o zalamovat řádky tak, aby začínaly binárním operátorem o více parametrů zalamovat tak, aby začínaly na stejném řádku před novou funkcí mít 2 volné řádky • použít prázdný řádek pro oddělování větších kroků v programu • pro odsazení používat 4 mezery (hlídá IDE) Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 4/31 Ukázky dobře (a špatně) formátovaného kódu 1 # Comments can be written using hashtag 2 # Anything beyond hashtag Python doesn't see 3 name = "Jan" # comment can be inline 4 5 # Not recommended 6 x = "Jan Bohm" # Teacher 7 8 # Recommended 9 teacher = "Jan Bohm" 10 n # Not recommended 12 x = 'Mgr. Jan Bohm' 13 a , b , c = x . split () 14 print (c, b, sep=", ") 15 16 # Recommended 17 person = "Mgr. Jan Bohm" 18 title, name, surename = person. split () 19 print (surename , name, sep = ", ") Jan Bohm (RECETOX) Přednáška IV March 13, 2024 5/31 Ukázky dobře (a špatně) formátovaného kódu 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # Not recommended def db(x): return(2*x) # Recommended def double(x): return(2*x) # Not recommended def dummyFunction(argument1, argument2, argument3, argument4): pass # Recommended def dummyFunction(argument 1, argument2, argument3, argument4) pass Jan Bôhm (RECETOX) □ S March 13, 2024 5 >T) <\ (y 6/31 Ukázky dobře (a špatně) formátovaného kódu 3 2 1 # Not recommended total = (numberl + number2 + number3 + number4) 4 7 5 6 # Recommended total = (numberl + number2 + number3 + number4) 8 9 # Not recommended 10 name = " Jan" n importantNumber = importantNumber *3 12 x=(-b+D**Q/2) )/2a 13 x=( -b + D**(l / 2) ) / (2 * a) 14 15 # Recommended 16 name = "Jan" 17 importantNumber = importantNumber * 3 18 x = (-b + D**(l/2)) / (2*a) □ g - = Přednáška IV March 13, 2024 7/31 Ukázky dobře (a špatně) formátovaného kódu i # Not recommended 2ifx*y>0ory*z>0orx 3 pass 4 5 # Better 6 if x*y > 0 or y*z > 0 or x*z > 0 7 pass 8 9 # Recommended 10 condl = x*y > 0 n cond2 = y*z > 0 12 cond3 = x*z > 0 13 if condl or cond2 or cond3: 14 pass * z > 0 Jan Bohm (RECETOX) Přednáška IV □ UP - - March 13, 2024 8/31 Ukázky dobře (a špatně) formátovaného kódu 1 # Not recommended 2 def solveQuadraticEquation(a,b,c): 3 pass 4 5 # Recommended 6 def solveQuadraticEquation(a, b, c) 7 pass Jan Bohm (RECETOX) 'řednáška IV March 13, 2024 9/31 Struktura skriptu Struktura skriptu Skripty strukturujeme následovně O Úplně v hlavičce v komentáři popis, o co se jedná O Následují importy z knihoven O Poté definice vlastních funkcí O Samotný skript V případě, že vlastních funkcí je hodně, můžeme je mít v jednom skriptu, např. functions .py a naimportovat je jako knihovnu import functions (oba skripty musí být ve stejném adresáři). Takto to budeme dělat... Jan Bôhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 10/31 Co nás dnes čeká O If-else Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 11/31 If-else lf-else If else je základní řídící struktura kódu. Funguje takto: if condition then | doSomething(); /* Runs only if conidtion is True */ else L doSomethingElseQ; /* Runs only if conidtion is Falše */ Jan Bôhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 12/31 If-else if x < y: print("x is less then y") else : if x > y: print("x is greater then y") else : print("x and y are equal") Jan Bohm (RECETOX) Přednáška IV S1 March 13, 2024 13/31 If-else if x < y: print("x is less then y") else : if x > y: print("x is greater then y") else : print("x and y are equal") if x < y: print("x is less then y") elif x > y: print("x is greater then y") else : print("x and y are equal") Jan Bohm (RECETOX) Přednáška IV □ S> - = March 13, 2024 13/31 Co nás dnes čeká Q Mysteries & errors Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 14/31 Mysteries & errors Zadání Následuje několik ukázek kódu v pythonu. Pokud je v kódu chyba, poznamenejte si kde. Pokud je kód správně, zapište si, co vypíše. Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 15/31 Mysteries & errors #1 numberl = 1 number2 = -1 if numberl = number2: print("Equal") else : print("Not equal") □ g - = March 13, 2024 16/31 Mysteries & errors #2 n = 1 while n > 0: n /= 10 print("DOME") Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 17/31 Mysteries & errors #3 for n in range (6) : if n °/o 2 == 0: print("n is even") Jan Bohm (RECETOX) March 13, 2024 18/31 Mysteries & errors #4 for n in range (6) : if 12 % n == 0: print("12 is divisible by n) Jan Bóhm (RECETOX) Přednáška IV March 13, 2024 19/31 Mysteries & errors #5 1 number1 = "4" 2 number2 = "-3" 3 number3 = numberl + number2 4 5 print(number3) □ g - = March 13, 2024 20/31 Mysteries & errors #6 1 print("Red") 2 print("Green") Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 21/31 Mysteries & errors #7 number = "408849" result = 0 for n in number: result += number print(result) □ g - = March 13, 2024 22/31 Mysteries & errors #8 condl = "True" cond2 = "False" if condl and cond2: print("Red") else : print("Green") □ g - = Přednáška IV March 13, 2024 23/31 Mysteries & errors #9 x = 10 def plusOne () : x += 1 print(x) plusOne () □ g - = Přednáška IV March 13, 2024 24/31 Mysteries & errors #10 x = 10 def dummy () : x = 5 return(x) dummy () print(x) □ g - = Přednáška IV March 13, 2024 25/31 Mysteries & errors #11 def half(x) : print(x/2) x = 32 for i in range(5) x = half(x) print(x) Jan Böhm (RECETOX) Přednáška IV March 13, 2024 5 >T) <\ (y 26/31 Mysteries & errors #12 animal = cat if animal == "dog": print("Good boi") Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 27/31 Co nás dnes čeká O Opakování matematiky Jan Bôhm (RECETOX) Prvočíslo Prvočíslo je číslo, které má právě 2 dělitele - sebe samo a jedničku. I Přednáška IV March 13, 2024 29/31 Prvočíslo Definice prvočísla Prvočíslo je číslo, které má právě 2 dělitele - sebe samo a jedničku • Prvočíselnost řešíme pouze u celých kladných čísel. • Jediné sudé prvočíslo je 2. • 1 není prvočíslo. Jan Bôhm (RECETOX) Přednáška IV □ S> - = March 13, 2024 29/31 Číselné soustavy Desítková soustava | Zápis 408849 znamená 408849 = 4 • 105 + 0 • 104 + 8 • 103 + 8- 102 + 4 • 101 + 9 • 10° Dvojková soustava | Zápis IIOIO2 znamená IIOIO2 = 1 • 24 + 1 • 23 + 0 • 22 + 1- 21 + 0 • 2° = 26io Jan Bôhm (RECETOX) Jak převádět mezi soustavami? Převod mezi soustavami Pokud chci číslo x (např. 26) vyjádřit ve dvojkové soustavě, musím • Najít největší K takové, že 2K < x (tj. K = 4) o Pro všechna k G {K, K — 1,..., 1, 0}: • Spočítat c = x 2^ (to je nová cifra, c = 26 24 = 1) • Zmenšit x <(— x mod c (v tomto příkladu x 10) Pozn: -r- značí celočíselné dělení. k 4 3 2 1 0 2k 16 8 4 2 1 x 26 10 2 2 0 c 1 1 0 1 0 Jan Bôhm (RECETOX) Přednáška IV □ i5P - - March 13, 2024 31/31