🔁 Cykly for a while

Opakování

O čem to je

Trenér řekne: „Uběhni 10 koleček.“ Neříká desetkrát „uběhni kolečko“. Řekne to jednou a dodá, kolikrát. Program to umí stejně. Místo deseti stejných řádků napíšeš jeden cyklus.

Cykly počítají součty, procházejí seznamy žáků, opakují hru, dokud hráč nechce skončit. Bez nich by programy byly nekonečně dlouhé.

Nové pojmy

CyklusČást programu, která se provede opakovaně. Jednomu provedení se říká iterace (průchod).Vypsat čísla 1 až 100 jedním cyklem místo 100 řádků print.
Tělo cykluOdsazené řádky pod hlavičkou cyklu. Ty se opakují. Hlavička končí dvojtečkou.V for i in range(3): je tělem odsazený řádek pod ním.
Řídicí proměnnáProměnná, která v každém průchodu cyklu dostane další hodnotu.V for i in range(3): je to i, postupně 0, 1, 2.
range()Funkce, která vytvoří řadu celých čísel. range(n) jde od 0 do n − 1. range(a, b) od a do b − 1. range(a, b, krok) s daným krokem. Horní mez se nezahrnuje.range(2, 6) jsou čísla 2, 3, 4, 5.

Cyklus for

for použiješ, když víš, kolikrát nebo přes co se má opakovat.

  • for i in range(1, 6):
  •     print(i * i)

Vypíše 1, 4, 9, 16, 25. Proměnná i nabývá hodnot 1 až 5, šestka už ne.

Co vypíše for i in range(10, 0, -2): print(i)?
Začne na 10, krok je −2 a k nule nedojde: 10, 8, 6, 4, 2.
Sečti čísla 1 až 100.
s = 0, pak for i in range(1, 101): → s = s + i, nakonec print(s). Proměnná s je sčítač, na začátku musí být 0. Vypíše 5050. Horní mez je 101, aby se započítala i stovka.

Cyklus while

while (dokud) opakuje tělo, dokud platí podmínka. Použiješ ho, když předem nevíš, kolikrát se bude opakovat.

  • heslo = ""
  • while heslo != "sezam":
  •     heslo = input("Heslo: ")
  • print("Vítej!")

Program se ptá pořád dokola, dokud uživatel nenapíše „sezam“. Může to být jednou i stokrát.

✗for i in range(1, 10): vypíše čísla 1 až 10.
✓Vypíše 1 až 9. Pro 1 až 10 napiš range(1, 11).

Horní mez range se do řady nikdy nezahrnuje.

Cyklus opakuje odsazené tělo. for použiješ, když znáš počet opakování (range(a, b) jde od a do b − 1). while opakuje, dokud platí podmínka.

Trasování

O čem to je

Programátor často neví, proč program dělá něco jiného, než čekal. Pomůže mu trasování: projde cyklus ručně a po každém průchodu si zapíše hodnoty proměnných do tabulky. Na písemce z programování to po tobě budou chtít taky.

Naučíš se oba cykly v Pythonu, příkazy break a continue a hlavně to, jak cyklus spolehlivě „přehrát v hlavě“.

Nové pojmy

Cyklus forProjde postupně všechny prvky nějaké řady: čísla z range(), písmena řetězce, prvky seznamu. Počet průchodů je dán délkou řady.for z in "ahoj": projde písmena a, h, o, j.
Cyklus whilePřed každým průchodem zkontroluje podmínku. Když platí, provede tělo. Když neplatí, cyklus skončí.while n > 1:
Nekonečný cyklusCyklus, jehož podmínka nikdy nepřestane platit. Program „zamrzne“. Vzniká, když v těle zapomeneš měnit proměnnou z podmínky.while x > 0: print(x) bez změny x.
break a continuebreak cyklus okamžitě ukončí. continue přeskočí zbytek těla a pokračuje dalším průchodem.Hledáš první záporné číslo: jakmile ho najdeš, break.
Trasovací tabulkaTabulka, kam si po každém průchodu cyklu zapíšeš hodnoty proměnných a podmínky.Sloupce: průchod, n, c, podmínka.

Trasujeme while

  • n = 10
  • c = 0
  • while n > 1:
  •     n = n // 2
  •     c = c + 1
  • print(c)
Kontrolancn > 1?
před cyklem100ano
po 1. průchodu51ano
po 2. průchodu22ano
po 3. průchodu13ne → konec

Vypíše 3. Program spočítal, kolikrát jde 10 vydělit dvěma, než dojdeš k 1.

Jak trasovat

Nakresli tabulku se sloupcem pro každou proměnnou a pro podmínku.
Zapiš hodnoty před začátkem cyklu.
Vyhodnoť podmínku. Neplatí? Cyklus končí.
Platí? Proveď řádky těla jeden po druhém a zapiš nové hodnoty.
Vrať se ke kroku 3.
Co vypíše for i in range(5): → if i == 3: break → print(i)?
i = 0 → vypíše 0. i = 1 → 1. i = 2 → 2. i = 3 → break, cyklus končí dřív, než se 3 vypíše. Výstup: 0, 1, 2.
Co vypíše for i in range(5): → if i % 2 == 0: continue → print(i)?
Sudá i (0, 2, 4) přeskočí print díky continue. Vypíší se jen lichá: 1, 3.
✗i = 0 a while i < 5: print(i)
✓i = 0 a while i < 5: → print(i) → i = i + 1

Bez změny i je podmínka pořád pravdivá a cyklus nikdy neskončí.

for prochází prvky řady, while opakuje, dokud platí podmínka. break cyklus ukončí, continue skočí na další průchod. Neznámý cyklus pochopíš trasovací tabulkou.