06 mar

­čÉŹ Python 3: instrukcje warunkowe if, else, elif

Python 3 - instrukcje if, elseif, elif, else

Instrukcje warunkowe s─ů cz─Ö┼Ťci─ů ka┼╝dego j─Özyka programowania, w tym Python. Za pomoc─ů instrukcji warunkowych mo┼╝emy tworzy─ç kod, kt├│ry czasem si─Ö wykonuje, a innym razem nie, w zale┼╝no┼Ťci od warunk├│w programu w tym czasie.

W przypadku, gdy zawsze wykonujemy ka┼╝d─ů instrukcj─Ö programu, przechodz─ůc od g├│ry do do┼éu (ka┼╝da linia wykonana jest w kolejno┼Ťci), nie wymagamy od programu wyznaczenia warto┼Ťci konkretnych warunk├│w. Korzystaj─ůc z instrukcji warunkowych, programy mog─ů ustali─ç, czy spe┼énione s─ů okre┼Ťlone warunki, a nast─Öpnie dowiedzie─ç si─Ö, co wykonywa─ç dalej.

Sp├│jrzmy na kilka przyk┼éad├│w, w kt├│rych mogliby┼Ťmy skorzysta─ç z instrukcji warunkowych:

  • Je┼Ťli student otrzyma ponad 65% punkt├│w z testu, wtedy zg┼éo┼Ť, ┼╝e ocena jest pozytywna; w przeciwnym wypadku zg┼éo┼Ť, ┼╝e ocena jest negatywna
  • Je┼Ťli klient ma pieni─ůdze na swoim koncie, nalicz odsetki; w przeciwnym wypadku nalicz op┼éat─Ö karn─ů
  • Je┼Ťli klienci kupi─ů 10 lub wi─Öcej pomara┼äczy, oblicz rabat w wysoko┼Ťci 5%; je┼Ťli kupi─ů mniej, wtedy nie obliczaj rabatu

Kod warunkowy piszemy, wyznaczaj─ůc warto┼Ťci warunk├│w i wybieraj─ůc kod do uruchomienia na podstawie tego, czy warunki te s─ů spe┼énione.

Ten artykuł poprowadzi cię przez tworzenie instrukcji warunkowych w języku Python.

Instrukcja if w Python 3

Zaczniemy od instrukcji if, która oceni, czy instrukcja jest prawdziwa czy fałszywa, i uruchomi kod tylko w przypadku, gdy instrukcja jest prawdziwa.

W dowolnym edytorze tekstowym otw├│rz plik i stw├│rz nast─Öpuj─ůcy kod:

punkty = 70

if punkty >= 65:
    print("Ocena pozytywna")

Za pomoc─ů tego kodu otrzymujemy zmienn─ů punkty i nadajemy jej warto┼Ť─ç 70. Nast─Öpnie u┼╝ywamy instrukcji if, aby oceni─ç, czy zmienna punkty jest wi─Öksza lub r├│wna (>=) 65. Je┼Ťli ten warunek jest spe┼éniony, wtedy instruujemy program, aby wypisa┼é na wyj┼Ťciu komunikat Ocena pozytywna.

Zapisz program jako ocena.py i uruchom go w lokalnym ┼Ťrodowisku programistycznym – w oknie terminala wykonaj polecenie python ocena.py.

W tym przypadku zmienna punkty r├│wna 70 spe┼énia warunek bycia liczb─ů wi─Öksz─ů lub r├│wn─ů 65, wi─Öc po uruchomieniu programu otrzymasz nast─Öpuj─ůce dane wyj┼Ťciowe:

Ocena pozytywna

Zmie┼ämy teraz rezultat wykonania tego programu, zmieniaj─ůc warto┼Ť─ç zmiennej punkty na 60:

punkty = 60

if punkty >= 65:
    print("Ocena pozytywna")

Po zapisaniu i uruchomieniu tego kodu nie otrzymamy na wyj┼Ťciu ┼╝adnego komunikatu, poniewa┼╝ warunek nie zosta┼é spe┼éniony i nie poinstruowali┼Ťmy programu, aby wykona┼é inn─ů instrukcj─Ö.

