4         LEKCJA 4 - PISANIE ROZGAŁĘZIONYCH PROGRAMÓW

4.1        Operator równości

Po uruchomieniu IDLE'a zgłasza się tryb interaktywny Pythona. Wypróbujemy w nim działanie operatorów porównania.

Najważniejszym operatorem porównania jest operator równości.

Rezultatem każdego operatora porównania (w tym operatora równości) jest wartość typu logicznego, mogąca przybierać tylko dwie możliwe wartości: prawda lub fałsz.

Wpiszmy:

 

>>> 2==2

True

 

Uzyskany rezultat True oznacza, że prawdą jest, że 2 równe jest 2.

 

>>> 2==4

False

 

Uzyskany rezultat False oznacza, że nieprawdą jest, że 2 równe jest 4.

 

Poważnym błędem jest mylenie operator równości (= =) z instrukcją przypisania (=). Porównajmy:

 

>>> 2=2

SyntaxError: can't assign to literal

>>> a==2

 

Traceback (most recent call last):

  File "<pyshell#3>", line 1, in -toplevel-

    a==2

NameError: name 'a' is not defined

>>> a=2

>>> a==2

True

>>> 

4.2        Operatory nierówności

Do sprawdzania nierówności służy następujący operator:

 

>>> 2!=2

False

>>> 2!=4

True

 

Poniższy zapis również jest poprawny, lecz nie jest zalecany przez twórców Pythona:

 

>>> 2<>4

True

>>> 2<>2

False

>>> 

 

Poniższy zapis jest niepoprawny:

 

>>> 2><4

SyntaxError: invalid syntax

 

Do sprawdzania ostrej większości i mniejszości służą następujące operatory:

 

>>> 2>4

False

>>> 2<4

True

>>> 2>1

True

>>> 2<1

False

 

Do sprawdzania nieostrej większości i mniejszości służą następujące operatory:

 

>>> 2>=4

False

>>> 2<=4

True

>>> 2<=2

True

>>> 2>=2

True

>>> 

 

4.3        Porównania na napisach

W przypadku, gdy porównywane są napisy, kryterium porównania jest kolejność leksykograficzna:

 

>>> 'Ala'=='Ala'

True

>>> 'Ala'!='Ola'

True

>>> 'Ala'>='Ola'

False

>>> 'Ala'<'Ola'

True

>>> 'A'<'Aa'

True

>>> "123">"14"

False

4.4        Porównania na wyrażeniach

W przypadku, gdy porównywane są wyrażenia, kryterium porównania jest rezultat wyrażenia:

 

>>> 22.0/7>3.14

True

>>> a=14

>>> a**0.5<4**2

True

>>> (1+2+3+4)*0xA==0100+6*6

True

>>> 'Ala'*2=='Ala'+'Ala'

True

4.5        Porównania wielokrotne

Porównania mogą zawierać jednocześnie więcej niż jeden operator:

 

>>> 1<3<7

True

>>> 1>=1>2

False

>>> 2==2>1.1>-1>-1000

True

>>> 'Ala'<'Ola'<'Zenek'

True

4.6        Porównania łączone

Porównywać można także rezultaty porównań:

 

>>> (1==2)==(2==3)

True

 

Co należy rozumieć: Rezultat porównania 1 z 2 (fałsz) jest taki sam jak rezultat porównania 2 z 3 (również fałsz).

Więcej przykładów:

 

>>> (2>1)==(3>2)

True

>>> (2!=2)!=(3!=3)

False

4.7        Operator negacji

Operator negacji zaprzecza wynik porównania po nim:

 

>>> not 1==1

False

>>> not 2==0

True

4.8        Operator sumy logicznej

Operator sumy logicznej zwraca prawdę tylko wtedy, gdy choć jedno z połączonych nim wyrażeń jest prawdziwe:

 

>>> True or False

True

>>> False or not True

False

>>> 1==2 or 1==3 or 1==1

True

>>> 'Abc'=='Def' or 7>100 or 1==1

True

4.9        Operator iloczynu logicznego

