← Zpět na hodinu

3. hodina – Funkce a cyklus for

Vestavěné funkce, opakování pomocí cyklu for a procházení řetězců.

Výklad a cvičení

Výklad si můžeš přečíst přímo na webu. Příklady procházej po pořadí a kód si zkoušej ve VS Code.

Zpět na přehled materiálů

Vestavěné funkce

Procházej příklady postupně, pak si vyzkoušej cvičení. Kód z bloků si můžeš zkopírovat do Python souboru ve VS Code a spustit. Příklady na jedné stránce na sebe mohou navazovat.

Zpět na přehled hodiny

Co je funkce

Funkce je pojmenovaná operace – kus hotové práce, který za nás Python udělá, když ho zavoláme jménem. Vlastně je používáme už od první lekce, jen jsme jim tak neříkali: print, input i int jsou všechno funkce.

Jak se funkce používá:

  1. Napíšeme její jméno a za něj závorky ( ).

  2. Do závorek můžeme dát vstup – říká se mu argument (třeba text nebo číslo). Kolik argumentů funkce chce, je u každé jiné: některé žádný nepotřebují, jiné vyžadují jeden a některé jich berou i víc. Sama si to určíš, až budeš psát vlastní funkce.

  3. Funkce něco udělá. A jsou dva druhy:

Spusť soubor a projdi si příklady obou druhů.

Funkce, která jen něco udělá

print vypíše text na obrazovku. Argument je to, co má vypsat. Zpátky nám nic užitečného nedá – jen to vypíše.

print("Ahoj")

print umí přijmout i víc argumentů najednou, oddělených čárkou. Mezi ně sám doplní mezeru.

print("Ahoj", "Anno", 2025)     # Ahoj Anno 2025

Některé funkce mají i pojmenované argumenty – napíšeme u nich jméno a rovnítko. print jich má dva užitečné: sep a end.

sep určuje, co se vypíše MEZI argumenty (místo mezery):

print(2, 3, 4, sep=", ")        # 2, 3, 4

end určuje, co se vypíše NA KONCI (místo přechodu na nový řádek). Tyhle dva printy proto skončí na jednom řádku vedle sebe:

print("Ahoj", end=" ")
print("světe")                  # Ahoj světe

Funkce, které nám VRÁTÍ hodnotu

input se zeptá uživatele a jeho odpověď nám vrátí (jako text). Proto si ji ukládáme do proměnné.

jmeno = input("Jak se jmenuješ? ")
print("Ahoj,", jmeno)

int převede text na číslo a to číslo vrátí. Taky ho známe z minula.

odpoved = input("Kolik ti je let? ")   # input vrátí text, třeba "30"
vek = int(odpoved)                     # int z textu udělá číslo 30
print("Za rok ti bude", vek + 1)

Zpět na téma: Vestavěné funkce · Další: Užitečné funkce: len, abs, round, min, max

Zdrojový Python soubor

Užitečné funkce: len, abs, round, min, max

Python má spoustu hotových funkcí. Projdeme si ty, které se hodí při počítání a práci s textem. Spusť soubor a sleduj výsledky.

len (z anglického length = délka) vrátí délku textu – kolik má znaků.

slovo = "Ahoj"
print(len(slovo))     # 4   slovo "Ahoj" má čtyři písmena

Argument můžeme dát rovnou, bez proměnné:

print(len("PyLadies"))    # 8

A protože nám len výsledek vrací, můžeme s ním dál počítat:

delka = len("kolo")
print(delka + 1)      # 5

abs (absolutní hodnota) – „zapomene" na znaménko mínus. Hodí se třeba na rozdíl dvou čísel, když nás nezajímá směr.

print(abs(-7))        # 7
print(abs(7))         # 7
print(abs(3 - 10))    # 7   z -7 udělá 7

round zaokrouhlí desetinné číslo.

print(round(3.14159))     # 3   bez dalšího údaje zaokrouhlí na celé číslo
print(round(3.7))         # 4

round umí zaokrouhlit i na určitý počet desetinných míst – napíšeme to jako druhý argument (oddělený čárkou).

print(round(3.14159, 2))  # 3.14   dvě desetinná místa