Aby poda─ç jeszcze jeden przyk┼éad, obliczmy, czy saldo konta bankowego jest ni┼╝sze ni┼╝ 0. Stw├│rzmy plik o nazwie account.py i zdefiniujmy nast─Öpuj─ůcy kod:

saldo = -5

if saldo < 0:
    print("Saldo poni┼╝ej 0, doladuj konto.")

Gdy uruchomimy program komend─ů python account.py, otrzymamy nast─Öpuj─ůcy rezultat:

Saldo poni┼╝ej 0, doladuj konto.

W programie zainicjalizowali┼Ťmy zmienn─ů saldo warto┼Ťci─ů -5, kt├│ra jest mniejsza ni┼╝ 0. Poniewa┼╝ saldo spe┼énia┼éo warunek instrukcji if (saldo < 0), to po zapisaniu i uruchomieniu kodu otrzymamy komunikat. Ponownie, je┼Ťli zmienimy saldo na 0 lub liczb─Ö dodatni─ů, nie otrzymamy ┼╝adnego rezultatu.

Instrukcja else w Python 3 

Jest bardzo prawdopodobne, ┼╝e b─Ödziemy chcieli, aby program podj─ů┼é okre┼Ťlone dzia┼éania nawet w przypadku, gdy instrukcja if ma warto┼Ť─ç false. W naszym przyk┼éadzie b─Ödziemy chcieli uzyska─ç wynik niezale┼╝nie od tego, czy ocena jest pozytywna, czy negatywna.

Aby to zrobi─ç, do powy┼╝szego warunku dodamy instrukcj─Ö else, kt├│ra zbudowana jest w nast─Öpuj─ůcy spos├│b:

punkty = 60

if punkty >= 65:
    print("Ocena pozytywna")

else:
    print("Ocena negatywna")

Poniewa┼╝ powy┼╝sza zmienna punkty ma warto┼Ť─ç 60, instrukcja if jest oceniana jako fa┼ész, wi─Öc program nie wypisze komunikatu o ocenie pozytywnej. Poni┼╝sza instrukcja else tak czy siak poleci programowi co┼Ť zrobi─ç.

Po zapisaniu i uruchomieniu programu, otrzymamy nast─Öpuj─ůcy rezultat:

Ocena negatywna

Je┼Ťli nast─Öpnie przepiszemy program tak, aby zmiennej punkty nada─ç warto┼Ť─ç 65 lub wy┼╝sz─ů, zamiast tego otrzymamy na wyj┼Ťciu komunikat Ocena pozytywna.

Aby doda─ç instrukcj─Ö else do przyk┼éadu konta bankowego, zmodyfikujmy kod w nast─Öpuj─ůcy spos├│b:

saldo = 522

if saldo < 0:
    print("Saldo poni┼╝ej 0, doladuj konto..")

else:
    print("Your balance is 0 or above.")
Your balance is 0 or above.

W tym przypadku zmienili┼Ťmy warto┼Ť─ç zmiennej saldo na liczb─Ö dodatni─ů, aby otrzyma─ç komunikat zdefiniowany dla instrukcji else. Aby otrzyma─ç komunikat z instrukcji if, mo┼╝emy zmieni─ç warto┼Ť─ç na liczb─Ö ujemn─ů.

┼ü─ůcz─ůc instrukcj─Ö if z instrukcj─ů else, tworzymy dwucz─Ö┼Ťciow─ů instrukcj─Ö warunkow─ů, kt├│ra powie komputerowi, aby wykona┼é okre┼Ťlony kod niezale┼╝nie od tego, czy spe┼éniony jest warunek if.

Instrukcja else if w Python 3

Jak do tej pory przedstawili┼Ťmy opcj─Ö logiczn─ů dla instrukcji warunkowych, przy czym ka┼╝da instrukcja if ma warto┼Ť─ç true lub false. W wielu przypadkach b─Ödziemy potrzebowa─ç programu, kt├│ry ocenia wi─Öcej ni┼╝ dwa mo┼╝liwe wyniki. W tym celu u┼╝yjemy instrukcji else if, kt├│ra jest napisana w Pythonie jako elif. Instrukcja elif lub if wygl─ůda jak instrukcja if i ocenia inny warunek.

W przyk┼éadzie dotycz─ůcym konta bankowego mogliby┼Ťmy potrzebowa─ç trzech oddzielnych komunikat├│w dla trzech r├│┼╝nych sytuacji:

  • saldo jest mniejsze od zera
  • saldo jest r├│wne zeru
  • saldo jest wi─Öksze od zera

