3.2. Kontrola toka izvršavanja

3.2.1. Grananje if-then

Sintaksa je

if <condition>:
    <block 1>
elif <condition>:
    <block 2>
else:
    <block 3>

Treba uočiti dvotočke prije blokova koda koji se uvjetno izvršavanju. Također je važno paziti na konzistentno uvlačenje blokova koda (tamo gdje bi u C-u bile vitičaste zagrade), jer je to jedina vodilja parseru da prepozna gdje su granice bloka. (Tradicionalno se uvlači za 4 mjesta. Editor u Sage ćelijama automatski radi to uvlačenje.) Npr:

>>> if 2>3:
...     print("veći je")
... elif 2==3:
...     print("jednak je")
... else:
...     print("manji je")
manji je

U uvjetima se mogu koristiti standardni logički operatori and, or, not, ..., a važno je uočiti da se test usporedbe jednakosti radi s dvostrukim znakom jednakosti ==. (Jednostruka jednakost = je rezervirana za operacije pridruživanja poput x=1.) Operatori uspoređivanja su standardni: ==, !=, <, <=, >, >=.

>>> if 2>3 or 2<3:
...     print("nisu isti")
nisu isti

3.2.2. Petlje

while petlja ima standardni oblik

while <condition>:
    <body>

gdje je condition logički uvjet. Npr.

>>> k = 1
>>> while k < 10:
...     print(k, end='')
...     k += 1
123456789

Opcionalnim argumentom end sprečavamo automatski prelazak u novi red. (Defaultna vrijednost je end=`\n` što je kontrolni znak za prelazak u novi red.) Mnogo Python funkcija ima opcionalne argumente koji se nužno zadaju nakon obaveznih argumenata. Ako ih ne zadamo, oni imaju svoje defaultne vrijednosti koje možemo saznati uvidom u dokumentaciju ili definiciju funkcije.

For petlja ima specifičnu sintaksu

for x in <iterable>:
    <body>

gdje je <iterable> lista, range, tuple, skup, rječnik, ... Za prijevremeno iskakanje iz petlje postoji komanda break. Npr. slijedeći algoritam pronalazi prvi cijeli broj čiji rastav sadrži više od pet različitih prostih faktora.

>>> import sympy
>>> for i in range(1,10**5):
...     if len(sympy.factorint(i))>5:
...         break
>>> print(i)
30030

Alternativni i nešto elegantniji algoritam bi bio

>>> i = 1
>>> while len(sympy.factorint(i))<6:
...     i +=1
>>> print(i)
30030

Zadatak 1

Isprogramirajte petlju koja će pomnožiti sve brojeve od 1 do 7 (dakle, izračunati će 7!). Riješite zadatak jednom koristeći for petlju, a drugi put while petlju.