Cvičení č. 5 a č. 6 rozšířené o poznámky ze cvičení a řešení některých příkladů (ZS 2024/25)¶
V minulém díle jste viděli...¶
Data, se kterými pracuje počítač, jsou vždy zakódována v binární soustavě, bez ohledu na to, v jaké soustavě nebo multimediální reprezentaci jsou zobrazena uživateli na výstupu nebo vstupu.
Základní aritmetické typů v jazyku Python jsou bool
, int
, float
a complex
.
Kromě booleovských konstant True
a False
existuje také speciální hodnota None
, která má svůj vlastní typ.
Čísla můžeme zadávat v desítkové, dvojkové, osmičkové nebo šestnáctkové soustavě:
print(11)
print(0o11)
print(0x11)
print(0b11)
11 9 17 3
S číselnými hodnotami můžeme provádět běžné aritmetické operace pomocí operátorů +
, -
, *
, /
, //
, %
a **
.
Také jsou k dispozici funkce abs
, min
, max
a můžeme importovat modul math
pro zpřístupnění matematických konstant a funkcí:
import math
print("Číslo π je přibližně", math.pi)
print("Hodnota cos(π) je ", math.cos(math.pi))
Číslo π je přibližně 3.141592653589793 Hodnota cos(π) je -1.0
# vyzkoušejte si debugeer (ikonka s broukem) a dívejte se, jak se hodnota proměnné mění,
# podívejte se, jak se změní obsah paměti při volání import (předchozí buňka)
x = 0
x += 4
Komentáře v jazyku Python¶
Důležitým prvkem programovacích jazyků, který však nemá vliv na vykonávání kódu, jsou komentáře. Komentáře ve zdrojovém kódu programu slouží programátorům k bližšímu vysvětlení příkazu nebo bloku příkazů, které se v programu vyskytují, a umožňují tak program učinit pro lidi pochopitelnějším. Na rozdíl od ostatních prvků jazyka Python nejsou komentáře vázány žádnými syntaktickými pravidly – interpret je zcela ignoruje, pro něj je komentář ekvivalentem mezery: kam se smí vložit mezera, tam se smí vložit komentář.
V jazyku Python komentáře začínají znakem #
a končí na konci řádku:
# první komentář
a = 1
b = 2 # druhý komentář
c = 3 # třetí komentář
Pokud je komentář delší, typicky pokud komentuje několik příkazů společně, můžeme jej rozdělit na několik řádků. Takové blokové komentáře je běžné psát před kód, který komentují:
# Zde nastavíme poloměr kruhu, spočítáme jeho obvod,
# a výslednou hodnotu vypíšeme pomocí funkce print.
r = 1.5
obvod = 2 * math.pi * r
print("Obvod kruhu je", obvod)
Obvod kruhu je 9.42477796076938
"""
Komentář pomocí víceřádkového
textového řetězce
"""
r = 1.5
obvod = 2 * math.pi * r
print("Obvod kruhu je", obvod)
Obvod kruhu je 9.42477796076938
Strukturování programu: podmínky a cykly¶
Potřebujeme-li se v programu rozhodnout, jak dále řešit zadanou úlohu, používáme podmíněný příkaz, který vyhodnotí zadanou podmínku a na základě obdrženého výsledku se rozhodne, které příkazy bude provádět dál. Dalším velmi častým prvkem pro strukturování programu jsou cykly, které umožňují provádět určité příkazy opakovaně.
Podmíněný příkaz¶
Podmíněný příkaz začíná klíčovým slovem if
, za nímž následuje podmínka a dvojtečka (znak :
).
Podmínku podmíněného příkazu může tvořit libovolný booleovský výraz (resp. libovolný výraz, který lze převést na typ bool
) a tělo podmíněného příkazu je tvořeno blokem příkazů, které se mají provést v případě, je-li podmínka splněna:
a = -1
if a > 0:
print("číslo je kladné")
print("číslo se rovná", a)
print("vždy")
vždy
# Podmíněný příkaz
vek = 20
cena = 200
kategorie = "plna cena"
if vek < 18:
kategorie = "sleva"
cena = 100
print("Cena vstupenky", cena, "Kč. Kategorie: ", kategorie)
Cena vstupenky 200 Kč. Kategorie: plna cena
# Větev else
vek = 40
skupinova_sleva = False
if vek < 18:
kategorie = "sleva"
cena = 100
else:
cena = 200
kategorie = "plna cena"
print("Cena vstupenky", cena, " Kč. Kategorie: ", kategorie)
Cena vstupenky 200 Kč. Kategorie: plna cena
# Podmínka může být složitější: použijeme operátory and, or, not
# Operátory pro porovnávání: ==, !=, >, <, >=, <=
vek = 40
skupinova_sleva = False
if vek < 18 or vek >= 65 or skupinova_sleva:
kategorie = "sleva"
cena = 100
else:
cena = 200
kategorie = "plna cena"
print("Cena vstupenky", cena, "Kč. Kategorie: ", kategorie)
Cena vstupenky 200 Kč. Kategorie: plna cena
# Podmínky můžeme vnořovat do sebe:
vek = 40
skupinova_sleva = True
if vek < 18 or vek >= 65:
kategorie = "sleva"
cena = 100
else:
cena = 200
kategorie = "plna cena"
if skupinova_sleva:
cena *= 0.9
kategorie = "skupinova sleva"
print("Cena vstupenky", cena, "Kč. Kategorie: ", kategorie)
Cena vstupenky 180.0 Kč. Kategorie: skupinova sleva
# větve elif - výpočet spadne do první větve, kde podmínka platí
vek = 2
skupinova_sleva = True
if vek < 3:
kategorie = "dite"
cena = 0
elif vek < 18:
kategorie = "junior"
cena = 100
elif vek > 65:
kategorie = "senior"
cena = 50
else:
cena = 200
kategorie = "plna cena"
if skupinova_sleva:
cena *= 0.9
kategorie = "skupinova sleva"
print("Cena vstupenky", cena, " Kč. Kategorie: ", kategorie)
Cena vstupenky 0 Kč. Kategorie: dite
# jako podmínka může sloužit i výraz, jehož hodnota lze implicitně převést na bool:
if 67.6-7:
print("ano")
else:
print("ne")
ano
if 0.0:
print("ano")
else:
print("ne")
ne
if "h":
print("ano")
else:
print("ne")
ano
# čísla typu float neporovnáváme pomocí == a !=, ale lépe pomocí přibližného porovnání:
a = 0.3
b = 0.2 + 0.1
if a == b:
print("ano")
else:
print("ne")
ne
a = 0.3
b = 0.2 + 0.1
if abs(a - b) < 1e-9:
print("ano")
else:
print("ne")
ano
import math
a = 0.3
b = 0.2 + 0.1
if math.isclose(a,b):
print("ano")
else:
print("ne")
ano
# zřetězené porovnání:
x = 5
y = 3
if 2 < x < 10: # if 2 < x and x < 10:
print("ano")
ano
x = 5
y = 3
if x > 2 and x < 10 and 10 > y:
print("ano")
ano
# tatéž podmínka:
x = 5
y = 3
if 2 < x < 10 > y:
print("ano")
ano
Univerzální syntaktické pravidlo:
Ve všech případech, kde znak :
uvozuje nějaký blok příkazů, ať už jde o podmíněný příkaz, cyklus nebo definici nějakého objektu, musí být všechny příkazy, které do daného bloku patří, odsazeny stejným počtem mezer.
Běžně se používá konvence odsazování pomocí 4 mezer. Přesný počet mezer sice není určen syntaktickými pravidly jazyka, ale všichni se této konvence budeme držet. Také pozor na míchání znaků "mezera" (" "
, číslo 40 v ASCII) a "tabulátor" (" "
, reprezentován symbolem "\t"
, číslo 9 v ASCII).
Za jednoduchým podmíněným příkazem může následovat příkaz else
, který uvozuje blok příkazů, které se mají provést, pokud podmínka v předchozím příkazu if
není splněna:
a = 0
if a > 0:
print("číslo je kladné")
print("číslo se rovná", a)
else:
print("číslo není kladné")
print("číslo se rovná", a)
číslo není kladné číslo se rovná 0
Podmíněné příkazy lze samozřejmě vnořovat, přičemž je nutné dbát na správnou úroveň odsazení vnořených příkazů:
a = 0
if a > 0:
print("číslo je kladné")
print("číslo se rovná", a)
else:
if a == 0:
print("číslo se rovná 0")
else:
print("číslo není kladné")
print("číslo se rovná", a)
číslo se rovná 0
Mezi příkazy if
a else
spolu s jejich bloky příkazů může ještě vystupovat libovolný počet příkazů elif
(zkratka pro else
-if
), které umožňují provádět ověření dodatečné podmínky v případě, že žádná z předchozích podmínek nebyla splněna.
Předchozí příklad tedy můžeme zjednodušit takto:
a = 0
if a > 0:
print("číslo je kladné")
print("číslo se rovná", a)
elif a == 0:
print("číslo se rovná 0")
else:
print("číslo není kladné")
print("číslo se rovná", a)
číslo se rovná 0
Porovnávací operátory¶
V jazyku Python jsou k dispozici následující operátory pro porovnávání hodnot výrazů:
Operátor | Význam |
---|---|
== |
Rovnost dvou hodnot. Pozor: neplést s přiřazovacím operátorem = . |
!= |
Nerovnost dvou hodnot ($a \ne b$). |
< |
Ostře menší. |
> |
Ostře větší. |
<= |
Menší nebo rovno ($\le$). |
>= |
Větší nebo rovno ($\ge$). |
Jazyk Python dále umožňuje provádět zřetězené porovnávání.
Např. výraz x < y <= z > a
je ekvivalentní výrazu x < y and y <= z and z > a
.
Všechny operátory jsou k dispozici pro datové typy, kde uvedený význam má smysl (např. operátory <
, >
, <=
, >=
nejsou k dispozici pro komplexní čísla, kombinace číslo a textový řetězec, apod.) a jejich výsledek je booleovská hodnota True
nebo False
.
V podmíněných příkazech, kde je očekávána booleovská hodnota, je možné použít libovolný výraz, jehož hodnotu lze implicitně převést na typ bool
.
Převod se řídí těmito pravidly: None
→ False
, 0
→ False
, 0.0
→ False
, complex(0, 0)
→ False
, všechny ostatní číselné hodnoty → True
.
Příklady¶
- Sudé-liché. Napište program, který zjistí a vypíše, zda je zadané číslo sudé nebo liché.
# řešení příkladů je na konci dokumentu :)
- Je větší. Napište program, který zjistí a vypíše, které ze dvou zadaných čísel je větší.
- Je největší. Napište program, který zjistí a vypíše, které ze tří zadaných čísel je největší.
- Seřaď. Napište program, který vypíše tři zadaná čísla v pořadí od největšího po nejmenší.
- Trojúhelník. Napište program, který zjistí a vypíše, zda lze sestrojit trojúhelník zadaný pomocí tří délek stran.
- Test plnoletosti. Napište program, který se zeptá uživatele na věk a odpoví, zda je plnoletý.
Příkaz while
– cyklus se vstupní podmínkou¶
Příkaz while
je variantou cyklu, který umožňuje ověření libovolné podmínky.
Obecná syntaxe vypadá takto:
while nějaká_podmínka:
tělo_cyklu
...
K ověření podmínky dochází vždy před provedením příkazů z těla cyklu.
Interpretace chování příkazu while
tedy je: dokud platí podmínka, prováděj příkazy.
Příklad: následující program vypíše všechna čísla od 0 do 10 včetně:
# program vypíše všechna čísla od 0 do 10 včetně:
n = 0
while n <= 10:
print(n)
n += 1
0 1 2 3 4 5 6 7 8 9 10
# to samé, výpis na jeden řádek:
n = 0
while n <= 10:
print(n, end=" ")
n += 1
0 1 2 3 4 5 6 7 8 9 10
# program vypíše mocniny dvojky 2^0 ... 2^10:
n = 0
while n <= 10:
print(2**n, end=" ")
n += 1
# cykly a podmínky můžeme vnořovat:
# program vypíše jen sudá čísla z intervalu od 0 do 10 (včetně)
n = 0
while n <= 10:
if n % 2 == 0:
print(n, end=" ")
n += 1
0 2 4 6 8 10
# cyklus můžeme ukončit příkazem break:
n = 0
while n <= 10:
print(n, end=" ")
if n == 5:
break
n += 1
print("pokračuj")
0 1 2 3 4 5 pokračuj
# while True + break
while True:
s = input("je konec?")
if s == "ano":
break
print("pokračuj")
pokračuj
# continue:
n = 0
while n <= 5:
if n == 1:
n += 1
continue
print(n, end = " ")
n += 1
print("pokračuj")
0 2 3 4 5 pokračuj
# cyklus se neprovede ani jednou:
n = 0
while n > 0:
print(n, end=" ")
n += 1
print("konec")
konec
# program se může tzv. zacyklit (pokud podmínku neuděláme správně)
n = 0
while n >= 0:
#print(n, end=" ")
n += 1
# nekonečný cyklus ... CHYBA ... proces musíme ukončit
# součet čísel od 0 do 10:
n = 0
soucet = 0
while n <= 10:
#print(n, end=" ")
soucet += n
n += 1
print("soucet:", soucet)
# počet sudých čísel mezi 0 a 10:
n = 0
pocet = 0
while n <= 10:
if n % 2 == 0:
#print(n, end=" ")
pocet += 1
n += 1
print("pocet:", pocet)
Tip: Kliknutím na tlačítko pytutor v rozhraní JupyterLab se zobrazí grafická interpretace toho, co se v programu děje.
Příkaz for
– cyklus s parametrem¶
Příkaz while
je sice obecný cyklus (umožňuje ověřovat libovolnou podmínku), ale často je poměrně nešikovný, protože musíme sami zajistit správný přechod na následující iteraci.
Alternativní příkaz for
je užitečný v případech, kdy chceme opakovat příkazy pro předem známou sadu hodnot.
Obecná syntaxe příkazu for
vypadá takto:
for parametry_cyklu in zdroj:
tělo_cyklu
Parametr cyklu bývá většinou jen jeden. Může jich být i více, ale pak potřebujeme zdroj, který v každém kroku dodává příslušně velkou sadu hodnot.
Jako zdroj hodnot pro příkaz for
může sloužit mnoho různých objektů, např. kontejnery a datové struktury, se kterými se seznámíme později.
Dnes si ukážeme jen základní, ale velmi častý zdroj hodnot: funkci range
, která představuje posloupnost celých čísel v určitém rozmezí.
Chování funkce range
se liší podle počtu (celočíselných!) argumentů, které jí předáme:
- Zadáme-li jeden argument, zdroj představuje posloupnost celých čísel od nuly až po zadanou hodnotu, ale tu už ne. Zadáte-li proto jako argument nulu nebo nějaké záporné číslo, dostaneme prázdnou posloupnost. Následující program vypisuje čísla od 0 do 10 včetně:
# program vypíše všechna čísla od 0 do 10 včetně:
for n in range(11):
print(n, end = " ")
0 1 2 3 4 5 6 7 8 9 10
# udělej něco pětkrát:
for n in range(5):
print("ahoj")
ahoj ahoj ahoj ahoj ahoj
# program vypíše mocniny dvojky 2^0 ... 2^10
for n in range(11):
print(2**n, end = " ")
1 2 4 8 16 32 64 128 256 512 1024
# cykly a podmínky můžeme do sebe vnořovat:
# program vypíše jen sudá čísla z intervalu od 0 do 10 (včetně)
for n in range(11):
if n % 2 == 0:
print(n, end = " ")
0 2 4 6 8 10
# cykly a podmínky můžeme do sebe vnořovat:
# Tabulka s násobilkou
for i in range(11):
for j in range(11):
print(f"{i*j:3}", end = " ")
print("")
0 0 0 0 0 0 0 0 0 0 0 0 1 2 3 4 5 6 7 8 9 10 0 2 4 6 8 10 12 14 16 18 20 0 3 6 9 12 15 18 21 24 27 30 0 4 8 12 16 20 24 28 32 36 40 0 5 10 15 20 25 30 35 40 45 50 0 6 12 18 24 30 36 42 48 54 60 0 7 14 21 28 35 42 49 56 63 70 0 8 16 24 32 40 48 56 64 72 80 0 9 18 27 36 45 54 63 72 81 90 0 10 20 30 40 50 60 70 80 90 100
- Zadáme-li dva argumenty, zdroj představuje posloupnost celých čísel od hodnoty prvního argumentu po hodnotu druhého, ale hodnotu druhého už ne. Následující program vypisuje hodnoty od 7 do 10 včetně:
for n in range(7, 11):
print(n, end = " ")
7 8 9 10
# cyklus se neprovede ani jednou:
for n in range(11, 0):
print(n, end = " ")
for n in range(11, 11):
print(n, end = " ")
print("konec")
konec
- Zadáme-li tři argumenty, zdroj představuje posloupnost celých čísel od hodnoty prvního argumentu až po hodnotu druhého (jeho hodnotu už ne) s krokem zadaným ve třetím argumentu. Pro kladný krok bude posloupnost rostoucí, pro záporný bude klesající.
for n in range(-6, 11, 3):
print(n, end = " ")
-6 -3 0 3 6 9
for n in range(10, 0, -2):
print(n, end = " ")
10 8 6 4 2
Příklady¶
- Součet čísel pomocí for cyklu. Napište program, který sečte čísla od 1 do n (pomocí for cyklu).
# řešení příkladů je na konci dokumentu :)
Tip: Kliknutím na tlačítko pytutor v rozhraní JupyterLab se zobrazí grafická interpretace toho, co se v programu děje.
# i while cyklus
- Sudé-liché podruhé. Napište program, který bude pořád dokola žádat uživatele, aby zadal celé číslo, a poté vypíše, jestli je zadané číslo sudé nebo liché. Jakmile uživatel napíše "konec", tak program skončí.
- Načti a sečti čísla. Napište program, který postupně načítá čísla ze vstupu, dokud nepřijde prázdný řetězec
""
. Pak vypíše počet zadaných čísel a jejich součet.
# i počet
- Chci číslo z intervalu. Program-kecálek čte čísla od uživatele, dokud uživatel nezadá číslo z požadovaného intervalu. Pak mu poděkuje a vypíše počet neúspěšných pokusů.
- Posloupnost. Napište program, který vypíše prvních n členů následující posloupnosti: 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 ...
Podmíněný výraz¶
Pokud v programu potřebujeme spočítat nějakou hodnotu, která závisí na vyhodnocení nějaké podmínky, můžeme použít buď podmíněný příkaz:
if nějaká_podmínka:
hodnota = výraz1
else:
hodnota = výraz2
nebo můžeme použít podmíněný výraz, což je ternární operace ve tvaru:
hodnota = výraz1 if nějaká_podmínka else výraz2
Podmíněný výraz lze samozřejmě použít všude tam, kde je očekáván nějaký výraz. Může být tedy součástí komplikovanějších aritmetických výrazů a dokonce můžete psát vnořené podmíněné výrazy, čímž se ale značně zhoršuje přehlednost kódu.
vek = 67
if vek < 18:
print("nejsi plnolety")
else:
print("jsi plnolety")
jsi plnolety
# to samé, ale pomocí podmíněného výrazu:
vek = 67
print("nejsi plnolety") if vek < 18 else print("jsi plnolety")
jsi plnolety
import math
x = -46
if x >= 0:
o = math.sqrt(x)
else:
o = math.sqrt(-x)
print(o)
# to samé, ale pomocí podmíněného výrazu:
o = math.sqrt(x) if x >= 0 else math.sqrt(-x)
print(o)
6.782329983125268 6.782329983125268
Příkazy break
a continue
¶
Příkazy break
a continue
slouží pro podrobnější kontrolu provádění cyklů.
Zatímco příkaz break
ukončí provádění celého cyklu, příkaz continue
způsobí přerušení pouze aktuální iterace a přejde na vyhodnocování vstupní podmínky.
Oba příkazy lze použít uvnitř cyklu while
i uvnitř cyklu for
.
Příklad: následující program vypisuje čísla větší než 100, která nejsou sudá a skončí, jakmile se vypíše první číslo dělitelné 7:
n = 100
while True:
# pokud je číslo sudé, přejdeme na další iteraci
if n % 2 == 0:
n += 1
continue
# vypíšeme číslo
print(n)
# pokud jsme vypsali číslo dělitelné 7, ukončíme cyklus
if n % 7 == 0:
break
n += 1
101 103 105
Tip: Kliknutím na tlačítko pytutor v rozhraní JupyterLab se zobrazí grafická interpretace toho, co se v programu děje.
# řešení příkladů je na konci dokumentu :)
Řešení příkladů ze cvičení¶
- Sudé-liché. Napište program, který zjistí a vypíše, zda je zadané číslo sudé nebo liché.
x = int(input("Zadej celé číslo:"))
if x % 2 == 0:
print(x, "je sudé.")
else:
print(x, "je liché.")
15 je liché.
- Je větší. Napište program, který zjistí a vypíše, které ze dvou zadaných čísel je větší.
x = float(input("Zadej první číslo:"))
y = float(input("Zadej druhé číslo:"))
if x > y:
print("x = ", x, "je větší než y = ", y)
# print(f"x = {x} je větší než y = {y}.")
elif x < y:
print("y = ", y, "je větší než x = ", x)
# print(f"y = {y} je větší než x = {x}.")
else:
print("Zadaná čísla jsou stejná, x = y =", x)
y = 8.0 je větší než x = 5.0
- Je největší. Napište program, který zjistí a vypíše, které ze tří zadaných čísel je největší.
x = float(input("Zadej první číslo:"))
y = float(input("Zadej druhé číslo:"))
z = float(input("Zadej třetí číslo:"))
print("Největší je:")
if x >= y and x >= z:
print("první číslo", x)
if y >= x and y >= z:
print("druhé číslo", y)
if z >= x and z >= y:
print("třetí číslo", z)
Největší je: první číslo 42.0 třetí číslo 42.0
print("Největší je", max(x,y,z))
Největší je 42.0
- Seřaď. Napište program, který vypíše tři zadaná čísla v pořadí od největšího po nejmenší.
x = float(input("Zadej první číslo:"))
y = float(input("Zadej druhé číslo:"))
z = float(input("Zadej třetí číslo:"))
print("Pořadí čísel od největšího:", end = " ")
if x >= y >= z :
print(x, y, z)
elif x >= z >= y :
print(x, z, y)
elif y >= x >= z :
print(y, x, z)
elif y >= z >= x :
print(y, z, x)
elif z >= y >= x :
print(z, y, x)
else:
print(z, x, y)
Pořadí čísel od největšího: 8.0 7.0 4.0
x = float(input("Zadej první číslo:"))
y = float(input("Zadej druhé číslo:"))
z = float(input("Zadej třetí číslo:"))
print("Pořadí čísel od největšího:", end = " ")
if x >= y and x >= z :
if y >= z :
print(x, y, z)
else:
print(x, z, y)
elif y >= x and y >= z :
if x >= z :
print(y, x, z)
else:
print(y, z, x)
elif (y >= x):
print(z, y, x)
else:
print(z, x, y)
Pořadí čísel od největšího: 15.0 2.0 2.0
- Trojúhelník. Napište program, který zjistí a vypíše, zda lze sestrojit trojúhelník zadaný pomocí tří délek stran.
a = float(input("Zadej délku strany a:"))
b = float(input("Zadej délku strany b:"))
c = float(input("Zadej délku strany c:"))
if (a + b > c) and (a + c > b) and (b + c > a):
print("Trojúhelník lze sestrojit")
else:
print("Trojúhelník nelze sestrojit")
Trojúhelník nelze sestrojit
- Test plnoletosti. Napište program, který se zeptá uživatele na věk a odpoví, zda je plnoletý.
a = int(input("Kolik je ti let?"))
if a >= 18:
print("Jsi plnoletý.")
else:
print("Nejsi plnoletý.")
# alternativně:
print("Jsi plnoletý.") if a >= 18 else print("Nejsi plnoletý.")
Nejsi plnoletý. Nejsi plnoletý.
Cykly¶
- Součet čísel pomocí for cyklu. Napište program, který sečte čísla od 1 do n (pomocí for cyklu).
n = int(input("Zadej číslo:"))
součet = 0
for i in range(1,n+1):
součet += i
print("Součet čísel je", součet)
print("Kontrola:", (n*(n+1))//2)
Součet čísel je 1035 Kontrola: 1035
- Sudé-liché podruhé. Napište program, který bude pořád dokola žádat uživatele, aby zadal celé číslo, a poté vypíše, jestli je zadané číslo sudé nebo liché. Jakmile uživatel napíše "konec", tak program skončí.
while True:
s = input("Zadej celé číslo:")
if s == "konec":
break
x = int(s)
if (x % 2 == 0):
print("x =", x, "je sudé.")
else:
print("x =", x, "je liché.")
x = 46 je sudé.
x = 13 je liché.
- Načti a sečti čísla. Napište program, který postupně načítá čísla ze vstupu, dokud nepřijde prázdný řetězec
""
. Pak vypíše počet zadaných čísel a jejich součet.
součet = 0
počet = 0
while True:
s = input("Zadej číslo:")
if s == "":
break
součet += float(s)
počet += 1
print(f"Počet čísel je {počet} a jejich součet je {součet}.")
Počet čísel je 2 a jejich součet je 21
- Chci číslo z intervalu. Program-kecálek čte čísla od uživatele, dokud uživatel nezadá číslo z požadovaného intervalu. Pak mu poděkuje a vypíše počet neúspěšných pokusů.
a = 5
b = 10
počet = 0
while True:
s = input(f"Zadej číslo z intervalu ({a},{b}):")
x = float(s)
if a < x < b:
break
počet += 1
print(f"Děkuji. Zadal jsi číslo {x}. Počet neúspěšných pokusů je {počet}")
Děkuji. Zadal jsi číslo 6.0. Počet neúspěšných pokusů je 2
- Posloupnost. Napište program, který vypíše prvních n členů následující posloupnosti: 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 ...
# jednodušší varianta: až do čísla n
n = int(input("Zadej číslo:"))
for i in range(1, n+1):
for j in range(1, i+1):
print(j, end=" ")
1 1 2 1 2 3 1 2 3 4 1 2 3 4 5
# dva forcykly:
n = int(input("Zadej číslo:"))
pocet = 0
for i in range(1,n+1):
for j in range(1,i+1):
print(j, end=" ")
pocet += 1
if (pocet == n):
break
if (pocet == n):
break
1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5
Příklady ze 6. cvičení¶
1. Kvadratická rovnice¶
Napište program pro vyřešení kvadratické rovnice $ax^2 + bx + c = 0$, kde čísla $a,b,c$ jsou reálné parametry.
# vstupní data - zadá uživatel
import math
a = float(input("Zadej a:"))
b = float(input("Zadej b:"))
c = float(input("Zadej c:"))
typ = None
D = b * b - 4 * a * c
x1 = (-b + D**0.5)/(2*a)
x2 = (-b - D**0.5)/(2*a)
if D < 0 :
print("rovnice má komplexní kořeny")
elif D == 0 :
print("rovnice má dvojnásobný reálný kořen")
else:
print("rovnice má reálné kořeny")
print("Řešení:", x1, x2)
# hezčí výpis:
print(f"Řešení: {x1:.1f}, {x2:.1f}")
rovnice má komplexní kořeny Řešení: (1.2246467991473532e-16+2j) (-1.2246467991473532e-16-2j) Řešení: 0.0+2.0j, -0.0-2.0j
2. BMI podruhé¶
Napište program, který spočítá BMI uživatele a vypíše, zda má nadváhu, podváhu nebo normální váhu (normální váze odpovídá BMI mezi 18.5 a 25). Dále program napíše uživateli, jaké je jeho rozmezí optimální hmotnosti.
m = float(input("Jaká je tvoje hmotnost (v kg):"))
v = float(input("Jaká je tvoje výška (v cm):"))
v /= 100
bmi = m / (v ** 2)
if (bmi < 18.5):
print ("Máš podváhu.")
elif (bmi > 25):
print("Máš nadváhu.")
else:
print("Tvoje váha je optimální.")
m_min = 18.5 * (v ** 2)
m_max = 25 * (v ** 2)
print(f"Vaše optimální hmotnost je od {m_min:.1f} do {m_max:.1f}.")
Tvoje váha je optimální. Vaše optimální hmotnost je od 45.6 do 61.6.
3. Ověření prvočíselnosti¶
Napište program, který ověří, jestli je vstupní celé číslo $n$ prvočíslo nebo ne.
cislo = int(input("Zadejte celé kladné číslo: "))
je_prvocislo = True
if cislo <= 1:
je_prvocislo = False
else:
for i in range(2, int(cislo**0.5) + 1):
if cislo % i == 0:
je_prvocislo = False
break
print(cislo, "je prvočíslo.") if je_prvocislo else print(cislo, "není prvočíslo.")
45 není prvočíslo.
4. Ciferný součet¶
Napište program, který sečte jednotlivé cifry zadaného celého kladného celého čísla.
cislo = int(input("Zadej celé kladné číslo:"))
vysledek = 0
while(cislo > 0):
vysledek += cislo % 10
cislo = cislo // 10
print(vysledek)
15
5. Collatzova posloupnost¶
Napište program, který vypíše Collatzovu posloupnost (do dosažení hodnoty 1) pro dané počáteční přirozené číslo $n$.
Collatzova posloupnost: vezmeme celé kladné číslo $n$. Pokud je $n$ sudé, vydělíme ho dvěma, pokud je $n$ liché, vynásobíme ho třemi a přičteme jedničku, postup opakujeme.
Hypotéza je, že posloupnost pro každé přirozené $n$ nakonec dojde k číslu 1.
6. Prvočíselný rozklad¶
Napište program, který vypíše prvočíselný rozklad přirozeného čísla $n$.