Search
Aritmetická posloupnost je posloupnost čísel, která má stálý rozdíl sousední členů. Tomuto rozdílu říkáme diference. Například posloupnost
0 5 10 15 20 25 30 ...
má diferenci 5.
Zadejte diferenci: 7 0 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 112 119 126 133
Zadejte prvni clen posloupnosti: 14 Zadejte diferenci: 7 14 21 28 35 42 49 56 63 70 77 84 91 98 105 112 119 126 133 140 147
Řešení
end=“”
" "
print("abc",end=" ")
Napište program, který načtěte hodnotu N a vypíše jednotkovou matici.
N
Vzorový výstup pro N=3:
N=3
1, 0, 0 0, 1, 0 0, 0, 1
Napište program, který načte hodnotu N a vypíše následující obrazce (pro N=5):
N=5
1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1
1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Napište program, který vykreslí tabulku malé násobilky, tj. tabulku všech vzájemných násobků čísel 1 až 10 (dodržte zarovnání v jednotlivých sloupcích):
1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81
a
5
print("{:5d}".format(a))
Dojde k nahrazení složených závorek ({}) hodnotou a, která bude naformátována podle sekvence :5d. Význam sekcence je:
{}
:5d
:
d
Formátovaný výpis je možné kombinovat i s vlastním koncem řádků, takže desetinné číslo x vypíšeme s přesností na 2 desetinná místa bez zalomení konce řádku takto:
x
2
print("{:.2f}".format(x),end="")
V některých případech dopředu nevíme, kolikrát budeme muset nějaký příkaz nebo nějaké příkazy vykonat, a nemůžeme proto použít for-cyklus, který má pevně daný počet opakování. Pro tyto případy můžeme použít while cyklus, který opakuje příkazy ve svém těle dokud je splněna nějaká podmínka.
Použití while cyklu si ukážeme na jednoduchém příkladu, kde od uživatele čteme čísla, které následně vypisujeme, ale jen do té doby, než uživatel zadá nulu, kdy cyklus skončí:
x = -1 while x != 0: x = int(input("Zadej cislo: ")) print("Zadane cislo je: " + str(x))
Napište program, který bude číst čísla ze vstupu, dokud uživatel nezadá nulu. Poté vypíše jejich součet.
Upravete tento program tak, aby také vypsal:
Přečtěte čísla A a B. Vypište nejmenší číslo, které je dělitelné B a je větší než A.
Přečtěte na vstupu jedno celé číslo a vypište jeho binární zápis.
20
10100
52
110100
$1 \cdot 2^4 + 0 \cdot 2^3 + 1 \cdot 2^2 + 0 \cdot 2^1 + 0 \cdot 2^0 = 16 + 4 = 20$
Další rozsáhlejší vodítka k pochopení zde (cz).
Načtěte celé číslo ze standardního vstupu a vypište nejmenší prvočíslo, které je větší než zadané číslo.
Člověk si myslí číslo od 1 do 100 a počítač se jej snaží uhádnout. Může se ovšem zeptat pouze, jestli je hádané čílo větší než nějaká hodnota. Napiště program, který co nejrychleji uhádne toto číslo.
Vzorový průběh:
Myslete si cislo mezi 1 a 100 Je tvoje cislo vetsi nez 50 ? (y/n) n Je tvoje cislo vetsi nez 25 ? (y/n) y Je tvoje cislo vetsi nez 38 ? (y/n) y Je tvoje cislo vetsi nez 44 ? (y/n) n Je tvoje cislo vetsi nez 41 ? (y/n) y Je tvoje cislo vetsi nez 43 ? (y/n) n Je tvoje cislo vetsi nez 42 ? (y/n) n Vase cislo je 42
Někdy se nám může stát, že nevíme, kolik dat bude náš program pokračovat (například, kolik čísel uživatel zadá) a tudíž nemůžeme mít pro každé načítané číslo vlastní proměnnou. Pro podobné případy, kdy potřebujeme mít mnoho porměnných stejného druhu, používáme seznam (anglicky list), který je uspořádanou skupinou více hodnot, kterým říkáme prvky seznamu.
Seznam obsahující prvních 5 prvočísel (2, 3, 5, 7, 11) uložený v proměnné primes zapíšeme takto:
2, 3, 5, 7, 11
primes
primes = [2, 3, 5, 7, 11]
Seznam může mít libovolný počet prvků a může tedy být i prázdný. Prázdný seznam můžeme vytvořit pomocí hranatých závorek nebo pomocí list():
list()
l1 = [] l2 = list()
Pro zjištění prvku na i-té pozici (i-tém indexu) lze použít indexování.
i
primes[i]
Seznam je indexovaný od nuly (tedy první prvek má index 0).
Pokud prvek seznamu neexistuje, program skončí s chybou, je tedy důležité vědět, jak dlouhý seznam je. Pro zjištěný délky seznamu můžeme použít funkci len(), která vrátí počet prvků seznamu.
len()
velikost = len(seznam)
Specialitou Pythonu (a hrstky dalších programovacích jazyků) je možnost indexovat nejen od začátku seznamu, ale i od konce a to pomocí znaménka -:
-
primes[-1] # Posledni prvek primes[-2] # Predposledni prvek
Specialitou Pythonu (a hrstky dalších programovacích jazyků) je takzvaný slicing, tedy přístup k celému intervalu indexů.
Chceme-li získat seznam obsahující dvou prvcích s indexy 2 a 3 ze seznamu primes použijeme následující příkaz indexaci ve tvaru [a:b], která bere prvky s indexy v intervalu $<a; b)$. Například:
[a:b]
primes = [2, 3, 5, 7, 11] some_primes = primes[2:4] print(some_primes)
vypíše [5, 7].
[5, 7]
Slicing funguje podobně jako range, tedy seznam a tedy podobon jako u range funguje i zde takzvanný step (krok), tedy kód:
primes = [2, 3, 5, 7, 11] arr = primes[2:6:2] print(arr)
vypíše [5, 11] prvky s indexy 2 a 4.
[5, 11]
Chceme-li na konec seznamu arr vložit prvek x, použijeme arr.append(x).
arr
arr.append(x)
Kupříkladu:
arr = [1,2,4,8] x = 16 arr.append(x) print(arr)
vypíše [1,2,4,8,16].
[1,2,4,8,16]
Chceme-li přepsat hodnotu prvku v seznamu arr na i-tém místě na hodnotu x, použijeme arr[i]=x.
arr[i]=x
arr = [1,2,4,8] x = 3 arr[2] = x print(x)
vypíše [1,2,3,8].
[1,2,3,8]
[ ]
Cheme-li přidat hodnotu x na pozici i a zbytek seznamu arr na obou stranách zachovat, použijeme arr.insert(i, x).
arr.insert(i, x)
Kupříkadu:
arr = [1,2,3] x = 4 arr.insert(1,4) print(arr)
vypíše [1, 4, 2, 3].
[1, 4, 2, 3]
Python umožňuje spojování seznamů dvěma způsoby. Chceme-li přidat na konec seznamu (arr1) postupně všechny prvky druhého seznamu (arr2) použijeme funkce extend (arr1.extend(arr2)).
arr1
arr2
extend
arr1.extend(arr2)
Například:
arr1 = [1,2,3] arr2 = [4,5,6] arr1.extend(arr2) print(arr1, arr2)
vypíše [1,2,3,4,5,6] [4,5,6].
[1,2,3,4,5,6] [4,5,6]
Chceme-li spojit stejné seznamy do nového seznamu arr3, použijeme operátor +.
arr3
+
arr1 = [1,2,3] arr2 = [4,5,6] arr3 = arr1 + arr2 print(arr1, arr2, arr3)
vypíše [1, 2, 3] [4, 5, 6] [1, 2, 3, 4, 5, 6].
[1, 2, 3] [4, 5, 6] [1, 2, 3, 4, 5, 6]
Cheme-li odstranit poslední prvek ze seznamu arr a jeho hodnotu uložit do proměnné x, použijeme x = arr.pop().
x = arr.pop()
arr = [1,2,3] x = arr.pop() print(x) print(arr)
vypíše nejprve x a pak [1,2].
[1,2]
Chceme-li odstranit prvek ze seznamu arr na konkrétním indexu i a uložit ho do proměnné x, použijeme x = arr.pop(i).
x = arr.pop(i)
Cheme-li uložit počet prvků hodnoty x v seznamu arr do proměnné cnt, použijeme cnt=arr.count(x).
cnt
cnt=arr.count(x)
arr = [1,2,3,2,2] cnt = arr.count(4) print(cnt) cnt = arr.count(2) print(cnt)
vypíše nejprve 0 a pak 3.
0
3
Cheme-li seřadit hodnoty v seznamu arr od největší po nejmenší, použijeme arr.sort().
arr.sort()
Obdobně můžeme použít srt = sorted(arr), která uloží seřazený seznam arr do proměnné srt, aniž by měnila pořadí původního seznamu arr.
srt = sorted(arr)
srt
arr = [2,2,6,0,9,11] arr.sort() print(arr)
vypíše [0, 2, 2, 6, 9, 11].
[0, 2, 2, 6, 9, 11]
Chceme-li obrátit pořadí prvků v seznamu arr, použijeme arr.reverse().
arr.reverse()
arr = [1,2,3,4] arr.reverse() print(arr)
vypíše [4, 3, 2, 1].
[4, 3, 2, 1]
Obdobně můžeme použít rev = reversed(arr), která uloží seznam arr v opačném pořadí do proměnné rev, aniž by měnila pořadí původního seznamu arr.
rev = reversed(arr)
rev
N-tice (anglicky tuple) je datová struktura podobná seznamu. N-tice se od seznamů liší tím, že ji nelze měnit (nelze přepisovat její hodnoty, ani volat append(), insert(), apod). N-tices se používají v případech, kdy data nepotřebujeme a nechceme měnit. N-tici vytvoříte pomocí kulatých závorek:
append()
insert()
dny = ("pondeli", "utery", "streda", "ctvrtek", "patek", "sobota", "nedele")
Ze seznam můžeme vytvořit novou n-tici použitím funkce tuple().
tuple()
Z n-tice můžeme vytvořit nový seznam použitím funkce list().
Napište program, který načte pevně daný počet čísel (třeba 5), uloží je do seznanu a následně je vypíše.
Napište program, který načte pevně daný počet čísel (třeba 5), uloží je do seznamu, setřídí vzestupně a následně je vypíše.
Napište program, který načte pevně daný počet čísel (třeba 5), uloží je do seznamu, setřídí sestupně a následně je vypíše.
Napište program, který načte pevně daný počet čísel (třeba 5), uloží je do seznamu a najde minimum a maximum, které následně vypíše.
Napište program, který načte pevně daný počet čísel (třeba 5), najde mezi nimi dvě čísla taková, že jejich rozdíl je největší možný, tato čísla i jejich rozdíl vypíše.
Napište program, který načte pevně daný počet čísel (třeba 5), najde mezi nimi dvě čísla taková, že jejich rozdíl (ve smyslu abs. hodnoty) je nejmenší možný, tato čísla i jejich rozdíl vypíše.
Napište program, který načte pevně daný počet čísel (třeba 5) a najde medián wikipedie (cz), který následě vypíše. Případně upravte program tak, aby zvládal počítat medián i pro sekvence sudé délky.
Napište program, který načte pevně daný počet čísel (třeba 5), uloží je do seznamu, obrátí jejich pořadí a čísla vypíše. Nepoužívejte funkci reverse(). Případně upravte program tak, aby zvládal obracet i sekvence sudé délky.
reverse()
Napište program, který načte pevně daný počet čísel (třeba 5), seřadí je podle velikosti a následně vypíše. Nepoužívejte funkci sort(). Případně upravte program tak, aby zvládal obrace i sekvence sudé délky.
sort()
Vraťte se k tomuto úkolu a zkuste využít nově získanou znalost.
V programování se často setkávání s tím, že náš program musí dělat nějakou specifickou věc (například číst ze souboru, práci s časem, načítat obrázky, vykreslovat průběhy funkcí), kterou už až určitě někdo před námi řešil, můžeme si usnadnit práci tím, že využijeme knihoven, které tuto činnost implementují.
V pythonu se namísto označení knihovna, používá označení modul. S moduly jsme se již setkali, například jsme využili modul math.
math
Chceme-li modul využívat, musíme o tom python informovat tím, že na začátek našeho skriptu napíšeme import jmeno_modulu. Například:
import jmeno_modulu
import math
Chceme-li následně využívat funkce nebo proměnné (konstanty) modulu, používá se ., tedy jmeno_modulu.jmeno_funkce() a jmeno_modulu.jmeno_promenne. Například pro $\pi$ z modulu math:
.
jmeno_modulu.jmeno_funkce()
jmeno_modulu.jmeno_promenne
math.pi
Někdy v programu potřebujeme generovat náhodná čísla (například simulace nějakého náhodného jevu). Právě k tomuto účelu slouží modul random, z nějž si ukážeme dvě funkce na následujících příkladech.
random
Jako v případě libovolného modulu, musíme nejdříve modul importovat: import random, pak můžeme používat jeho funkce jako random.funkce_kterou_chceme().
import random
random.funkce_kterou_chceme()
Cheme-li vygenerovat celá čísla v danném intervalu $<a, b>$ použijeme funkci randint(a, b), jako ku příkladu k simulaci hodu kostkou:
randint(a, b)
# Program hraci kostka import random x = random.randint(1, 6) print(x)
Chceme-li vygenerovat desetinné číslo, použijte funkci random(). Ta vygeneruje číslo z intervalu <0, 1).
random()
import random x = random.random() print(x)
Napište program, který vygeneruje 10 náhodných čísel v rozsahu 1 až 100. Program spočítá počet sudých, lichých čísel, spočítá průměrnou hodnotu všech čísel. Nakonec program nalezne největší a druhé největší číslo. Všechna tato čísla vypíše do příkazové řádky
Jednou z možností, jak můžeme odhadnout hodnotu čísla $\pi$, je následující rovnice:
$ \pi = 4 \left( 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \frac{1}{9} - \frac{1}{11} + \frac{1}{13} - \frac{1}{15} + \dots \right)$
Napište program, který podle této rovnice odhadne hodnotu $\pi$ (třeba na 4 desetinná místa) a na závěr vypíše počet iteracích nutných k dosažení této přesnosti.
import math ref_pi = math.pi
Naprogramujte výpočet hodnoty čísla $\pi$ pomocí metody Monte Carlo. Na vstupu uživatel zadá, na kolik desetinných míst by chtěl $\pi$ spočítat.
Navíc po každých sto iteracích uložte současný mezivýsledek (hodnotu $\pi$) do seznamu. Seznam po doběhnutí výpočtu vytiskněte, abyste demonstrovali postupné zpřesňování výsledku. Pokud bude mít seznam více než sto prvků, vytiskněte pouze prvních sto.
import math error = abs(moje_pi - math.pi)
Počítač vygeneruje náhodné číslo od 1 do 100 a vy ho musíte uhádnout. Když odpovíte špatně, počítač vám prozradí, jestli je vygenerované čílo větší nebo menší. Když uhádnete, program končí a pogratuluje vám.
import random to_be_guessed = random.randint(0,100)
Zkus uhadnout moje cislo: 50 Moje cislo je mensi. Zkus uhadnout moje cislo: 20 Moje cislo je vetsi. Zkus uhadnout moje cislo: 30 Moje cislo je vetsi. Zkus uhadnout moje cislo: 40 Moje cislo je vetsi. Zkus uhadnout moje cislo: 45 Uhadl jsi :-) 45
Napište program, který simuluje N hodů dvojicí kostek a vypište četnosti pro součet čísel na obou kostkách. Pro N=100 může výpis vypadat například takto:
N=100
2: ** 3: **** 4: ************ 5: *********** 6: ***************** 7: ************************ 8: ******** 9: ******** 10: ***** 11: ******* 12: **