min najde nejmenší a max největší z hodnot. Do závorek můžeme dát víc čísel oddělených čárkou.

print(min(3, 8, 2))       # 2   nejmenší
print(max(3, 8, 2))       # 8   největší

Funkce se dají kombinovat s tím, co už umíme – třeba použít výsledek rovnou ve výpočtu nebo v porovnání:

print(max(10, 20) + 5)    # 25
print(min(4, 9) < 5)      # True   nejmenší je 4, a 4 je menší než 5

Zpět na téma: Vestavěné funkce · Další: range a sum: posloupnost čísel

Zdrojový Python soubor

range a sum: posloupnost čísel

Někdy potřebujeme celou řadu čísel po sobě – třeba 0, 1, 2, 3, 4. Vypisovat je ručně by bylo zdlouhavé. Od toho je funkce range. Spusť soubor a sleduj výsledky.

range(5) vyrobí čísla od 0 do 4 (pět čísel, ale poslední se NEpočítá). Když range vypíšeme přímo, ukáže se jen "návod", ne samotná čísla:

print(range(5))       # range(0, 5)   čísla zatím schovaná uvnitř

Že jsou uvnitř opravdu čísla, si ověříme pomocí dalších funkcí. sum sečte všechna čísla v posloupnosti.

print(sum(range(5)))      # 10   protože 0 + 1 + 2 + 3 + 4 = 10

len spočítá, kolik čísel v posloupnosti je.

print(len(range(5)))      # 5

min a max najdou nejmenší a největší číslo v posloupnosti.

print(min(range(5)))      # 0
print(max(range(5)))      # 4   poslední je o jedna míň než 5

range může začínat jinde než od nuly – dáme dvě čísla: OD, DO. Číslo DO se opět nepočítá.

print(sum(range(1, 5)))   # 10   sečte 1 + 2 + 3 + 4

Pěkná ukázka síly range – součet čísel od 1 do 100 na jeden řádek:

print(sum(range(1, 101))) # 5050

Zpět na téma: Vestavěné funkce · Další: Cvičení: Vestavěné funkce

Zdrojový Python soubor

Cvičení: Vestavěné funkce

Každé cvičení má vlastní soubor ve složce lekce03-funkce-a-cyklus-for/01_vestavene_funkce/cviceni/. Otevři ho ve VS Code, doplň kód pod zadání a soubor spusť (Run). Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Cvičení 1

Soubor: cviceni/01_delka_jmena.py

Ulož si do proměnné jmeno své jméno a vypiš, kolik má písmen.

Zobrazit řešeníSkrýt řešení
jmeno = "Anna"
print(len(jmeno))         # 4

Cvičení 2

Soubor: cviceni/02_absolutni_hodnota.py

Vypiš absolutní hodnotu rozdílu čísel 4 a 11.

Zobrazit řešeníSkrýt řešení
print(abs(4 - 11))        # 7   z -7 udělá abs kladné číslo

Cvičení 3

Soubor: cviceni/03_zaokrouhleni.py

Máš číslo 2.71828. Zaokrouhli ho na celé číslo a vypiš. Pak ho zaokrouhli na jedno desetinné místo a taky vypiš.

Zobrazit řešeníSkrýt řešení
print(round(2.71828))     # 3
print(round(2.71828, 1))  # 2.7

Cvičení 4

Soubor: cviceni/04_nejvetsi_a_nejmensi.py

Máš tři čísla. Vypiš to největší a na dalším řádku to nejmenší.

a = 17
b = 4
c = 23
Zobrazit řešeníSkrýt řešení
a = 17
b = 4
c = 23
print(max(a, b, c))       # 23
print(min(a, b, c))       # 4

Cvičení 5

Soubor: cviceni/05_soucet_do_deseti.py

Vypiš součet všech čísel od 1 do 10.

Zobrazit řešeníSkrýt řešení
print(sum(range(1, 11)))  # 55   pozor: DO se nepočítá, proto 11

Cvičení 6

Soubor: cviceni/06_vetsi_ze_dvou.py

Zeptej se uživatele na dvě čísla a vypiš to větší z nich.