Operator iloczynu logicznego zwraca prawdę tylko wtedy, gdy każde z połączonych nim wyrażeń jest prawdziwe:

 

>>> True and True

True

>>> True and False

False

>>> 1==1 and 2==3 or 3==3

True

>>> 1==1 and 2==3 and 3==3

False

4.10    Kolejność wykonywania operatorów

W pierwszej kolejności wykonywane są operatory porównania, później operator negacji, następnie iloczynu logicznego, a na końcu sumy logicznej (takie same operatory wykonywane są w kolejności od lewej do prawej). Porównajmy:

 

>>> False and False or True

True

>>> False and (False or True)

False

4.11    Instrukcja wyboru prostego IF

Aby uzależnić wykonanie instrukcji od rezultatu porównania, używamy instrukcji warunkowej (Uwaga: W trybie interaktywnym, na końcu każdej instrukcji złożonej - np. IF - konieczne jest dwukrotne wciśnięcie klawisza Enter):

 

>>> if 2==2: print "OK"

 

OK

 

Wyświetliło się "OK", bo warunek po IF jest spełniony.

 

>>> if 2!=2: print "OK"

 

Nie wyświetliło się "OK", bo warunek po IF nie został spełniony.

 

4.12    Instrukcja wyboru pełnego IF/ELSE

Można ustalić wykonanie różnych instrukcji dla obu możliwych przypadków:

 

>>> if 2!=2: print "Dziwne"

else: print "Normalne"

 

Normalne

4.13    Instrukcja wyboru wielokrotnego IF/ELIF/ELSE

Można ustalić wykonanie różnych instrukcji dla różnych przypadków:

 

>>> if 2==1: print "Dziwne 1"

elif 2==2: print "Normalne"

elif 2==3: print "Dziwne 3"

else: print "Dziwne inne"

 

Normalne

 

4.14    Tworzenie w programie rozgałęzień przy użyciu instrukcji wyboru

Aby przejść do edycji nowego programu należy z menu File wybrać polecenie New Window.

Otworzy się nowe okno, przeznaczone do edycji programu. Zaczniemy od nadania programowi nazwy. W tym celu wybierzmy z menu File polecenie Save As. Wybieramy folder Moje dokumenty, następnie wpisujemy nazwę warunek1.py. Klikamy na Zapisz.

 

Przepiszmy następujący program:

 

# Pierwszy program rozgałęziony

print "Ten program porównuje dwie liczby"

x = input("Podaj pierwszą z dwóch liczb:")                                 

y = input("Podaj drugą z dwóch liczb:")                                    

print "Liczba",x,"w stosunku do",y,"jest:",   # Przecinek!

if x==y:

    print "taka sama"

elif x>y:

    print "większa"

else:

    print "mniejsza"

 

Uwagi do programu:

-         Instrukcja input służy do wprowadzania liczb (przypomnijmy, że raw_input wprowadza tekst). Liczba może być podana przez użytkownika explicite, lub w postaci wyrażenia algebraicznego.

-         Przecinek na końcu listy parametrów instrukcji print powoduje, że kolejna instrukcja print wyświetli tekst w tej samej (a nie następnej) linii

 

W celu uruchomienia programu wybieramy z menu Run polecenie Run Module (lub wciskamy klawisz F5).

Po chwili nasz program zostanie uruchomiony. Wprowadzamy dwie liczby i obserwujemy wynik. Np.:

 

Ten program porównuje dwie liczby

Podaj pierwszą z dwóch liczb:5

Podaj drugą z dwóch liczb:4.5

Liczba 5 w stosunku do 4.5 jest: większa

 

Lub z użyciem wyrażeń:

 

Ten program porównuje dwie liczby

Podaj pierwszą z dwóch liczb:6/2

Podaj drugą z dwóch liczb:1*3

Liczba 3 w stosunku do 3 jest: taka sama

4.15    Bloki warunkowe

Fragment programu, który wykonywany jest zależnie od wyniku instrukcji if określamy mianem bloku warunkowego. W języku Python blok warunkowy oznaczamy poprzez "wcięcie" tekstu o jeden tabulator w prawo.

