Počítání s range()

Cyklus for prochází prvky seznamu. Velmi často ale potřebujete jen počítat: od 1 do 10, nebo prostě „udělej tohle třikrát“. K tomu má Python funkci range() (rozsah). Ta dává cyklu for celá čísla, jedno po druhém:

for i in range(5):
    print(i)

Vypíše:

0
1
2
3
4

range(5) dá pět čísel, od 0 do 4. Stejně jako indexy seznamu začíná nulou a zastaví se těsně před číslem, které jí zadáte: samotná 5 už mezi čísly není. Proměnná cyklu se často jmenuje i (z anglického „index“), ale může mít jakýkoli název.

Když chcete začít jinde, dejte funkci range() dvě čísla, začátek a konec:

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

Začátek mezi čísla patří, konec ne. Pro čísla od 1 do 10 tedy napíšete range(1, 11). Zapomenout na to je nejčastější chyba s range(): range(1, 10) skončí už u devítky.

Třetí číslo je krok: o kolik se má číslo pokaždé zvětšit. range(0, 21, 5) počítá po pěti:

for cislo in range(0, 21, 5):
    print(cislo)
0
5
10
15
20

Záporný krok počítá pozpátku: range(3, 0, -1) dá čísla 3, 2 a 1. Konec, tedy 0, mezi ně opět nepatří.

S range() snadno zopakujete cokoli, kolikrát potřebujete. Tento cyklus proměnnou i vůbec nepoužívá; range(3) jen zařídí, že proběhne třikrát:

for i in range(3):
    print("Hip hip hurá!")
Hip hip hurá!
Hip hip hurá!
Hip hip hurá!

V prvním cvičení této lekce jste počítali cyklem while: proměnná před cyklem, podmínka a cislo += 1 na konci bloku. for cislo in range(1, 6): udělá totéž na jednom řádku. A protože range() přechází na další číslo sama, nemůžete zapomenout zvýšit počítadlo a uvíznout v nekonečném cyklu.

Který cyklus tedy kdy použít? for, když víte, kolikrát se cyklus provede: jednou pro každý prvek seznamu, nebo tolikrát, kolik čísel dá range(). while, když to předem nevíte, například když chcete číslo zdvojnásobovat, dokud nebude větší než 1000:

cislo = 1
zdvojnasobeni = 0
while cislo <= 1000:
    cislo = cislo * 2
    zdvojnasobeni += 1
print("Zdvojnásobení:", zdvojnasobeni)
print("Číslo:", cislo)
Zdvojnásobení: 10
Číslo: 1024

Pokyny

Přepište cyklus while z editoru na cyklus for s range() a cyklus while smažte. Program bude dál vypisovat čísla od 1 do 5.

Změňte svůj cyklus tak, aby vypsal čísla od 1 do 10, včetně desítky.

Pod něj napište druhý cyklus, který vypíše každé páté číslo od 0 do 50: 0, 5, 10 a tak dále až do 50, každé na samostatném řádku. Použijte třetí číslo range(), tedy krok.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

3/11