Zobrazit řešeníSkrýt řešení
prvni = int(input("Zadej první číslo: "))
druhe = int(input("Zadej druhé číslo: "))
print(max(prvni, druhe))

Cvičení 7

Soubor: cviceni/07_prepocet_sekund.py

Uživatel zadá počet sekund (třeba 3661). Přepočítej ho na hodiny, minuty a sekundy a vypiš je jako 1:1:1 jediným printem.

Zobrazit řešeníSkrýt řešení
sekundy = int(input("Zadej počet sekund: "))
hodiny = sekundy // 3600            # kolik celých hodin
minuty = sekundy % 3600 // 60       # ze zbytku kolik celých minut
zbyle = sekundy % 60                # a co zbyde jsou sekundy
print(hodiny, minuty, zbyle, sep=":")   # pro 3661 vypíše 1:1:1

Cvičení 8

Soubor: cviceni/08_cena_s_dph.py

Zboží stojí 1000 Kč bez DPH. Na jeden řádek vypiš cenu bez DPH i s DPH (21 %). Použij dva printy – první nech řádek pokračovat, druhý ho dokonči.

cena = 1000
Zobrazit řešeníSkrýt řešení
cena = 1000
print("bez DPH:", cena, "Kč,", end=" ")     # end=" " – řádek pokračuje
print("s DPH:", round(cena * 1.21), "Kč")   # bez DPH: 1000 Kč, s DPH: 1210 Kč

Cvičení 9

Soubor: cviceni/09_tri_cisla_od_uzivatele.py

Zeptej se uživatele na tři čísla (klidně i záporná) a vypiš, jak velké je to největší z nich bez ohledu na znaménko. Např. z čísel -20, 5 a 12 je největší velikost 20.

Zobrazit řešeníSkrýt řešení
a = int(input("Zadej první číslo: "))
b = int(input("Zadej druhé číslo: "))
c = int(input("Zadej třetí číslo: "))
print(max(abs(a), abs(b), abs(c)))     # abs zahodí znaménko, max vybere největší

Zpět na téma: Vestavěné funkce · Další: Bonusová cvičení: Vestavěné funkce

Zdrojové soubory na GitHubu

Bonusová cvičení: Vestavěné funkce

Bonusy jsou pro rychlíky – když máš hotová cvičení a zbývá čas. Každý bonus má vlastní soubor ve složce lekce03-funkce-a-cyklus-for/01_vestavene_funkce/cviceni_bonusy/. Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Bonus 1

Soubor: cviceni_bonusy/01_rozpocitani_utraty.py

Uživatel zadá celkovou cenu útraty a počet lidí. Vypiš, kolik zaplatí každý, zaokrouhleno na dvě desetinná místa.

Zobrazit řešeníSkrýt řešení
cena = int(input("Kolik jste utratili? "))
lidi = int(input("Kolik vás bylo? "))
print(round(cena / lidi, 2))        # pro 1000 a 3 vypíše 333.33

Bonus 2

Soubor: cviceni_bonusy/02_prumer_do_n.py

Průměr od 1 do N. Uživatel zadá číslo N. Vypiš průměr všech čísel od 1 do N (součet čísel vyděl jejich počtem).

Zobrazit řešeníSkrýt řešení
n = int(input("Zadej N: "))
prumer = sum(range(1, n + 1)) / n       # +1, aby se počítalo i samotné N
print(prumer)                           # pro 10 vypíše 5.5

Bonus 3

Soubor: cviceni_bonusy/03_nejlevnejsi_polozka.py

Cíl a rozpočet. Uživatel zadá cenu tří položek. Vypiš nejlevnější a nejdražší z nich a jestli se všechny tři vejdou do rozpočtu 1000 Kč.

Zobrazit řešeníSkrýt řešení
cena1 = int(input("Cena 1: "))
cena2 = int(input("Cena 2: "))
cena3 = int(input("Cena 3: "))
print("Nejlevnější:", min(cena1, cena2, cena3))
print("Nejdražší:", max(cena1, cena2, cena3))
if cena1 + cena2 + cena3 <= 1000:
    print("Vejdou se do rozpočtu.")