Instrukcja elif zostanie umieszczona mi─Ödzy instrukcj─ů if a instrukcj─ů else w nast─Öpuj─ůcy spos├│b:

. . .
if saldo < 0:
    print("Saldo poni┼╝ej 0, doladuj konto.")

elif saldo == 0:
    print("Saldo rowne 0, dodaj srodki.")

else:
    print("Saldo wynosi 0 lub wiecej.")

Teraz istniej─ů trzy mo┼╝liwe rezultaty, kt├│re mog─ů wyst─ůpi─ç po uruchomieniu programu:

  • Je┼Ťli zmienna saldo jest r├│wna 0, otrzymamy wynik z instrukcji elif (Saldo jest r├│wne 0, dodaj ┼Ťrodki).
  • Je┼Ťli zmienna saldo jest liczb─ů dodatni─ů, otrzymamy wynik z instrukcji else (Twoje saldo wynosi 0 lub wi─Öcej).
  • Je┼Ťli zmienna saldo jest liczb─ů ujemn─ů, wyj┼Ťciem b─Ödzie ci─ůg znak├│w z instrukcji if (Saldo jest ujemne, dodaj ┼Ťrodki teraz lub zostaniesz obci─ů┼╝ony kar─ů).

Co je┼Ťli chcemy mie─ç wi─Öcej ni┼╝ trzy mo┼╝liwo┼Ťci? Mo┼╝emy to zrobi─ç, wprowadzaj─ůc do naszego kodu wi─Öcej ni┼╝ jedn─ů instrukcj─Ö elif.

W programie ocena.py zmodyfikujmy kod tak, aby odpowiednim zakresom liczby punkt├│w przypisa─ç ocen─Ö numeryczn─ů:

  • 90 punkt├│w lub wi─Öcej odpowiada ocenie 5
  • 80-89 punkt├│w odpowiada ocenie 4
  • 70-79 punkt├│w odpowiada ocenie 3
  • 65-69 punkt├│w odpowiada ocenie 2
  • 64 punkt├│w lub mniej odpowiada ocenie 1

Aby uruchomić ten kod, potrzebujemy jednej instrukcji if, trzech instrukcji elif i instrukcji else, która obsłuży wszystkie nieudane przypadki.

Przepiszmy kod z powy┼╝szego przyk┼éadu, aby otrzymywa─ç komunikaty, kt├│re wypisuj─ů ka┼╝d─ů z ocen. Mo┼╝emy zachowa─ç nasz─ů instrukcj─Ö else bez zmian.

. . .
if punkty >= 90:
    print("ocena 5")

elif punkty >=80:
    print("ocena 4")

elif punkty >=70:
    print("ocena 3")

elif punkty >= 65:
    print("ocena 2")

else:
    print("ocena 1")

Poniewa┼╝ instrukcje elif b─Öd─ů wyznacza─ç warto┼Ť─ç wed┼éug kolejno┼Ťci, mo┼╝emy utrzyma─ç nasze instrukcje w do┼Ť─ç prostej formie. Ten program wykonuje nast─Öpuj─ůce kroki:

  1. Je┼Ťli liczba punkt├│w jest wi─Öksza od 90, wtedy program wy┼Ťwietli ocen─Ö 5, je┼Ťli liczba punkt├│w jest mniejsza od 90, wtedy program przejdzie do nast─Öpnej instrukcjiÔÇŽ
  2. Je┼Ťli liczba punkt├│w jest wi─Öksza lub r├│wna 80, wtedy program wy┼Ťwietli ocen─Ö 4, je┼Ťli liczba punkt├│w jest r├│wna 79 lub mniejsza, wtedy program przejdzie do nast─Öpnej instrukcjiÔÇŽ
  3. Je┼Ťli liczba punkt├│w jest wi─Öksza lub r├│wna 70, wtedy program wy┼Ťwietli ocen─Ö 3, je┼Ťli liczba punkt├│w jest r├│wna 69 lub mniejsza, wtedy program przejdzie do nast─Öpnej instrukcjiÔÇŽ
  4. Je┼Ťli liczba punkt├│w jest wi─Öksza lub r├│wna 65, wtedy program wy┼Ťwietli ocen─Ö 2, je┼Ťli liczba punkt├│w jest r├│wna 64 lub mniejsza, wtedy program przejdzie do nast─Öpnej instrukcjiÔÇŽ
  5. Program wy┼Ťwietli komunikat o ocenie negatywnej, poniewa┼╝ ┼╝aden z powy┼╝szych warunk├│w nie zosta┼é spe┼éniony.