Przyjrzyjmy się końcówce naszego programu:

 

else:

    print "mniejsza"

 

Załóżmy, że chcielibyśmy, aby na końcu programu wyświetlał się napis "dziękuję". Dopiszmy następującą linię:

 

else:

    print "mniejsza"

    print "Dziękuję!"

 

I uruchommy program. Jeżeli piszemy liczby 3 i 4, to napis "Dziękuję" zostanie wyświetlony:

 

Ten program porównuje dwie liczby

Podaj pierwszą z dwóch liczb:3

Podaj drugą z dwóch liczb:4

Liczba 3 w stosunku do 4 jest: mniejsza

Dziękuję!

 

Jeżeli jednak wpiszemy liczby 3 i 3, to napis "Dziękuję" nie zostanie wyświetlony:

 

Ten program porównuje dwie liczby

Podaj pierwszą z dwóch liczb:3

Podaj drugą z dwóch liczb:3

Liczba 3 w stosunku do 3 jest: taka sama

 

Dzieje się tak, gdyż instrukcja print "Dziękuję!" jest wewnątrz bloku warunkowego po "else:". Aby "Dziękuję" wyświetlane było niezależnie od wyniku porównania, zmieniamy program poprzez skasowanie tabulatora na początku ostatniej linii:

 

else:

    print "mniejsza"

print "Dziękuję!"

 

Teraz, po uruchomieniu programu, zobaczymy:

 

Ten program porównuje dwie liczby

Podaj pierwszą z dwóch liczb:3

Podaj drugą z dwóch liczb:3

Liczba 3 w stosunku do 3 jest: taka sama

Dziękuję!

 

Ważne: po instrukcji rozgałęziającej program (np. if, elif, else), wszystkie instrukcje należące do rozgałęzienia muszą być "wcięte" w prawo. Koniec gałęzi wyznacza pierwsza instrukcja, która jest na tym samym poziomie wysunięcia, co instrukcja rozgałęziająca.

4.16    Rozgałęzienia hierarchiczne

Poszczególne gałęzie programu można rozgałęziać na dalsze gałęzie.

Aby przejść do edycji nowego programu należy z menu File wybrać polecenie New Window.

Otworzy się nowe okno, przeznaczone do edycji programu. Zaczniemy od nadania programowi nazwy. W tym celu wybierzmy z menu File polecenie Save As. Wybieramy folder Moje dokumenty, następnie wpisujemy nazwę warunek2.py. Klikamy na Zapisz.

 

Przepiszmy następujący program:

 

# Program wielokrotnie rozgałęziony

print "Ten program przewidzi Twoją długość życia"

odp = raw_input("Czy palisz papierosy?")

if odp == "Tak" or odp == "TAK" or odp == "tak" or odp == "no pewnie":

    odp = raw_input ("A czy się zaciągasz?")

    if odp == "Tak" or odp == "TAK" or odp == "tak" or odp == "no pewnie":

        print "Nie pożyjesz długo!"

    else:

        print "To pożyjesz długo!"

else:

    print "To pożyjesz bardzo długo!"

 

 

W celu uruchomienia programu wybieramy z menu Run polecenie Run Module (lub wciskamy klawisz F5). Po chwili nasz program zostanie uruchomiony. Wypróbujmy:

 

Ten program przewidzi Twoją długość życia

Czy palisz papierosy?no pewnie

A czy się zaciągasz?nie

To pożyjesz długo!

4.17    Ćwiczenia kontrolne

I.                    Napisz program "parzyste.py", który wczyta od użytkownika liczbę całkowitą i wyświetli informację, czy jest to liczba parzysta, czy nieparzysta.

II.                 Napisz program "calkowite.py”, który wczyta od użytkownika liczbę i wyświetli informację, czy jest to liczba całkowita, czy niecałkowita.

III.               Napisz program "prk.py", który obliczy wszystkie pierwiastki rzeczywiste równania kwadratowego o postaci ax2+bx+c=0, gdzie a, b i c podaje użytkownik. Program powinien na początku sprawdzić, czy wprowadzone równanie jest rzeczywiście kwadratowe.