Instrukcje warunkowe

Instrukcje warunkowe pozwalają programowi "reagować" na różne sytuacje.

Weźmy sobie coś prostego na sam początek:

zmienna = 8
if zmienna > 5:
    print "Zmienna jest wieksza niz 5"

Konstrukcja instrukcji warunkowej jest dość logiczna i prosta:

if (czy) dowolne wyrażenie, które zwraca wartość logiczną (warunek jest spełniony):

Następnie robimy wcięcie w kodzie i piszemy co ma się stać jeśli warunek jest spełniony.

Jeśli nasz warunek nie zostanie spełniony również możemy coś zrobić. Odpowiada za to instrukcja "else"

zmienna = 8
if zmienna == 15:
    print "Zmienna jest rowna 15"
else:
    print "Zmienna nie jest rowna 15"

Warto wspomnieć w tym miejscu, że jeśli chcemy sprawdzić czy coś jest równe używamy podwójnego znaku równości (==). Czemu dwóch, a nie jednego? Powód jest prosty, pojedycznym (=) przypisujemy zmiennym wartości, podczas gdy podwójny znak == sprawdza, czy dwie wartości się różnią, bez zmiany ich zawartości.

Jak widać w tym przypadku sprawdzamy czy nasza zmienna jest równa 15, jeśli jest to mówimy że jest, w przeciwnym przypadku mówimy że nie jest równa 15.

Pewnie zastanawiasz się, co w sytuacji kiedy chcemy sprawdzić kilka warunków pod rząd i pewnie masz już na to swój (na razie jeszcze nie idealny) pomysł, który wygląda tak:
 

zmienna = 8
if zmienna == 1:
    print "Wartosc zmiennej to jeden"
else:
    if zmienna == 2:
        print "Wartosc zmiennej to dwa"
    else:
        print "Wartosc zmiennej nie jest ani jeden ani dwa"

Jeśli nie wpadłeś na to, że we wcięciu można zrobić jeszcze jedną instrukcję, która ma wcięcie to musisz wiedzieć, że można to robić. Jest to bardzo częsta sytuacja i kod w praktyce ma wiele poziomów wcięć. Jednak istnieje rozwiązanie powyższego problemu, które jest o wiele bardziej estetyczne: Python daje nam jeszcze jedną instrukcję "elif", dzięki której sprawdzimy kolejne warunki.

zmienna = 8
if zmienna == 5:
    print "Zmienna jest rowna 5"
elif zmienna == 8:
    print "Zmienna jest rowna 8"
elif zmienna > 5:
    print "Zmienna jest rowna 5 ale nie jest rowna 8"
else:
    print "Zmienna jest mniejsza od 5"

To już chyba najbardziej skomplikowany przykład. Jeśli przyjrzysz się warunkom to:

  1. zmienna == 5 jest nieprawdziwy
  2. zmienna == 8 jest prawdziwy
  3. zmienna > 5 jest prawdziwy

Co w tym wypadku się stanie? Zostanie wykonany blok kodu (tzn. to co znajduje się we wcięciu) pod warunkiem który zostanie spełniony jako pierwszy, ponieważ warunki sprawdzane są po kolei a Python jest leniwy i jak uda mu się jakiś znaleźć to reszty już nie sprawdza.

 

Sprawdź czy potrafisz już rozwiązać zadanie Instrukcje warunkowe !

Pętla warunkowa

Do instrukcji warunkowych możemy zaliczyć pętlę while. Ona, tak jak i pętla "for", również pozwala nam zapisać dużą ilość czynności w kilku linijkach kodu, z tą różnicą, że kończy się dopiero jak warunek zostanie spełniony. używamy jej, gdy chcemy robić coś dopóki jakiś warunek jest spełniony i nie wiemy ile razy dokładnie instrukcje zawarte w pętli powinny się wykonać. Zobaczmy przykład.

x=0
while x<5:
    print "zmienna x wynosi ", x
    x+=1

Co tutaj zrobiliśmy? Na zmienną X przypisujemy najpierw wartość 0, a potem z każdym obrotem pętli, dodamy 1 do zmiennej x, aż wartość x będzie wynosiła 5, wtedy pętla już więcej się nie wykona i program będzie wykonywany dalej.

Dziwny zapis? Tak, zamiast x=x+1 możemy napisac poprostu x+=1, są to zapisy równoważne. Podobnie możemy pisać *=, -=, a nawet /=.

Oczywiście w tak prosty przypadek z łatwością możemy zastąpić pętlą "for", ale znajdziesz w przyszłości przypadki kiedy zwyczajnie jest to niewygodne, a elastyczność zapisu jest w programowaniu bardzo potrzebna.

 

Jak jeszcze możemy używać pętli? A może stwórzmy taką, która nigdy nie kończy działania?

Jak ją zatrzymać?

używając słowa "break" kiedy na przykład zostanie spełniony jakiś warunek wewnątrz pętli

Kiedy jej używać?

Kiedy chcemy żeby na przykład kilka instrukcji w pętli wykonywało się nawet kiedy warunek pętli nie jest spełniony.

Spójrzmy na przykład:

x=0
while True:
    print "To wyswietli sie zawsze gdy warunek jest spelniony"
    if x==5:
        print "zmienna x wynosi ", x
        break
    else:
        print x
    x+=1 

Dodaliśmy tu instrukcję warunkową, wynikiem naszego programu będzie ten sam napis (za wyjątkiem oczywiście dodanego zdania "To wyswietli sie zawsze gdy warunek jest spelniony"), ale zamiast przerywać go poprzez warunek pętli, przerywamy go dopiero konstrukcją break, wywoływaną tylko gdy zostanie spełniony nasz warunek.

To może jeszcze jeden przykład?

x=[1,2,3,4,5]
while x:
    y=x.pop()
    print "ostatnia wartości z listy x to ", y
else:
    print 'koniec'

Gdy wywołamy powyższy kod, otrzymamy wypisane wartości listy x, tylko że od końca, ponieważ metoda pop(), której wynik przypisujemy na zmienną y zwraca ostatnią wartość listy, jednocześnie  ją usuwając, oraz napis "koniec" po skończonej pętli.

Warto dodać, że gdy użyjemy listy jako warunku, domyślnie znaczy on "dopóki są jakieś elementy na liście".

UWAGA: Instrukcje zawarte w "else" dodanym do pętli while, wykonają się jeśli warunek pętli nie zostanie spełniony (czyli po normalnym zakończeniu pętli), ale nie zostaną wykonane jeśli używamy instrukcji "break", wewnątrz pętli.

Możemy również nie pisać else, a nasz program będzie działał niemal tak samo, tyle że instrukcje z bloku else zostaną wykonane nawet w przypadkach, kiedy użyjemy "break".

 

x=[1,2,3,4,5]
while x:
    y=x.pop()
    print y
print 'koniec'

Jak widzisz, nawet pętle warunkowe nie są zbyt trudne. Teraz przejdźmy do kolejnego tematu, jakim są funkcje.