Čitelný kód, if-else E 3011 Jan Bóhm RECETOX March 8, 2023 Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 8, 2023 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 8, 2023 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 • 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 a nemíchat mezery a tabulátor! Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 8, 2023 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 8, 2023 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 8, 2023 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 8, 2023 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 8, 2023 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 8, 2023 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 8, 2023 10/31 Co nás dnes čeká O If-else Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 8, 2023 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 8, 2023 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 8, 2023 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 Co nás dnes čeká Q Mysteries & errors Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 8, 2023 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 March 8, 2023 15/3 Mysteries & errors #1 numberl = 1 number2 = -1 if numberl = number2: print("Equal") else : print("Not equal") □ g - = March 8, 2023 16/31 Mysteries & errors #2 n = 1 while n > 0: n /= 10 print("DOME") Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 8, 2023 17/31 Mysteries & errors #3 for n in range (6) : if n °/o 2 == 0: print("n is even") Jan Bohm (RECETOX) March 8, 2023 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 8, 2023 19/31 Mysteries & errors #5 1 number1 = "4" 2 number2 = "-3" 3 number3 = numberl + number2 4 5 print(number3) □ g - = March 8, 2023 20/31 Mysteries & errors #6 1 print("Red") 2 print("Green") Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 8, 2023 21/31 Mysteries & errors #7 number = "408849" result = 0 for n in number: result += number print(result) □ g - = March 8, 2023 22/31 Mysteries & errors #8 condl = "True" cond2 = "False" if condl and cond2: print("Red") else : print("Green") □ g - = Přednáška IV March 8, 2023 23/31 Mysteries & errors #9 x = 10 def plusOne () : x += 1 print(x) plusOne () □ g - = Přednáška IV March 8, 2023 24/31 Mysteries & errors #10 x = 10 def dummy () : x = 5 return(x) dummy () print(x) □ g - = Přednáška IV March 8, 2023 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 8, 2023 5 -f) c\(y 26/31 Mysteries & errors #12 animal = cat if animal == "dog": print("Good boi") Jan Bóhm (RECETOX) Přednáška IV □ S> - = March 8, 2023 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 8, 2023 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 8, 2023 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 8, 2023 31/31