Algoritmizace Příklad: Sestavte algoritmus na přípravu jahodového mléčného koktejlu. Řešení: •
Formulace problému Připrav jahodový mléčný koktejl.
•
Analýza úlohy Vstupní údaje: 60 dkg jahod, 20 dkg cukr moučky, 0,5 l mléka, mixér Výstupní údaje: jahodový mléčný koktejl Analýza: aplikovat správný postup
•
Sestavení algoritmu
•
Slovní popis: Očistěte jahody Dejte jahody do mixéru a zasypte cukrem Přidejte mléko a rozmixuj Před podáním zchlaďte
Příklady k zamyšlení: •
Napište algoritmus výroby piva
•
Napište algoritmus přechodu křižovatky, řízené semaforem
•
Napište algoritmus na přípravu čaje
•
Napište algoritmus na naplnění velké kádě vodou, máte-li k dispozici konev a zdroj vody.
•
Napište algoritmus na přechod z jedné místnosti do druhé (dveře jsou zavřeny, mají zámek a vy máte svazek klíčů)
Příklad: Pomocí vývojového diagramu zapište proces zatloukání hřebíků. Řešení: Nejprve si sestavíme klasický popis celého problému: •
Formulace problému Zatlučte hřebík do desky.
•
Analýza úlohy Vstupní údaje: kladivo, hřebík, deska Výstupní údaje: hřebík zatlučen do desky Analýza: tlouct tak dlouho, dokud není hřebík zatlučen až po hlavičku
•
Sestavení algoritmu
•
Slovní popis: Vezměte kladivo a hřebík Přiložte hřebík k desce Uhoďte kladivem na hlavičku Je hřebík zatlučen? ANO - pokračujte bodem 5 NE - vraťte se na bod 3 Ukončete činnost a odložte kladivo
A zakreslíme vývojový diagram:
Příklady k zamyšlení: •
Zakreslete vývojový digram výroby lihu
•
Zakreslete vývojový digram na přechod křižovatkou, řízené semaforem
•
Zakreslete vývojový digram na přípravu čaje
•
Zakreslete vývojový digram na naplnění velké kádě vodou, máte-li k dispozici konev a zdroj vody.
•
Zakreslete vývojový digram na přechod z jedné místnosti do druhé (dveře jsou zavřeny, mají zámek a vy máte svazek klíčů)
Příklad: Sestavte vývojový diagram pro výpočet obsahu čtverce. Řešení: •
Formulace problému: Vypočítejte obsah čtverce
•
Analýza úlohy Vstupní údaje: strana a Výstupní údaje: obsah S Analýza: S = a^2
•
Sestavení algoritmu
•
Slovní popis: Načtěte a Je a > 0? ANO - pokračujte bodem 3 NE – pokračujte na bod 5 S = a^2 Napište S a jděte na 6 Napiš: Délka strany musí být kladná Konec
Příklady k zamyšlení: •
Sestavte algoritmus na součet čísel A, B, C, D a vytisknutí jejich součtu
•
Sestavte algoritmus, který určí, kolik ze tří čísel A, B, C je kladných
•
Sestavte algoritmus, který určí objem koule ze zadaného poloměru
•
Sestavte algoritmus, který určí, kolik ze tří čísel A, B, C je sudých
Moduly Příklad: K čemu slouží modul string? Řešení: Pro operaci s řetězci (převod mezi čísly a řetězci, dělení a spojování řetězců, převod na malá a velká písmena).
Příklad: Vytvořte svůj vlastní modul. Řešení: >>> import muj_modul >>> import muj_modul as jmeno Příklad: Naimportujte modul math a vypište Ludolfovo a Eulerovo číslo. Řešení: >>> import math >>> math.factorial(6) 720 >>> math.pi 3.141592653589793 >>> from math import pi, factorial >>> pi 3.141592653589793
Příklady k zamyšlení: •
Určete faktoriál čísla 10
•
Určete hodnotu funkce sin(π)
•
Co znamená import *?
Datové typy Příklad: Zjistěte, zda jsou následující čísla celá: 1+3j; 3.12364; 1. Řešení: Použijeme funkci type: >>> x = 1 + 3j >>> type(x)
>>> y = 3.12364 >>> type(y) >>> z = 1 >>> type(z)
Pomocí funkce type jsme zjistili, že celé číslo je 1 (class 'int'). První číslo je komplexní a druhé je reálné.
Příklad: Následující čísla převeďte na reálná nebo naopak na celá: 155; 3.1444; 3.6; -0.1. Řešení: Požijeme funkci float pro převod z celých čísel na reálná a funkci int pro převod z reálných čísel na celá (pozor, tato funkce pouze „osekává“ a nezaokrouhluje). >>> float(155) 155.0 >>> int(3.1444) 3 >>> int(3.6) 3 >>> int(-0.1) 0
Příklad: Zaokrouhlete číslo 5.5369 na celé číslo a následně na 3 desetinná místa. Řešení: Použijeme funkci round (číslo, počet desetinných míst): >>> round(5.5369) 6 >>> round(5.5369,3) 5.537 𝟏𝟎
𝟔
Příklad: Upravte zlomky 𝟐𝟎 a 𝟗 do základního tvaru. Řešení: Použijeme funkci Fraction, kterou si naimportujeme z knihovny fractions: >>> import fractions >>> fractions.Fraction(10,20) Fraction(1, 2) >>> fractions.Fraction(6,9) Fraction(2, 3) 𝟏𝟎
𝟑
Příklad: Mezi zlomky 𝟐𝟎 𝒂 𝟓 proveďte operaci násobení, odčítání, sčítání i dělení. Řešení: >>> import fractions
>>> fractions.Fraction(10,20) * fractions.Fraction(3,5) Fraction(3, 10) >>> fractions.Fraction(10,20) - fractions.Fraction(3,5) Fraction(-1, 10) >>> fractions.Fraction(10,20) + fractions.Fraction(3,5) Fraction(11, 10) >>> fractions.Fraction(10,20) / fractions.Fraction(3,5) Fraction(5, 6)
Příklad: Vytvořte matici M a zjistěte její počet prvků, dimenzi a rozměr. 𝑨=(
𝟎 𝟑
−𝟏 𝟑 ) 𝟒 𝟎
Řešení: Naimportujeme knihovnu numpy a využijeme funkce array, size a shape: >>> M = numpy.array([[0, -1, 3], [3, 4, 0]]) >>> M.size 6 >>> M.ndim 2 >>> M.shape (2, 3) Příklady k zamyšlení: •
Zjistěte, která z následujících čísel jsou reálná: 1; 1.5; ½; 10; 10+5j; 1.001; -25
•
Zjistěte, která z následujících čísel jsou komplexní: 1; 1.5; ½; 10; 10+5j; 1.001; -25
•
Následující čísla převeďte na reálná nebo naopak na celá: 155.123; 31444; -3.6; -0
•
Zaokrouhlete číslo 25.369846 na celé číslo, na 5 desetinných míst a na 8 desetinných míst
•
Upravte následující zlomky na jejich základní tvar: 10 , − 18 a
•
Mezi zlomky 36 𝑎
• •
35
5
36 8
3
55 8
.
proveďte operaci násobení, odčítání, sčítání i dělení
Pomocí funkce zeros vytvořte nulovou matici o rozměru 4x4 Určete rozměr matice B: 5 6 8 𝐵 = (6 −5 9) 4 −5 3
Příklad: Mezi slova – jednicka dvojka - v řetězci vložte slovo nasleduje. Řešení: >>> print('jednicka {} dvojka'.format('nasleduje'))
jednicka nasleduje dvojka nebo: >>> print('jednicka {x} dvojka {y}'.format(x='nasleduje', y=3)) jednicka nasleduje dvojka 3
Příklad: Máme vytvořen následující seznam: nakup = [5, 'rohlíků', 1.5, 'kilo jablek', 6, 'lahví moštu']. Vypište první, pátou, šestou, první až čtvrtou a všechny položky seznamu Řešení: Nadefinované seznamy jsou vlastně pole s indexováním od nuly (zleva):
indexace zleva
0 5
1 rohlíků
2 1.5
3 kilo jablek
4 6
5 lahví moštu
Lze také (mnohdy výhodně u velkých polí) využít záporných indexů – jinak řečeno položka úplně vpravo má polohu -1
indexace zprava
-6 5
-5 rohlíků
-4 1.5
-3 kilo jablek
-2 6
-1 lahví moštu
Potřebujeme-li vypsat pouze část seznamu (vytvořit podseznam), tak nám k tomu slouží dvojtečka (:). Tato funkce vypisuje položky od prvního čísla do předposledního
indexace zleva indexace zprava
0 5 -6
1 rohlíků -5
2 1.5 -4
3 kilo jablek -3
4 6 -2
5 lahví moštu -1
>>> nakup = [5, 'rohlíků', 1.5, 'kilo jablek', 6, 'lahví moštu'] >>> nakup[0] 5 >>> nakup[4] 5 >>> nakup[-1] 'lahví moštu' >>> nakup[0:4] [5, 'rohlíků', 1.5, 'kilo jablek'] >>> nakup[:] [5, 'rohlíků', 1.5, 'kilo jablek', 6, 'lahví moštu']
Příklad: Máme vytvořen následující seznam: nakup = [5, 'rohlíků', 1.5, 'kilo jablek', 6, 'lahví moštu']. Zapomněli jsme do něj vložit první položku (přidej na pozici 0) a poslední položku (přidej položku nakonec). Naším úkolem je napravit tuto chybu. A poté nově vytvořené položky smažte. Řešení: Využijeme funkci insert (pozice, položka) a append(položka) – přidáme položku nakonec seznamu. Pro výmaz položek použijeme funkci del. >>> nakup.insert(0,'přidej na pozici 0') [‚přidej na pozici 0', 5, 'rohlíků', 1.5, 'kilo jablek', 6, 'lahví moštu'] >>> del nakup[0] [ 5, 'rohlíků', 1.5, 'kilo jablek', 6, 'lahví moštu'] >>> nakup.append('přidej položku nakonec') [5, 'rohlíků', 1.5, 'kilo jablek', 6, 'lahví moštu', 'přidej položku nakonec'] >>> del nakup[-1]
Příklad: Máme vytvořen následující seznam: nakup = [5, 'rohlíků', 1.5, 'kilo jablek', 6, 'lahví moštu']. Zjistěte, zda-li se v něm nachází 5 a kilo. Řešení: Využijeme funkci in: >>> nakup=[5, 'rohlíků', 1.5, 'kilo jablek', 6, 'lahví moštu'] >>> 5 in nakup True >>> 'kilo' in nakup False
Příklady k zamyšlení:
Mezi slova – pět sedm - v řetězci vložte slovo šest Interpretujte následující zápisy: print('jednicka {:.1f} dvojka {:.3e} {:s}'.format(1.32653, 36.1545, 'pokus')) print('jednicka %.1f dvojka %.3e %s'%(1.32653, 36.1545, 'pokus')) Vytvořte si svůj vlastní seznam o dvanácti položkách a vypište desátou, druhou, třetí až pátou a všechny položky daného seznamu. Poté přidejte na libovolnou pozici položky, které v následně smažte. Co znamená funkce in, sort, index? Aplikujte na Vašem vytvořeném seznamu. Jaký je rozdíl mezi ztotožnění seznamů a, b (a = b) a funkcí copy? Uveďte výhody (nevýhody) n-tic. Vytvořte svůj vlastní slovník.
Práce se soubory Příklad: Vytvořte jednoduchou konzolovou aplikaci, která dokáže sčítat a odčítat dvě čísla. Řešení: >>> print("Kalkulace\n") >>> první_číslo = int(input("Zadejte první číslo: ")) >>> druhé_číslo = int(input("Zadejte druhé číslo: ")) >>> print("Jejich součet je:", první_číslo + druhé_číslo) >>> print("Jejich rozdíl je:", první_číslo - druhé_číslo) >>> input("\nStiskněte libovolnou klávesu...")
Příklad: V pracovní složce Pythonu si vytvoříme soubor, který budeme chtít načíst do položky data. Jak toho docílíme? Řešení: >>> x=open('/prac_slozka/prac_soubor', 'r') >>> data=x.readlines() >>> x.close() Příklad: Co znamená následující kód? >>> with open('/prac_slozka/prac_soubor') as x: data=x.readlines()
Řešení: •
V tomto kódu se volá open(), ale nikde se v něm nevolá close(). Výhodou daného zápisu je, že když blok with skončí, Python automaticky zavolá close().
•
Python soubor uzavře nezávisle na tom, jak a kdy blok with skončí i za předpokladu konce, v důsledku neošetřené výjimky.
Příklad: Vytvořte příklad pro funkci safetxt a loadtxt. Řešení: >>> import numpy as np >>> v = np.array([1,2,3,4]) >>> np.savetxt('matice', v, fmt="%12.6G") >>> np.loadtxt(v) array([ 1., 2., 3., 4.])
Příklad: Vytvořte příklad pro funkci serializace. Řešení: >>> import pickle >>> obj1 = (None, 1, 2, 3) >>> obj2 = ['jedna', 'dva', 'atd.'] >>> x = open('/prac_slozka/prac_soubor', 'wb') >>> p = pickle.Pickler(x) >>> p.dump(obj1) >>> p.dump(obj2) >>> x.close()
Příklady k zamyšlení:
Vytvořte konzolovou aplikaci na násobení, dělení a umocňování dvou čísel K čemu slouží funkce open, read, write, tell, seek? Vymyslete praktický příklad jeho použití Vytvořte příklad pro funkci deserializace Naimportuje data ve formátu .csv a předveďte ukázku práce s nimi
Řízení pro smyčky Příklad: Zjistěte, zda-li je dané číslo sudé či liché. Řešení: Nejprve si zapíšeme celou úlohu pomocí vývojového diagramu:
A převedeme do programovacího jazyka:
Po spuštění tohoto programu si výsledek přečteme přes konzoli Win Pythonu:
Nyní nás mohou napadnout mnohá zdokonalení navrhnuté podmínky – zadávání čísla x uživatelem nebo napsání úlohy pouze pomocí jedné podmínky Díky funkci input může uživatel zadávat libovolné hodnoty: x = input("Zadej číslo: ") Jelikož input má defaultně nastaveno, že vstupem jsou stringy, tak je vhodné nadefinovat, že vstupem budou čísla: x = int(input("Zadej číslo: ")) Abychom mohli podmínku více zdokonalit, existuje ještě podmínka else:, což je realizace alternativního provedení.
Příklad: Určete, zda-li zadaná hodnota leží od (−∞, 5) nebo <5,100) či <100,∞). Řešení: Nejprve si zapíšeme celou úlohu pomocí vývojového diagramu:
Příklad: Určete, zda-li zadaná hodnota leží od (−∞, 5) nebo <5,100) či <100,∞) – pomocí vnořené podmínky if.. Řešení:
Příklad: Sestavte algoritmus pro výpočet obsahu čtverce. Řešení: Nejprve si zapíšeme celou úlohu pomocí vývojového diagramu:
Převod do programovacího jazyka:
Příklady k zamyšlení:
Zjistěte, zda-li je dané číslo kladné nebo záporné (pomocí if a if – else) Určete, zda-li zadaná hodnota leží od (−∞, -1) nebo <-1,0> či (0,∞) Vytvořte algoritmus pro řešení kvadratické rovnice Vytvořte algoritmus pro určení, které ze dvou zadaných čísel je vyšší, případně jestli se rovnají Vytvořte algoritmus pro výpočet objemu koule z poloměru. Vypište existenci řešení
Příklad: Pomocí cyklu for odstraňte všechna celá čísla ze seznamu. Řešení:
Příklad: Pomocí cyklu for vytvořte posloupnost čísel od 0 do 4 Řešení:
Příklad: Pomocí cyklu for vytvořte posloupnost čísel od 0 do -48 s krokem -12. Řešení:
Příklad: Pomocí cyklu for vytvořte abecední řadu. Řešení:
Příklady k zamyšlení:
Pomocí cyklu for odstraňte všechna reálná čísla ze seznamu Pomocí cyklu for odstraňte všechna slova ze seznamu Pomocí cyklu for Vytvořte posloupnost čísel od -4 do -15 Pomocí cyklu for vytvořte posloupnost čísel od -100 do 0 s krokem 10 K čemu slouží enumerate? Veďte konkrétní aplikaci.
Příklad: Pomocí cyklu while určete obsah čtverce. Řešení:
Příklad: Využijte příkaz break a určete prvočísla na intervalu <4,15) Řešení:
Příklady k zamyšlení:
Co se stane, když vynecháme z příkladu na prvočísla příkaz break? K čemu slouží příkaz continue a pass? Najděte prvočíslo, které je dělitelné sedmi a jakmile ho najdete, tak cyklus ukončete Zjistěte počet kladných čísel z deseti zadaných čísel Na jaké typy úloh byste použili kombinaci cyklů?
Objektově orientované programování Příklad: Zjistěte typ objektu "Python". Řešení: Využijeme funkci isinstance, která kontroluje typ objektu včetně dědičnosti: print(type("Python")) print isinstance(list(), list True Příklad: Uveďte příklad použití class Complex. Řešení: >>> class Complex: def __init__(self, realpart, imagpart): self.r = realpart self.i = imagpart >>> x = Complex(3.0, -4.5) >>> x.r, x.i (3.0, -4.5) Poznámka - slovíčko self je v podstatě povinný přídavek. Je to jedna z vlastností, jak se odlišuje metoda od funkce.
Příklad: Uveďte příklad zapouzdření a vytvořte instanci třídy. Řešení: >>> class Auta: def brzda (self): print ("zpomaluje") def plyn (self): print ("zrychluje") Využitím klíčového slova class byl vytvořen název třídy (Auta). Poté se definovaly názvy metod (brzda, plyn) a kód metody (zpomaluje, zrychluje). Instance třídy: >>> auto1 = Auta()
# auto1 je instancí třídy Auta
>>> auto2 = Auta()
# auto2 je instancí třídy Auta
>>> auto1.brzda() zpomaluje >>> auto2.plyn() zrychluje Takto vzniklé objekty, v našem případě auto1 a auto2, pak mohou využívat metody třídy a atributy, takže nemusíme definovat funkci brzda a plyn pro každé auto samostatně. Příklad: Uveďte příklad dědičnosti na předchozím příkladu. Řešení: >>> class Moderní_Auta (Auta): def klakson (self): print ("troubí") >>> auto3 = Moderní_Auta() >>> auto3.brzda() zpomaluje >>> auto3.plyn() zrychluje >>> auto3.klakson() troubí
Příklad: Uveďte příklad polymorfismu na předchozím příkladu. Řešení: >>> class Veteráni (Moderní_Auta): def klakson (self): print ("upadl")
>>> auto4 = Veteráni() >>> auto4.klakson() upadl >>> auto3.klakson() troubí
Příklady k zamyšlení:
Zjistěte typ objektu 5 Uveďte další příklady zapouzdření, vytvořte instanci třídy, dědičnost a polymorfismu
Grafické rozhraní Příklad: Vytvořte okno s větou. Řešení:
Příklad: Vytvořte okno se třemi větami s různými fonty, barvou písma a pozadí. Řešení:
Příklad: Vytvořte okno s krátkou zprávou. Řešení:
Příklad: Vytvořte okno s dlouhou větou, tak abychom si ji mohli přečíst celou (Scrollbar). Řešení:
Příklad: Vytvořte tlačítko, po jehož odkliknutí se uživateli objeví text – Kliknul jsi!. Řešení:
Příklad: Pomocí Radiobutton vytvořte otázku s vícero možnostmi odpovědí. Řešení:
Příklad: Pomocí Checkbutton vytvořte otázku s vícero možnostmi odpovědí. Řešení:
Příklady k zamyšlení:
Jak vytvoříte větu a vzkazy v oknech Vytvořte libovolné tlačítko s funkcí i bez Jaký je rozdíl mezi radiobutton a checkbutton?
Numerika
𝟐
𝟐
Příklad: Vypočítejte hodnotu určitého integrálu : ∫𝟎 𝒙𝟐 𝒆−𝒙 𝒅𝒙 Řešení:
nebo
Příklad: Vypočítejte hodnotu určitého integrálu:
Řešení:
Příklad: Odvoďte obsah kruhu o poloměru r = 6. Řešení:
Příklad: Mějme matematické kyvadlo, jehož pohyb lze popsat lineární diferenciální rovnicí druhého řádu: g
ÿ = − l y. Řešení této rovnice analyticky je poměrné snadné: g
y(t) = ya cos (√ l t). Pokusme se nyní vyřešit nás problém numericky. Řešení:
Příklad: Najděte kořen rovnice 6x = 2cos(x). Řešení:
Příklad: Řešte následující soustavu rovnic: 𝟒𝒙𝟏 𝟑𝒙𝟏
−𝒙𝟐 +𝟔𝒙𝟐
𝒙𝟏
−𝟒𝒙𝟐
−𝟐𝒙𝟑 = − 𝟑 +𝟐𝒙𝟑 = −𝟓 −𝟔𝒙𝟑
= −𝟏
Řešení:
Příklady k zamyšlení:
Vypočítejte libovonný integrál s nekonečnými mezemi Pomocí trojného integrálu vypočítejte hmotnost koule o poloměru 5 a hustotě y+5x Proveďte lineární, kvadratickou a interpolaci vámi zvolených dat (graficky znázorněte) Najděte kořen rovnice x+5=6xsin(x) (využijte i funkci root, jaký má tato funkce význam) Řešte následující soustavu rovnic: 7x1 −x1 4x1
−2x2 +6x2 −4x2
+4x3 = −7 −4x3 = 15 +10x3 = −38