Search
Naprogramujte výpočet hodnoty čísla Pi pomocí metody Monte Carlo (viz výklad na cvičení).
import math error = abs(moje_pi - math.pi)
Řešení
Vytvořte program, který vypíše zadaný měsíc zadaného roku společně s jeho jménem.
number = 9 print("%2d " % (number)) # lehce zastaraly # nebo print("{:2d} ".format(number)) # doporuceny zpusob # nebo print(f"{number:2d} ") # od Python 3.6
Příklad:
Vstup
Zadejte rok: 2017 Zadejte mesic: 9
Výstup
ZARI 2017 PO UT ST CT PA SO NE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Vytvořte program, který vypíše na konzoli Pascalův trojúhelník.
Různé algoritmy výpočtu najdete např. na Wikipedii.
Zadejte vysku Pascalova trojuhelniku: 5
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
Pokuste se výstup naformátovat tak, aby čísla tvořili obvyklou pyramidu!
Zadejte vysku Pascalova trojuhelniku: 7
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1
Napište program, který provede skalární součin dvou vektorů. Na vstupu uživatel zadá rozměr obou vektorů. Program pak náhodně vygeneruje dva vektory specifikované délky a spočítá jejich skalární součin. Program oba vygenerované vektory i výsledek jejich skalárního součinu potom vytiskne.
Příklad
[a1 a2 a3 … an]. [b1 b2 b3 … bn] = a1.b1 + a2.b2 + a3.b3 + … an.bn
Zadejte dimenzi (rozmer) vektoru: 2
[0.25 2].[3 7.5] = 15.75
Návrh na rozšíření
Program namísto vygenerování dvou náhodných vektorů umožní uživateli postupně načíst oba vektory a případně ošetří jejich různou délku.
Napište program, který sečte po prvcích dvě matice. Na vstupu zadá uživatel velikost obou matic. Program poté náhodně vygeneruje a sečte matice. Po ukončení výpočtu program vytiskne obě vygenerované matice a výslednou matici.
Zadejte dimenzi (rozmer) matic: 2
3 1.5 2.1 1 + 0.5 2 1 1.3 = 3.5 3.5 3.1 2.3
následně upravte program tak aby provedl:
Poté spojte předchozí operace a vytvořte kalkulačku, které předáte velikost matice a operaci.
Zadejte dimenzi matic: 2 Zadejte operaci (+/-/*): -
4 3.5 1.5 12.5 - 3 1.2 1 11 = 1 2.3 0.5 1.5
Zadejte dimenzi matic: 2 Zadejte operaci (+/-/*): *
4 * 0.5 1.2 11 10.5 = 2 4.8 44 42
Upravte program tak, aby jednotlivé matice mohl uživatel přímo zadat.
Již známe funkci sort(), která seřadí prvky seznamu vzestupně podle velikosti. Napište nyní program/funkci, který pomocí algoritmu Selection sort (viz výklad na cvičení) daný seznam seřadí bez použití funkce sort().
Funkce je uzavřený, znovupoužitelný blok kódu, který umí splnit nějaký konkrétní úkol. Definovanou funkci pak můžeme kdekoliv v našem programu zavolat jedním příkazem. Po jejím zavolání se funkce celá provede a splní námi požadovaný úkol.
Definice funkcí se zejména vyplatí v případech, kdy máme v našem programu nějaký dílčí úlok, který během programu potřebujeme vykonávat na více různých místech. Když řešení takového dílčího úkolu budeme mít definované jako samostatnou funkci, velmi nám to ušetří psaní a zpřehlední kód.
Každá funkce má název, kterým funkci budeme později volat. Dále musíme definovat, jestli do funkce budou vstupovat nějaké vstupní paramtery (vstupní proměnné), se kterými bude funkce pracovat. Vstupních proměnných může být libovolně mnoho a mohou být libovolných datových typů. Následuje samotný funkční kód. Pokud má funkce vracet nějakou návratovou hodnotu, použijeme pro její vrácení klíčové slovo return.
V jazyce Python obecně vypadá definice funkce takto:
def nazev_funkce(vstupni_parametry): kod, který ma byt vykonan
Zde je příklad definice funkce say_hello bez vstupních parametrů a bez návratové hodnoty, která má vytisknout pozdrav.
def say_hello(): print("Dobry den, vitejte u vykladu funkci.")
A zde je příklad definice funkce get_max, která hledá větší ze dvou čísel. Vstupními parametry jsou dvě čísla k posouzení a návratovou hodnotou nalezené maximum.
def get_max(a, b): if (a > b): return a else: return b
Nadefinované funkce pak můžeme kdekoliv ve svém programu zavolat. Příklad programu, kde využijeme uvedené funkce může vypadat třeba takto:
say_hello() number1 = 5 number2 = 3 print("Zkusime najit vetsi cislo z dvojice cisel " + str(number1) + " a " + str(number2) + ".") bigger_number = get_max(number1, number2) print("Vetsi je cislo " + str(bigger_number) + ".")
Takový program bude mít následující výstup:
Dobry den, vitejte u vykladu funkci. Zkusime najit vetsi cislo z dvojice cisel 5 a 3. Vetsi je cislo 5.
Definujte dvě metody sloužící k výpočtu a posouzení hodnoty BMI (body mass index).
Vytvořte knihovnu funkcí jednoduché pokladny. V modulu pokladna.py definujte následující funkce:
Nyní ve stejné složce, kde máte uložený soubor pokladna.py vytvořte jiný soubor, importujte si do něj svou knihovnu pokladních funkcí a vyzkoušejte, že je můžete volat i v jiném souboru, než kde jsou definovány. Import můžeme provést dvojím způsobem.
Jedna možnost je importovat celý modul se všemi funkcemi v něm definovanými. Když provedeme import tímto způsobem a budeme z něj chtít zavolat nějakou funkci, provedeme to obecně příkazem ve tvaru nazev_modulu.nazev_funkce(parametry).
V našem programu to může vypadat takto:
import pokladna bill = pokladna.read_input() ...
Druhá možnost je importovat pouze nějakou konkrétní funkci, ne celý modul. V tomto případě při volání funkce neuvádíme název modulu, v němž je funkce definována. Tento postup by vypadal následovně:
from pokladna import read_input bill = read_input() ...
Vytvořte funkci, které je předán jako parametr seznam čísel a dva číselné indexy. Funkce v seznamu prohodí čísla na zadaných pozicích.
cisla = [5, 7, 6, 8] prohod(cisla, 1, 2) print(cisla) # vypise [5, 6, 7, 8]
Vytvořte funkci, které je předán jako parametr seznam čísel. Funkce v seznamu nalezne nejmensi cislo a vrati jeho index (pozici).
cisla = [7, 6, 5, 8] i = nejmensi(cisla) x = cisla[i] print(x) # vypise cislo 5
Použijte funkci nejmensi() z předchozího úkolu a vytvorte funkci serad(), které je předán jako parametr seznam čísel. Funkce čísla v seznamu seřadí od nejmenšího po největší.
(L. Peter Deutsch)´
Nejjednodušší případ rekurzivní funkce, je taková funkce, která musí k vypočítání výsledku zavolat sebe sama. Například:
def odecitej(x): return odecitej(x-1)
Funkce odecitej má ale jednu malou vadu. Nikdy nevrátí výsledek. Proto je potřeba mít v každé rekurzivní funkci takzvaný “base case”, který ukončí rekurzivní volání.
def odecitej_do_nuly(x): if x == 0: # base case return 0 # konec rekurze return odecitej_do_nuly(x-1)
Funkce odecitej_do_nuly má stále ještě jeden problém. Odhalíte jaký?
Vytvořte pole obsahujicí deset náhodných čísel pomocí rekurze.
Naimplementujte funkci faktorial(x), která vypočítá x! pomocí rekurze.
Napiště funkci fibonacci(x), která vrátí x-tý prvek fibonacciho posloupnosti.
Vytvořte matici (2D pole) 5×5.
matice = [ # matice 2x2 [1,2], [3,4], ] matice[1][1] # vrati 4 matice[0][1] # vrati 2
Vyplňte tuto matici čísly od 24 do 0 funkcí jméno_funkce(matice), a poté vypište matici na standartní výstup.
[[24, 23, 22, 21, 20], [19, 18, 17, 16, 15], [14, 13, 12, 11, 10], [9, 8, 7, 6, 5], [4, 3, 2, 1, 0]]
Máte šachové pole 9×9 a figurku jezdce na pozici (4,4). Označte všechny políčka šachovnice, na které jezdec může doskákat do tří tahů, hodnotou 1 a ostatní políčka hodnotou nula. Vypiště šachovnici na standartní výstup.
Výstup programu:
001010100 010101010 100111001 011101110 101010101 011101110 100111001 010101010 001010100
Stav sachovnice po jednotlivých tazích (namísto 0 a 1 jsou zde kvůli názornosti použité mezery a znak 'X'):
# prvni tah # druhy tah # treti tah | | | | | X X X | | | | | | X X X X | | | | X X | |X XXX X| | | | X X | | XXX XXX | | X | -> | X | -> |X X X X X| | | | X X | | XXX XXX | | | | X X | |X XXX X| | | | | | X X X X | | | | | | X X X |
Choose you favourite Computer Quote