Zagnie┼╝d┼╝one instrukcje if

Gdy ju┼╝ oswoisz si─Ö ze stosowaniem instrukcji if, elif i else, mo┼╝esz przej┼Ť─ç do zagnie┼╝d┼╝onych instrukcji warunkowych. Mo┼╝emy skorzysta─ç z zagnie┼╝d┼╝onych instrukcji if w sytuacjach, w kt├│rych chcemy sprawdzi─ç warunek wt├│rny, je┼Ťli pierwszy warunek zostanie wykonany jako prawdziwy. W tym celu mo┼╝emy umie┼Ťci─ç instrukcj─Ö if-else w innej instrukcji if-else. Sp├│jrzmy na sk┼éadni─Ö zagnie┼╝d┼╝onej instrukcji if:

if warunek1:              #"zewnetrzna" instrukcja if
    print("true")

    if zagniezdzony_warunek:    #wewnetrzna instrukcja if
        print("yes")

    else:                   #wewnetrzna instrukcja else
        print("no")

else:                       #zewnetrzna instrukcja else
    print("false")

Z wykonania powy┼╝szego kodu mo┼╝emy otrzyma─ç kilka mo┼╝liwych komunikat├│w:

  • Je┼Ťli warunek1 b─Ödzie prawdziwe, wtedy program sprawdzi, czy zagniezdzony_warunek r├│wnie┼╝ jest prawdziwe. Je┼Ťli oba przypadki b─Öd─ů prawdziwe, wtedy dane wyj┼Ťciowe b─Öd─ů nast─Öpuj─ůce:
    true
    yes
  • Je┼Ťli jednak warunek1 b─Ödzie prawdziwe, a zagniezdzony_warunek fa┼észywe, wtedy otrzymamy poni┼╝sze dane wyj┼Ťciowe:
    true
    no
  • A je┼Ťli warunek1 b─Ödzie fa┼észywe, wtedy instrukcja zagnie┼╝d┼╝ona if-else nie zostanie uruchomiona, wi─Öc instrukcja else uruchomiona zostanie osobno, a rezultat b─Ödzie nast─Öpuj─ůcy:
    false

Możemy również mieć wiele instrukcji if zagnieżdżonych w całym naszym kodzie:

if warunek1:                  #zewnetrzny if
    print("hello world")

    if zagniezdzony_warunek1:       #pierwszy wenetrzny if
        print("yes")

    elif zagniezdzony_warunek2:     #pierwszy wewnetrzny elif
        print("maybe")

    else:                       #pierwszy wewnetrzny else
        print("no")

elif warunek2:                #zewnetrzny elif
    print("hello galaxy")

    if zagniezdzony_warunek3:       #drugi wewnetrzny if
        print("yes")

    elif zagniezdzony_warunek4:     #drugi wewnetrzny elif
        print("maybe")

    else:                       #drugi wewnetrzny else
        print("no")

else:                           #zewnetrzny else
    warunek("czesc studia")

W powy┼╝szym kodzie opr├│cz instrukcji elif znajduje si─Ö zagnie┼╝d┼╝ona instrukcja if. Pozwoli to na wi─Öksz─ů liczb─Ö opcji w ramach ka┼╝dego warunku.

Sp├│jrzmy na przyk┼éad zagnie┼╝d┼╝onych instrukcji if w naszym programie ocena.py. Mo┼╝emy najpierw sprawdzi─ç, czy ocena jest pozytywna (wi─Öksza lub r├│wna 65 punkt├│w), a nast─Öpnie sprawdzi─ç, kt├│ra ocena powinna by─ç r├│wnowa┼╝na z liczb─ů punkt├│w. Je┼Ťli liczba punkt├│w nie przejdzie, nie musimy przegl─ůda─ç ocen, a zamiast tego mo┼╝emy wy┼Ťwietli─ç w programie komunikat o ocenie negatywnej. Nasz zmodyfikowany kod z zagnie┼╝d┼╝on─ů instrukcj─ů if b─Ödzie wygl─ůda┼é nast─Öpuj─ůco:

. . .
if punkty >= 65:
    print("Ocena dostateczna:")

    if punkty >= 90:
        print("5")

    elif punkty >=80:
        print("4")

    elif punkty >=70:
        print("3")

    elif punkty >= 65:
        print("2")

else:
    print("Ocena negatywna")

Je┼Ťli uruchomimy kod ze zmienn─ů punkty ustawion─ů na liczb─Ö ca┼ékowit─ů 92, pierwszy warunek zostanie spe┼éniony, a program wydrukuje komunikat Ocena dostateczna:. Nast─Öpnie sprawdzi, czy ocena jest wy┼╝sza lub r├│wna 90, a poniewa┼╝ warunek ten jest r├│wnie┼╝ spe┼éniony, wydrukuje 5.

Je┼Ťli uruchomimy kod ze zmienn─ů punkty ustawion─ů na 60, w├│wczas pierwszy warunek nie zostanie spe┼éniony, wi─Öc program pominie instrukcje zagnie┼╝d┼╝one if i przejdzie do instrukcji else, a program wypisze komunikat Ocena negatywna.

Mo┼╝emy oczywi┼Ťcie doda─ç jeszcze wi─Öcej opcji i u┼╝y─ç drugiej warstwy zagnie┼╝d┼╝onych instrukcji if. By─ç mo┼╝e b─Ödziemy chcieli potraktowa─ç osobno oceny 5 -, 5 i 5 +. Mo┼╝emy to zrobi─ç, najpierw sprawdzaj─ůc, czy ocena jest pozytywna, a nast─Öpnie sprawdzaj─ůc, czy ocena wynosi 90 lub wi─Öcej, a nast─Öpnie sprawdzaj─ůc, czy ocena jest wy┼╝sza ni┼╝ 96, na przyk┼éad dla 5 +:

. . .
if punkty >= 65:
    print("Ocena dostateczna:")

    if punkty >= 90:
        if punkty > 96:
            print("5+")

        elif punkty > 93 and punkty <= 96:
            print("5")

        elif punkty >= 90:
            print("5-")
. . .

W powy┼╝szym kodzie, dla zmiennej punkty ustawionej na 96, program uruchomi si─Ö nast─Öpuj─ůco:

  1. Sprawd┼║, czy liczba punkt├│w jest wi─Öksza lub r├│wna 65 (true)
  2. Wypisz komunikat Ocena dostateczna:
  3. Sprawd┼║, czy liczba punkt├│w jest wi─Öksza lub r├│wna 90 (true)
  4. Sprawd┼║, czy liczba punkt├│w jest wi─Öksza ni┼╝ 96 (false)
  5. Sprawd┼║, czy liczba punkt├│w jest wi─Öksza ni┼╝ 93 oraz mniejsza lub r├│wna 96 (true)
  6. Wypisz 5
  7. Pozostaw te zagnieżdżone instrukcje warunkowe i kontynuuj wykonywanie pozostałego kodu

Wynik programu dla liczby punkt├│w 96 wygl─ůda zatem nast─Öpuj─ůco:

Ocena dostateczna:
5

Zagnie┼╝d┼╝one instrukcje if umo┼╝liwiaj─ů dodanie do kodu kilku okre┼Ťlonych poziom├│w warunk├│w.

Podsumowanie

U┼╝ywaj─ůc instrukcji warunkowych – takich jak if – b─Ödziesz mie─ç wi─Öksz─ů kontrol─Ö nad tym, co program wykonuje. Instrukcje warunkowe nakazuj─ů programowi sprawdzi─ç, czy spe┼éniony jest okre┼Ťlony warunek. Je┼Ťli warunek jest spe┼éniony, wykona si─Ö wtedy okre┼Ťlony kod, ale je┼Ťli nie zostanie spe┼éniony, program b─Ödzie kontynuowa┼é przej┼Ťcie do innego fragmentu kodu.

Zainstalować aplikację na Python można bez problemu na hostingu współdzielonym w Hostovita, instrukcja znajduje się na stronie Uruchomienie Python, Django w cPanel