else:
    print("Rozpočet nestačí.")

Zpět na téma: Vestavěné funkce

Zdrojové soubory na GitHubu

Cyklus for

Procházej příklady postupně, pak si vyzkoušej cvičení. Kód z bloků si můžeš zkopírovat do Python souboru ve VS Code a spustit. Příklady na jedné stránce na sebe mohou navazovat.

Zpět na přehled hodiny

Proč cyklus

Spusť soubor a sleduj, co se vypíše.

Často chceme něco zopakovat víckrát. Psát to pořád dokola je zdlouhavé – a co teprve stokrát! Od toho je cyklus: řekne Pythonu „udělej tohle N-krát".

Takhle by to vypadalo bez cyklu – nudné a zbytečně dlouhé:

print("Ahoj")
print("Ahoj")
print("Ahoj")

Cyklus for udělá totéž za nás. range(3) znamená tři opakování:

for cislo in range(3):
    print("Ahoj")

Jak takový cyklus přečíst:

Ta proměnná se opravdu postupně mění. range(5) dá čísla 0 až 4 (pět čísel, poslední je o jedna míň – to už známe z minula):

for cislo in range(5):
    print(cislo)          # vypíše 0, 1, 2, 3, 4 – každé na svůj řádek

Zpět na téma: Cyklus for · Další: for a range: různé rozsahy

Zdrojový Python soubor

for a range: různé rozsahy

range známe z minulé složky. V cyklu for ho teď využijeme naplno – určuje, přes která čísla cyklus projde. Spusť soubor a sleduj výsledky.

range od-do: čísla od prvního čísla do druhého (druhé se NEpočítá).

for cislo in range(1, 6):
    print(cislo)              # 1, 2, 3, 4, 5

range s krokem: range(od, do, krok) – o kolik se skáče. Tímhle vypíšeme sudá čísla:

for cislo in range(0, 10, 2):
    print(cislo)              # 0, 2, 4, 6, 8

Proměnnou z cyklu můžeme rovnou použít ve výpočtu:

for cislo in range(1, 6):
    print(cislo, "na druhou je", cislo * cislo)

Důležité: co je odsazené, patří dovnitř cyklu a opakuje se. Co je pod cyklem BEZ odsazení, se provede až potom – jednou.

for cislo in range(3):
    print("uvnitř cyklu:", cislo)
print("hotovo")              # vypíše se jednou, až cyklus doběhne

Zpět na téma: Cyklus for · Další: Sbírání výsledku v cyklu

Zdrojový Python soubor

Sbírání výsledku v cyklu

V minulé složce jsme součet čísel udělali funkcí sum. Teď si ukážeme, jak k němu cyklus dojde „ručně" – krok za krokem. Tenhle trik se hodí pokaždé, když v cyklu něco postupně sbíráme. Spusť soubor a sleduj výsledky.

Trik: máme proměnnou a v každém kroku do ní něco přidáme. U sčítání začínáme na nule.

soucet = 0
for cislo in range(1, 6):
    soucet = soucet + cislo   # k dosavadnímu součtu přičti aktuální číslo
print(soucet)                 # 15   protože 1 + 2 + 3 + 4 + 5

(Krok za krokem to ukazuje obrázek cyklus_for_soucet_vizualizace.png.)

Počítadlo – kolikrát se něco stalo. Přičítáme pořád jedničku:

pocet = 0
for cislo in range(10):
    pocet = pocet + 1
print("cyklus proběhl", pocet, "krát")    # 10

Násobení v cyklu. Pozor – u násobení musíme začít na jedničce, ne na nule – násobení nulou by dalo vždycky nulu. Takhle spočítáme 1 * 2 * 3 * 4:

soucin = 1
for cislo in range(1, 5):
    soucin = soucin * cislo
print(soucin)                 # 24

Cyklus for – názorné vysvětlení


Zpět na téma: Cyklus for · Další: Vnořené cykly (cyklus v cyklu)

Zdrojový Python soubor

Vnořené cykly (cyklus v cyklu)

