Funkce, řetězce, moduly

Podobné dokumenty
SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Programovací jazyk Pascal

IB111 Úvod do programování skrze Python Přednáška 7

Funkce, podmíněný příkaz if-else, příkaz cyklu for

Konečný automat. Jan Kybic.

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Programování v Pythonu

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

ALGORITMIZACE A PROGRAMOVÁNÍ

Algoritmizace a programování

8 Třídy, objekty, metody, předávání argumentů metod

Algoritmizace a programování

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

Přednáška 3. Rekurze 1

1. Téma 03 - Rozhodování

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

5 Přehled operátorů, příkazy, přetypování

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Úvod do programování. Lekce 1

Programování v Pythonu

Paměť počítače. alg2 1

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

2 Datové typy v jazyce C

NPRG030 Programování I, 2015/16 1 / :25:32

Jazyk C# a platforma.net

Kurz LSL skriptování. Shiny Iceberg 2009

Sada 1 - PHP. 03. Proměnné, konstanty

Rekurze a rychlé třídění

IB015 Neimperativní programování. Časová složitost, Typové třídy, Moduly. Jiří Barnat Libor Škarvada

7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd

IB111 Základy programování Radek Pelánek

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

IAJCE Přednáška č. 7. řízení semaforu na křižovatce = přepínání červená/oranžová/zelená

Algoritmizace a programování

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

dovolují dělení velkých úloh na menší = dekompozice

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 23, 2016

IB111 Základy programování Radek Pelánek

Paradigmata programování 1

Úvod do programovacích jazyků (Java)

Zápis programu v jazyce C#

VISUAL BASIC. Práce se soubory

Programy a algoritmy pracující s čísly. IB111 Úvod do programování

Programování v Pythonu

Programovací jazyk Haskell

VISUAL BASIC. Přehled témat

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

Definice uživatelského typu. Uživatelem definované typy. Součinové datové typy. Součtové datové typy. FLP - Uživatelem definované typy

Dynamické programování

6. Příkazy a řídící struktury v Javě

Návrh aplikace. Založeno na 9. kapitole knihy J. M. Zelle: Python Programming: An Introduction to Computer Science IB111

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

Programování v jazyce JavaScript

Programování. Psaní čistého kódu. Martin Urza

Algoritmizace a programování

Přednáška 8. Proměnné. Psaní a ladění skriptů. Parametry skriptu. Vstup a výstup. Konfigurační soubory shellu. Úvod do Operačních Systémů Přednáška 8

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Algoritmizace a programování

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

JavaScript 101. "Trocha života do statických stránek"

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

Řídicí struktury. alg3 1

Programovací í jazyk Haskell

PODOBÁ SE JAZYKU C S NĚKTERÝMI OMEZENÍMI GLOBÁLNÍ PROMĚNNÉ. NSWI162: Sémantika programů 2

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Basic256 - úvod do programování Příklady. ing. petr polách

Úvod do programovacích jazyků (Java)

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

Pole / Arrays. Jan Kybic.

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Chyby a výjimky. Chyba. Odkud se chyby berou? Kdo chyby opravuje? Co můžete dělat jako programátor? Dvě hlavní metody práce s chybami.

Algoritmizace a programování

- jak udělat konstantu long int: L long velka = 78L;

Martin Hejtmánek hejtmmar

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Sada 1 - Základy programování

Algoritmizace prostorových úloh

Python 3 základní ukázky kódu

Operační systémy. Cvičení 4: Programování v C pod Unixem

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Funkcionální programování. Kristýna Kaslová

PODPROGRAMY PROCEDURY A FUNKCE

Lokální definice (1) plocha-kruhu

Automatické testování softwaru. Testujte svůj kód! Předpoklady: Příklad: sum_digits() Možnost 1: Zkusíme funkci použít v konzoli Pythonu.

Rozklad problému na podproblémy

Programování v Pythonu

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Úvod do programování. Úvod do programování. Mar n Podloucký

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Transkript:

Funkce, řetězce, moduly Jan Kybic http://cmp.felk.cvut.cz/~kybic kybic@fel.cvut.cz 2016 2018 1 / 48

