.:: KURS PROGRAMOWANIA W JĘZYKU PYTHON ::.
- Operator równości
Po uruchomieniu IDLEa 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 "<interactive input>", line 1, in <module>
a==2
NameError: name 'a' is not defined
>>> a=2
>>> a==2
True
>>>
- 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 (użycie "<>"), 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 "<", poniższy przykład:
>>> 2>4
False
>>> 2<4
True
>>> 2>1
True
>>> 2<1
False
Do sprawdzania nieostrej większości ">=" i mniejszości "<=", poniższy przykład:
>>> 2>=4
False
>>> 2<=4
True
>>> 2<=2
True
>>> 2>=2
True
>>>
- 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
- 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
- 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
- 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
- Operator negacji
Operator negacji "not" zaprzecza wynik porównania po nim:
>>> not 1==1
False
>>> not 2==0
True
- Operator sumy logicznej
Operator sumy logicznej "or" 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
- Operator iloczynu logicznego
Operator iloczynu logicznego "and" 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
- 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
- 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.
- 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
>>>
- 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
>>>
- Tworzenie w programie rozgałęzień przy użyciu instrukcji wyboru
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.
Obserwujemy wynik:
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
- 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.
- Rozgałęzienia hierarchiczne
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!"
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!
Wnioski nasuwają się same.
- Ć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 "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.