Cyklus můžeme dát dovnitř jiného cyklu. Říká se tomu vnořený cyklus. Pravidlo: pro KAŽDÝ průchod vnějšího cyklu proběhne celý vnitřní cyklus. Spusť soubor a sleduj výsledky.

Představ si hru o třech kolech a v každém kole dva pokusy. Vnějším cyklem jsou kola, vnitřním pokusy v rámci jednoho kola:

for kolo in range(1, 4):
    print("Kolo", kolo)
    for pokus in range(1, 3):
        print("  pokus", pokus)

Odsazení určuje, co je uvnitř čeho: vnitřní cyklus je odsazený uvnitř vnějšího a řádek "Kolo" se provede jednou za kolo, "pokus" dvakrát.

Vnořený cyklus se hodí, když chceme víc hodnot na JEDEN řádek a pak skočit na další. Vypíšeme třeba mini kalendář – tři týdny pod sebou, každý s čísly dnů 1 až 7. Vnitřní cyklus vypíše jeden řádek (týden), vnější ho zopakuje. Pomůže end (drží řádek) a prázdný print() (zalomí):

for tyden in range(1, 4):
    for den in range(1, 8):
        print(den, end=" ")       # dny 1 až 7 vedle sebe
    print()                       # po celém týdnu skoč na nový řádek

Zpět na téma: Cyklus for · Další: Na ukázku: kreslení s želvou (turtle)

Zdrojový Python soubor

Na ukázku: kreslení s želvou (turtle)

Tuhle ukázku si projdeme společně s lektorkou. Není určená k samostatnému spouštění doma; potřebné prostředí připraví lektorka.

Turtle je „želva", která po obrazovce kreslí čáru. Umí dvě věci: popojet dopředu a otočit se. Právě tady je krásně vidět síla cyklu for – místo abychom stejný příkaz psali pořád dokola, necháme ho zopakovat.

import turtle

Čtverec: čtyřikrát „popojeď dopředu a otoč se o 90 stupňů".

for strana in range(4):
    turtle.forward(100)     # popojeď o 100 kroků
    turtle.left(90)         # otoč se o 90 stupňů doleva

Zkus si pohrát s čísly:

(Otočka je vždycky 360 děleno počtem stran.)

turtle.done()               # nechá okno otevřené, dokud ho nezavřeš

Zpět na téma: Cyklus for · Další: Cvičení: Cyklus for

Zdrojový Python soubor

Cvičení: Cyklus for

Každé cvičení má vlastní soubor ve složce lekce03-funkce-a-cyklus-for/02_cyklus_for/cviceni/. Otevři ho ve VS Code, doplň kód pod zadání a soubor spusť (Run). Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Cvičení 1

Soubor: cviceni/01_cisla_do_deseti.py

Cyklem vypiš čísla od 1 do 10, každé na svůj řádek.

Zobrazit řešeníSkrýt řešení
for cislo in range(1, 11):
    print(cislo)

Cvičení 2

Soubor: cviceni/02_petkrat_pyladies.py

Cyklem vypiš pětkrát text "PyLadies".

Zobrazit řešeníSkrýt řešení
for cislo in range(5):
    print("PyLadies")

Cvičení 3

Soubor: cviceni/03_nasobky_tri.py

Cyklem vypiš násobky tří od 3 do 30 (tedy 3, 6, 9, ... až 30).

Zobrazit řešeníSkrýt řešení
for cislo in range(3, 31, 3):
    print(cislo)

Cvičení 4

Soubor: cviceni/04_soucet_do_sta.py

Spočítej součet všech čísel od 1 do 100 pomocí cyklu for (ne funkcí sum) a výsledek vypiš.

Zobrazit řešeníSkrýt řešení
soucet = 0
for cislo in range(1, 101):
    soucet = soucet + cislo
print(soucet)                 # 5050

Cvičení 5

Soubor: cviceni/05_mala_nasobilka.py

Uživatel zadá číslo. Cyklem vypiš jeho malou násobilku – tedy cislo * 1 až cislo * 10, každý řádek třeba "7 * 3 = 21".

Zobrazit řešeníSkrýt řešení
cislo = int(input("Zadej číslo: "))
for nasobek in range(1, 11):
    print(cislo, "*", nasobek, "=", cislo * nasobek)