Funkce Moduly Řetězce Náhodná čísla 2 / 48

Prostředky pro strukturování kódu Bloky kódu (oddělené odsazením), např: for i in range(10): print("budu se pilně učit.") Programy = soubory jméno.py 3 / 48

Prostředky pro strukturování kódu Bloky kódu (oddělené odsazením), např: for i in range(10): print("budu se pilně učit.") Programy = soubory jméno.py Funkce 3 / 48

Funkce Příklady existujících funkcí: >>> max(2,3) 3 >>> abs(-3.4) 3.4 >>> pow(2,3) 8 Funkce vrací hodnotu vypočítanou ze vstupních argumentů. čistá funkce (pure function) = výstup závisí pouze na vstupních parametrech, a to jednoznačně. 4 / 48

Matematické funkce Jsou k dispozici základní matematické funkce a konstanty >>> import math >>> math.sqrt(4.0) 2.0 >>> math.sin(30./180.*math.pi) 0.49999999999999994 >>> math.exp(1.0) 2.718281828459045 >>> math.log(math.e) 1.0 math je jméno modulu vysvětĺıme později. 5 / 48

Definice uživatelských funkcí Příklad: x x 2, druhá mocnina def square(x): return x*x >>> square(3) 9 6 / 48

Definice uživatelských funkcí Příklad: x x 2, druhá mocnina def square(x): return x*x >>> square(3) 9 Obecně: def name( parameters ): <code_block> return(value) návrat do nadřazené funkce 6 / 48

Příklad: Délka odvěsny Pythagorova věta: c = a 2 + b 2 def hypotenuse(a,b): return math.sqrt(square(a)+square(b)) >>> hypotenuse(3,4) 5.0 7 / 48

Příklad: Délka odvěsny Pythagorova věta: c = a 2 + b 2 def hypotenuse(a,b): return math.sqrt(square(a)+square(b)) >>> hypotenuse(3,4) 5.0 Složitější funkce volá jednodušší - skládání funkcí. 7 / 48

Příklad: Délka odvěsny Pythagorova věta: c = a 2 + b 2 def hypotenuse(a,b): return math.sqrt(square(a)+square(b)) >>> hypotenuse(3,4) 5.0 Složitější funkce volá jednodušší - skládání funkcí. Tato funkce už existuje... >>> math.hypot(3,4) 5.0 7 / 48

Příklad 2: Opakování textu Napište program, který vypíše text písně Happy birthday pro danou osobu, jejíž jméno dostane jako argument. Terminal> python3 happy_birthday.py Mary Happy birthday to you! Happy birthday to you! Happy birthday to you! Happy birthday, dear Mary! Happy birthday to you! 8 / 48

Příklad 2: Opakování textu řešení happy_birthday.py # -*- coding: utf-8 -*-# # Vytiskne text pisne Happy Birthday pro danou osobu import sys def print_happy(): print("happy birthday to you!") def print_happy_name(name): print("happy birthday, dear %s!" % name) # Zde začíná samotný program print_happy() print_happy() print_happy() print_happy_name(sys.argv[1]) print_happy() 9 / 48

