.:: 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.





-- back