Cvičení 6

Soubor: cviceni/06_mocnina_cyklem.py

Vypočítej 2 na desátou tak, že v cyklu desetkrát vynásobíš dvěma. Výsledek vypiš (má vyjít 1024).

Zobrazit řešeníSkrýt řešení
vysledek = 1
for cislo in range(10):
    vysledek = vysledek * 2
print(vysledek)               # 1024

Zpět na téma: Cyklus for · Další: Bonusová cvičení: Cyklus for

Zdrojové soubory na GitHubu

Bonusová cvičení: Cyklus for

Bonusy jsou pro rychlíky – když máš hotová cvičení a zbývá čas. Každý bonus má vlastní soubor ve složce lekce03-funkce-a-cyklus-for/02_cyklus_for/cviceni_bonusy/. Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Bonus 1

Soubor: cviceni_bonusy/01_faktorial.py

Uživatel zadá číslo N. Spočítej cyklem jeho faktoriál – tedy 1 * 2 * 3 * ... * N – a výsledek vypiš. (Faktoriál z 5 je 120.)

Zobrazit řešeníSkrýt řešení
n = int(input("Zadej číslo: "))
faktorial = 1
for cislo in range(1, n + 1):     # +1, aby se počítalo i samotné N
    faktorial = faktorial * cislo
print(faktorial)                  # pro 5 vypíše 120

Bonus 2

Soubor: cviceni_bonusy/02_soucet_sudych.py

Spočítej cyklem součet všech sudých čísel od 1 do 100 a vypiš ho.

Zobrazit řešeníSkrýt řešení
soucet = 0
for cislo in range(2, 101, 2):    # krok 2 = jen sudá čísla
    soucet = soucet + cislo
print(soucet)                     # 2550

Bonus 3

Soubor: cviceni_bonusy/03_sporici_ucet.py

Uživatel zadá počáteční částku na spořicím účtu. Úrok je 5 % ročně. Spočítej cyklem, kolik na účtu bude po deseti letech (každý rok se částka vynásobí 1.05), a výsledek vypiš.

Zobrazit řešeníSkrýt řešení
castka = int(input("Kolik si ukládáš? "))
for rok in range(10):
    castka = castka * 1.05
print(round(castka, 2))           # pro 1000 vypíše 1628.89

Zpět na téma: Cyklus for

Zdrojové soubory na GitHubu

Procházení textu

Procházej příklady postupně, pak si vyzkoušej cvičení. Kód z bloků si můžeš zkopírovat do Python souboru ve VS Code a spustit. Příklady na jedné stránce na sebe mohou navazovat.

Zpět na přehled hodiny

Procházení textu

Cyklus for umí projít nejen čísla z range, ale i písmena v textu. Napíšeme for pismeno in slovo: a proměnná se postupně nastaví na každé písmeno – jedno po druhém. Spusť soubor a sleduj výsledky.

Projdeme slovo znak po znaku:

slovo = "Ahoj"
for pismeno in slovo:
    print(pismeno)        # A, h, o, j – každé na svůj řádek

Proměnnou si můžeme pojmenovat jakkoli – tady třeba znak. A funguje to na jakýkoli text, klidně i od uživatele:

jmeno = input("Napiš svoje jméno: ")
for znak in jmeno:
    print(znak, "!")

Zpět na téma: Procházení textu · Další: Podmínka uvnitř cyklu

Zdrojový Python soubor

Podmínka uvnitř cyklu

Do cyklu můžeme dát if – rozhodne se u KAŽDÉHO průchodu zvlášť. Odsazení hlídá, co kam patří: if je uvnitř cyklu, jeho tělo ještě víc. Spusť soubor a sleduj výsledky.

Vypiš jen sudá čísla od 1 do 10:

for cislo in range(1, 11):
    if cislo % 2 == 0:
        print(cislo)          # 2, 4, 6, 8, 10

Podmínka + počítadlo z minulé složky = spočítáme, kolik jich je. Kolik sudých čísel je od 1 do 20?

pocet = 0
for cislo in range(1, 21):
    if cislo % 2 == 0:
        pocet = pocet + 1