Příklad 3: Exponenciální funkce Ověřte, že pro dostatečně velké n: e x Problém rozděĺıme na podproblémy: Výpočet faktoriálu Výpočet součtů A n (x) Tisk chyby pro různá n Tisk chyby pro různá x n x i i! i=0 }{{} A n(x) 10 / 48

Faktoriál def factorial(n): prod=1 for i in range(2,n+1): prod*=i return prod 11 / 48

Faktoriál def factorial(n): prod=1 for i in range(2,n+1): prod*=i return prod Hned to vyzkoušíme 5! =? >>> factorial(5) 120 11 / 48

Součet řady A n (x) = n i=0 x i i! def series_sum(x,n): sum=0. for i in range(n+1): sum+=pow(x,i)/factorial(i) return sum 12 / 48

Součet řady A n (x) = n i=0 x i i! def series_sum(x,n): sum=0. for i in range(n+1): sum+=pow(x,i)/factorial(i) return sum Vyzkoušíme na e 1 = e =? 12 / 48

Součet řady A n (x) = n i=0 x i i! def series_sum(x,n): sum=0. for i in range(n+1): sum+=pow(x,i)/factorial(i) return sum Vyzkoušíme na e 1 = e =? >>> math.exp(1.0) 2.718281828459045 >>> series_sum(1.0,10) 2.7182818011463845 12 / 48

Vyhodnocení přesnosti pro různá n def print_accuracy(x): exact=math.exp(x) print("x=%10g exact=%10g" % (x,exact)) for n in [5,10,100]: # smyčka přes seznam approx=series_sum(x,n) relerr=abs(exact-approx)/exact print(" n=%5d approx=%10g relerr=%10g" % (n,approx,relerr)) 13 / 48

>>> print_accuracy(1.0) x= 1 exact= 2.71828 n= 5 approx= 2.71667 relerr=0.000594185 n= 10 approx= 2.71828 relerr=1.00478e-08 n= 100 approx= 2.71828 relerr=1.63371e-16 >>> print_accuracy(3.0) x= 3 exact= 20.0855 n= 5 approx= 18.4 relerr= 0.0839179 n= 10 approx= 20.0797 relerr=0.000292337 n= 100 approx= 20.0855 relerr=3.53758e-16 >>> print_accuracy(-0.7) x= -0.7 exact= 0.496585 n= 5 approx= 0.496437 relerr=0.000298815 n= 10 approx= 0.496585 relerr=9.42331e-10 n= 100 approx= 0.496585 relerr=1.11786e-16 Celý program je v souboru exponencial.py. 14 / 48

Postup vyhodnocování (flow of execution) Python zpracuje definice funkcí (ale neprovádí je) začne vykonávat hlavní program zavolá print_accuracy (opakovaně) print_accuracy volá series_sum (opakovaně) series_sum volá factorial (opakovaně) factorial vrací výsledek series_sum vrací výsledek print_accuracy končí hlavní program končí úrovně odsazení = hloubka v grafu volání (call graph) 15 / 48

Otázky na doma Ve funkci series_sum počítejte sestupně od n do 1. Co pozorujete? Zkuste napsat kód, aby byl efektivnější, bez umocňování a bez funkce faktoriál. 16 / 48

Počet parametrů def f(a,b,c): <code block> Počet parametrů je dán hlavičkou funkce. Existují i funkce bez parametrů Nemůže být čistá, není-li konstantní 17 / 48

Počet parametrů def f(a,b,c): <code block> Počet parametrů je dán hlavičkou funkce. Existují i funkce bez parametrů Nemůže být čistá, není-li konstantní Existují i funkce s proměnným počtem parametrů: print, max,... 17 / 48

Návratová hodnota Příkazů return může být několik: def isprime(n): p=2 while p*p<=n: if n % p == 0: return False p+=1 return True 18 / 48

Návratová hodnota Příkazů return může být několik: def isprime(n): p=2 while p*p<=n: if n % p == 0: return False p+=1 return True >>> isprime(16) False >>> isprime(17) True 18 / 48

Funkce nevracející výsledek (void functions) def f(x): y=2*x 19 / 48

Funkce nevracející výsledek (void functions) def f(x): y=2*x >>> f(3) None = nic lze psát i explicitně: return None 19 / 48

Více návratových hodnot def f(x): return x,2*x,3*x a,b,c=f(10) Výsledek a=10,b=20,c=30. 20 / 48

Více návratových hodnot def f(x): return x,2*x,3*x a,b,c=f(10) Výsledek a=10,b=20,c=30. (x,2*x,3*x) je objekt typu n-tice (tuple). 20 / 48

Rozsah platnosti proměnných (variable scope) Proměnné definované v hlavním programu (mimo funkce) jsou globální, viditelné všude uvnitř funkce jsou lokální, viditelné pouze uvnitř této funkce lokální proměnná se stejným jménem zastíní proměnnou globální 21 / 48

Rozsah platnosti proměnných (2) b=3 # je globální def f(x): a=2*x # a je lokální print(a,b) 22 / 48

Rozsah platnosti proměnných (2) b=3 # je globální def f(x): a=2*x # a je lokální print(a,b) >>> f(1) 2 3 >>> print(b) 3 ale print(a) vede na chybu NameError: name 'a' is not defined 22 / 48

Omezte viditelnost proměnných na nejnutnější část kódu. Omezte použití globálních proměnných. 23 / 48

Vedlejší efekty Kromě vrácení hodnoty může funkce i ovlivnit stav (prostředí): 1. Výpis na obrazovku, zápis do souboru... 2. Změnu stavu proměnných volajícího Už známe print, print_accuracy: Funkce není čistá (pure), má vedlejší efekty. Je lepší vedlejší efekty omezit pouze na operace vstupu a výstupu. 24 / 48

Funkce jako argument funkce vyššího řádu (high order functions) def twice(f,x): return f(f(x)) def square(x): return x*x print(twice(square,10)) 25 / 48

Funkce jako argument funkce vyššího řádu (high order functions) def twice(f,x): return f(f(x)) def square(x): return x*x print(twice(square,10)) 10000 25 / 48

Funkce jako argument (2) # volá funkci f() n -krát def repeatntimes(f,n): for i in range(n): f() def ahoj(): print("ahoj") repeatntimes(ahoj,4) 26 / 48

Funkce jako argument (2) # volá funkci f() n -krát def repeatntimes(f,n): for i in range(n): f() def ahoj(): print("ahoj") repeatntimes(ahoj,4) Ahoj Ahoj Ahoj Ahoj 26 / 48

Anonymní funkce lambda notace Funkci lze definovat přímo v místě volání (inline): # aplikuje f(f(f(...f(x)..) n -krát def iteratentimes(f,n,x): for i in range(n): x=f(x) return x print(iteratentimes(lambda x : 1. + 1./x,100,1.)) 27 / 48

Anonymní funkce lambda notace Funkci lze definovat přímo v místě volání (inline): # aplikuje f(f(f(...f(x)..) n -krát def iteratentimes(f,n,x): for i in range(n): x=f(x) return x print(iteratentimes(lambda x : 1. + 1./x,100,1.)) 1.618033988749895 27 / 48

Anonymní funkce lambda notace Funkci lze definovat přímo v místě volání (inline): # aplikuje f(f(f(...f(x)..) n -krát def iteratentimes(f,n,x): for i in range(n): x=f(x) return x print(iteratentimes(lambda x : 1. + 1./x,100,1.)) 1.618033988749895 Toto číslo φ = ( 1 + 5 ) /2 se nazývá zlatý řez. 27 / 48

Anonymní funkce lambda notace Funkci lze definovat přímo v místě volání (inline): # aplikuje f(f(f(...f(x)..) n -krát def iteratentimes(f,n,x): for i in range(n): x=f(x) return x print(iteratentimes(lambda x : 1. + 1./x,100,1.)) 1.618033988749895 Funkcionální programování = čisté funkce, funkce vyššího řádu, jednorázové přiřazení. 27 / 48

Funkce shrnutí Pojmenovaná posloupnost příkazů, Má vstupní argumenty (nemusí) Vrací hodnotu (nemusí) Matematická/čistá funkce = Zobrazení vstupních argumentů na výstupy 28 / 48

Příklad: Kvadratická rovnice Řešení rovnice je ax 2 + bx + c = 0 x 1,2 = b ± b 2 4ac 2a Napište funkci, která pro zadaná a,b,c vrátí reálná řešení x 1,x 2, pokud existují. Pokud neexistují, vrátí None. 29 / 48

Řešení kvadratické rovnice ax 2 + bx + c = 0 def solve_quadratic(a,b,c): d=b*b-4*a*c if d>=0.: ds=math.sqrt(d) return (-b-ds)/(2*a),(-b+ds)/(2*a) else: return None 30 / 48

Řešení kvadratické rovnice ax 2 + bx + c = 0 def solve_quadratic(a,b,c): d=b*b-4*a*c if d>=0.: ds=math.sqrt(d) return (-b-ds)/(2*a),(-b+ds)/(2*a) else: return None Kontrola vyhodnocením ax 2 + bx + c def eval_quadratic(a,b,c,x): return c+(b+a*x)*x 30 / 48

Vyzkoušíme a=1. b=-3. c=2. x1,x2=solve_quadratic(a,b,c) print("x1=",x1,"x2=",x2) print("residuál pro x1 = ",eval_quadratic(a,b,c,x1)) print("residuál pro x2 = ",eval_quadratic(a,b,c,x2)) print(solve_quadratic(1.,0.,1.)) Kód je v souboru quadratic.py 31 / 48

Vyzkoušíme a=1. b=-3. c=2. x1,x2=solve_quadratic(a,b,c) print("x1=",x1,"x2=",x2) print("residuál pro x1 = ",eval_quadratic(a,b,c,x1)) print("residuál pro x2 = ",eval_quadratic(a,b,c,x2)) print(solve_quadratic(1.,0.,1.)) Kód je v souboru quadratic.py Terminal> python3 quadratic.py x1= 1.0 x2= 2.0 Residuál pro x1 = 0.0 Residuál pro x2 = 0.0 None 31 / 48

Funkce Moduly Řetězce Náhodná čísla 32 / 48

Moduly (Modules) Modul obsahuje tématicky související funkce. Modul = soubor.py Proč používat moduly: Program ve více souborech. Sdílení kódu mezi programy (znovupoužitelnost). Definice rozhraní (API), skrytí implementačních detailů. Odstranění konfliktů jmen funkcí. 33 / 48

Moduly jak je použít (klient modulu) 1. Zpřístupnění modulu soubor v aktuálním adresáři soubor v systémových adresářích známých Pythonu 2. Import modulu: import math import sys 3. Použití kvalifikovaného jména (tečková notace): math.cos, sys.argv 34 / 48

Moduly jak je použít (klient modulu) 1. Zpřístupnění modulu soubor v aktuálním adresáři soubor v systémových adresářích známých Pythonu 2. Import modulu: import math import sys 3. Použití kvalifikovaného jména (tečková notace): math.cos, sys.argv Existuje způsob jak oznámit Pythonu, kde moduly hledat. Existuje způsob jak se kvalifikovaným jménům vyhnout. 34 / 48

Moduly jak je psát Každý.py soubor lze importovat. Tím se vykonají všechny příkazy v souboru. 35 / 48

Moduly jak je psát Každý.py soubor lze importovat. Tím se vykonají všechny příkazy v souboru. >>> import quadratic x1= 1.0 x2= 2.0 Residuál pro x1 = 0.0 Residuál pro x2 = 0.0 None 35 / 48

Moduly jak je psát (2) Odstraníme globální kód Testovací kód do zvláštních funkcí Demonstrační kód do funkce main() 36 / 48

Moduly jak je psát (2) Odstraníme globální kód Testovací kód do zvláštních funkcí Demonstrační kód do funkce main() Zavoláme main() pokud je soubor volán jako skript, nikoliv pomocí import. if name == " main ": main() 36 / 48

Moduly jak je psát (3) Modularizovaná verze quadratic.py je v quadsolve.py Soubor quadsolve.py lze používat jako modul >>> import quadsolve >>> quadsolve.solve_quadratic(1.,-3.,2.) (1.0, 2.0) a lze ho spustit i samostatně: Terminal> python3 quadsolve.py Řešíme kvadratickou rovnici x^2-3x+2=0 x1= 1.0 x2= 2.0 37 / 48

Strukturovaný kód Dobrý kód dlouhá sekvence příkazů. Kód má být hierarchicky strukturován krátké sekvence příkazů (kódu) řešící dobře definovanou část úlohy jsou sdružovány do větších celků ty slouží jako stavební kameny pro složitější a větší podúlohy na vyšší úrovni atd. podobně sdružujeme i datové struktury Nástroje pro strukturu bloky, funkce, moduly 38 / 48

Strukturovaný kód Dobrý kód dlouhá sekvence příkazů. Kód má být hierarchicky strukturován krátké sekvence příkazů (kódu) řešící dobře definovanou část úlohy jsou sdružovány do větších celků ty slouží jako stavební kameny pro složitější a větší podúlohy na vyšší úrovni atd. podobně sdružujeme i datové struktury Nástroje pro strukturu bloky, funkce, moduly Do not Repeat Yourself neopakuj Pokud lze část kódu logicky oddělit, měla by být oddělena. 38 / 48

Výhody strukturovaného kódu přehlednost zkrácení kódu, úspora práce snadnost jednotlivých kroků znovupoužitelnost modifikovatelnost testovatelnost rychlost vývoje 39 / 48

Funkce Moduly Řetězce Náhodná čísla 40 / 48

Řetězce (znaků) Datové typy v Pythonu: Celá čísla (int / integer): 3, 8,... Reálná čísla (float / floating point number): 128., 11.5,... Logické hodnoty (bool / boolean): True, False,... Řetězce (str / string): "Ahoj!", Ahoj!,... 41 / 48

Řetězce (znaků) Datové typy v Pythonu: Celá čísla (int / integer): 3, 8,... Reálná čísla (float / floating point number): 128., 11.5,... Logické hodnoty (bool / boolean): True, False,... Řetězce (str / string): "Ahoj!", Ahoj!,... Všimněte si dvou možných oddělovačů řetězců. 41 / 48

Řetězec = složený typ Jednoduché typy: celé číslo, reálné číslo, logická hodnota, Nelze rozložit na podobjekty Složený typ: řetězec = posloupnost znaků 42 / 48

Řetězec = složený typ Jednoduché typy: celé číslo, reálné číslo, logická hodnota, Nelze rozložit na podobjekty Složený typ: řetězec = posloupnost znaků Příklad: >>> s= Ahoj lidi >>> s[0] A >>> s[1] h >>> len(s) 9 42 / 48

Řetězec = složený typ Jednoduché typy: celé číslo, reálné číslo, logická hodnota, Nelze rozložit na podobjekty Složený typ: řetězec = posloupnost znaků Příklad: >>> s= Ahoj lidi >>> s[0] A >>> s[1] h >>> len(s) 9 Pozice jsou číslované od 0. 42 / 48

Spojování řetězců a= Czech Technical University b= Prague c=a+ in +b Jaká je hodnota c? 43 / 48

Spojování řetězců a= Czech Technical University b= Prague c=a+ in +b Jaká je hodnota c? >>> c Czech Technical University in Prague Spojení řetězců může být pomalé. 43 / 48

Spojování řetězců a= Czech Technical University b= Prague c=a+ in +b Jaká je hodnota c? >>> c Czech Technical University in Prague Spojení řetězců může být pomalé. Další vlastnosti řetězců Python nemá zvláštní typ pro znaky. Řetězce v Python jsou neměnné (immutable). 43 / 48

Funkce Moduly Řetězce Náhodná čísla 44 / 48

Náhodná čísla Generování náhodných celých čísel mezi 0 a n 1: random.randrange(0,n) >>> import random >>> n=10 >>> random.randrange(0,n) 7 >>> random.randrange(0,n) 8 >>> random.randrange(0,n) 6 45 / 48

Příklad: Simulace házení mincí def hod(): if random.randrange(2)==0: print("hlava") else: print("orel") for i in range(5): hod() 46 / 48

Příklad: Simulace házení mincí def hod(): if random.randrange(2)==0: print("hlava") else: print("orel") for i in range(5): hod() Orel Orel Hlava Orel Hlava 46 / 48

Příklad: Průměr diskrétní náhodné proměnné Vybíráme náhodně čísla x i {1, 2,..., 10}. Jaký bude jejich průměr 1 N N i=1 x i pro velké N? N=10000 s=0. for i in range(n): s+=random.randrange(1,11) print("average=",s/n) 47 / 48

Příklad: Průměr diskrétní náhodné proměnné Vybíráme náhodně čísla x i {1, 2,..., 10}. Jaký bude jejich průměr 1 N N i=1 x i pro velké N? N=10000 s=0. for i in range(n): s+=random.randrange(1,11) print("average=",s/n) average= 5.5113 47 / 48

Funkce Moduly Řetězce Náhodná čísla 48 / 48