print("sudých čísel:", pocet)     # 10

Šikovný pomocník: zápis pismeno in "aeiou" zjistí, jestli je písmeno jedno z těch v uvozovkách (vrátí True/False). V cyklu se skvěle hodí – třeba spočítat samohlásky ve slově:

slovo = "ananas"
samohlasky = 0
for pismeno in slovo:
    if pismeno in "aeiou":
        samohlasky = samohlasky + 1
print("samohlásek:", samohlasky)  # 3

Zpět na téma: Procházení textu · Další: Cvičení: Procházení textu

Zdrojový Python soubor

Cvičení: Procházení textu

Každé cvičení má vlastní soubor ve složce lekce03-funkce-a-cyklus-for/03_prochazeni/cviceni/. Otevři ho ve VS Code, doplň kód pod zadání a soubor spusť (Run). Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Cvičení 1

Soubor: cviceni/01_analyza_vety.py

Analýza věty. Uživatel zadá větu. Projdi ji znak po znaku a vypiš počet znaků, počet samohlásek, počet mezer a počet slov ve větě. (Počet slov = počet mezer + 1.)

Zobrazit řešeníSkrýt řešení
veta = input("Napiš větu: ")
samohlasky = 0
mezery = 0
for znak in veta:
    if znak in "aeiou":
        samohlasky = samohlasky + 1
    if znak == " ":
        mezery = mezery + 1
print("Počet znaků:", len(veta))
print("Samohlásek:", samohlasky)
print("Mezer:", mezery)
print("Slov:", mezery + 1)              # slov je o jedno víc než mezer

Cvičení 2

Soubor: cviceni/02_bum_bac.py

Bum-Bác. Tuhle úlohu znáš z minula pro jedno číslo – teď ji necháme proběhnout cyklem. Vypiš čísla od 1 do 30, ale:

Zobrazit řešeníSkrýt řešení
for cislo in range(1, 31):
    if cislo % 15 == 0:                 # dělitelné 3 i 5 = dělitelné 15, musí být první
        print("BumBác")
    elif cislo % 3 == 0:
        print("Bum")
    elif cislo % 5 == 0:
        print("Bác")
    else:
        print(cislo)

Cvičení 3

Soubor: cviceni/03_statistika_cisel.py

Statistika čísel. Uživatel zadá, kolik čísel bude zadávat, a pak ta čísla postupně napíše. V jednom průchodu cyklem spočítej a vypiš jejich součet, průměr, největší a nejmenší číslo. Nepoužívej funkce sum, max ani min – spočítej vše sama cyklem.

Zobrazit řešeníSkrýt řešení
pocet = int(input("Kolik čísel zadáš? "))
prvni = int(input("Zadej číslo: "))
soucet = prvni
nejvetsi = prvni                        # první číslo je zatím největší i nejmenší
nejmensi = prvni
for i in range(pocet - 1):              # první už máme, zbývá o jedno míň
    cislo = int(input("Zadej číslo: "))
    soucet = soucet + cislo
    if cislo > nejvetsi:
        nejvetsi = cislo
    if cislo < nejmensi:
        nejmensi = cislo
print("Součet:", soucet)
print("Průměr:", soucet / pocet)
print("Největší:", nejvetsi)
print("Nejmenší:", nejmensi)

Cvičení 4

Soubor: cviceni/04_nasobilkova_tabulka.py

Násobilková tabulka. Pomocí vnořených cyklů vypiš tabulku 4x4, kde na řádku R a sloupci S je jejich součin:

1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16

Jak pojmenuješ obě proměnné cyklu? Zamysli se, ať dávají smysl.

Zobrazit řešeníSkrýt řešení
for radek in range(1, 5):
    for sloupec in range(1, 5):
        print(radek * sloupec, end=" ")
    print()                             # po každém řádku skoč na nový řádek

Cvičení 5

Soubor: cviceni/05_hody_dvema_kostkami.py

Hody dvěma kostkami. Vnořenými cykly vypiš všechny možné hody dvěma kostkami (každá má čísla 1 až 6) a u každého i jejich součet. Každý řádek bude vypadat třeba takhle: 2 + 5 = 7

Zobrazit řešeníSkrýt řešení
for kostka1 in range(1, 7):
    for kostka2 in range(1, 7):
        print(kostka1, "+", kostka2, "=", kostka1 + kostka2)

Zpět na téma: Procházení textu · Další: Bonusová cvičení: Procházení textu

Zdrojové soubory na GitHubu

Bonusová cvičení: Procházení textu

Bonusy jsou pro rychlíky – když máš hotová cvičení a zbývá čas. Každý bonus má vlastní soubor ve složce lekce03-funkce-a-cyklus-for/03_prochazeni/cviceni_bonusy/. Řešení si rozklikni až po vlastním pokusu – tvoje řešení může vypadat jinak, a to je v pořádku.

Bonus 1

Soubor: cviceni_bonusy/01_trojuhelnik_z_hvezdicek.py

Trojúhelník z hvězdiček. Uživatel zadá výšku a ty vypiš trojúhelník, kde první řádek má jednu hvězdičku, druhý dvě atd.:

*
**
***
Zobrazit řešeníSkrýt řešení
vyska = int(input("Jak vysoký trojúhelník? "))
for radek in range(1, vyska + 1):
    print("*" * radek)                   # "*" * 3 je "***"

Bonus 2

Soubor: cviceni_bonusy/02_ramecek.py

Rámeček. Uživatel zadá velikost N. Vnořenými cykly nakresli čtverec N x N, kde okraj tvoří X a vnitřek je prázdný. Pro N=4: X X X X X X X X X X X X Zamysli se: na kterém řádku a sloupci se kreslí X a kdy mezera?

Zobrazit řešeníSkrýt řešení
n = int(input("Jak velký rámeček? "))
for radek in range(n):
    for sloupec in range(n):
        if radek == 0 or radek == n - 1 or sloupec == 0 or sloupec == n - 1:
            print("X", end=" ")
        else:
            print(" ", end=" ")
    print()

Bonus 3

Soubor: cviceni_bonusy/03_ciferny_soucet.py

Ciferný součet. Uživatel zadá číslo. Sečti jeho jednotlivé číslice a součet vypiš (třeba z 253 vyjde 2 + 5 + 3 = 10).

Zobrazit řešeníSkrýt řešení
cislo = input("Zadej číslo: ")           # necháme jako text, ať projdeme číslice
soucet = 0
for znak in cislo:
    soucet = soucet + int(znak)          # každou číslici převedeme na číslo
print("Ciferný součet:", soucet)

Bonus 4

Soubor: cviceni_bonusy/04_teplotni_skok.py

Teplotní skok. Uživatel postupně zadá sedm denních teplot (klidně i záporných). Najdi a vypiš největší skok mezi dvěma sousedními dny – tedy největší rozdíl teplot ze dne na den (bez ohledu na to, jestli teplota stoupla, nebo klesla).

Zobrazit řešeníSkrýt řešení
predchozi = int(input("Zadej teplotu: "))
nejvetsi_skok = 0
for den in range(6):                     # zbývá dalších šest dní
    teplota = int(input("Zadej teplotu: "))
    skok = abs(teplota - predchozi)      # rozdíl proti včerejšku, bez ohledu na směr
    if skok > nejvetsi_skok:
        nejvetsi_skok = skok
    predchozi = teplota                  # dnešek se stane včerejškem
print("Největší skok:", nejvetsi_skok)

Bonus 5

Soubor: cviceni_bonusy/05_palindrom.py

Palindrom. Uživatel zadá slovo. Zjisti, jestli se čte stejně zepředu i zezadu (třeba "kajak" nebo "radar"). Zamysli se, jak si slovo poskládáš pozpátku a jak obě verze porovnáš.

Zobrazit řešeníSkrýt řešení
slovo = input("Napiš slovo: ")
obracene = ""
for znak in slovo:
    obracene = znak + obracene           # každé písmeno dáme PŘED dosavadní výsledek
if slovo == obracene:
    print("Je to palindrom.")
else:
    print("Není to palindrom.")

Zpět na téma: Procházení textu

Zdrojové soubory na GitHubu