4. Operatory matematyczne, porównania i logiczne - majsylw/Introduction-to-programming-in-python GitHub Wiki

Gdy wiemy już, jakie typy danych możemy przechowywać, czas dokonać pierwszych operacji na nich!

Podstawowe operatory arytmetyczne

Język Python udostępnia typowe operacje powszechnie znane z lekcji matematyki:

  • dodawanie (+)
  • odejmowanie (-)
  • mnożenie (*)
  • dzielenie (/)
  • reszta z dzielenia, czyli dzielenie modulo (%)
  • potęgowanie (**)

Teraz prosty program ilustrujący wykorzystanie tych operatorów:

def main():
    x = 7
    y = 3
    
    suma = x + y
    print("Dodawanie: ", suma)
    
    roznica = x - y
    print("Różnica: ", roznica)
    
    iloczyn = x * y
    print("Iloczyn: ", iloczyn)
    
    iloraz = x / y
    print("Iloraz: ", format(iloraz, ".2f"))
    
    reszta = x % y
    print("Reszta z dzielenia: ", reszta)
    
    potega = x ** y
    print("Potęga 7 do 3: ", potega)
    
main()
## Dodawanie: 10
## Różnica: 4
## Iloczyn: 21
## Iloraz: 2.33
## Reszta z dzielenia: 1
## Potęga 7 do 3: 343

Operator przypisania i operatory złożone

Jak już pewnie, Czytelniku, zdążyłeś zauważyć szczególne miejsce w programowaniu zajmuje operator przypisania =, który znaczy tyle, co: to jest, tyle wynosi. Jest to operacja inicjalizowania zmiennej, czyli posługując się terminologią z poprzednich lekcji - wkładania pewnej wartości do pudełeczka nazwanego przez nas w pewien specyficzny sposób. Czasami zajdzie potrzeba, aby zmodyfikować wartość stworzonej już zmiennej na podstawie dotychczasowej wartości już w niej przechowywanej. Wyobraźmy sobie, że mamy 3 kulki w koszyczku. Teraz chcemy dodać jeszcze 2 nowe kuleczki do koszyka. Na podstawie dotychczasowej wiedzy moglibyśmy napisać:

liczba_kulek_w_koszyku = 3
liczba_kulek_w_koszyku = liczba_kulek_w_koszyku + 2
print(liczba_kulek_w_koszyku)
## 5

Jednak taki zapis zajmuje sporo miejsca i można go w pewien sposób skrócić:

liczba_kulek_w_koszyku = 3
liczba_kulek_w_koszyku += 2
print(liczba_kulek_w_koszyku)
## 5

Operator += jest operatorem, który modyfikuje zmienną stojącą po lewej stronie, dodając do jej dotychczasowej wartości wartość stojącą po prawej stronie. Analogicznie mamy operatory -=, *=, /=, %=.

Warto przy okazji zaznaczyć, że w języku Python, w przeciwności do wielu innych popularnych języków, nie występuje operator ++, zwiększający wartość zmiennej o 1. Stąd trzeba pisać zmienna += 1.

Operatory porównań

Przejdźmy teraz do operatorów porównań. Można je postrzegać dokładnie tak samo, jak operatory arytmetyczne, takie jak dodawanie, jednak ich wynikiem są wartości logiczne, tj. prawda (True) albo fałsz (False). Zacznijmy od przykładu:

logiczna = 4 < 5
print(logiczna)
## True

oraz:

logiczna = 6 >= 10
print(logiczna)
## False

Operatory porównania sprawdzają relację pomiędzy dwiema zmiennymi i zwracają wartość logiczną, czy sprawdzana relacja zachodzi (True) czy nie (False). Oto lista operatorów logicznych w języku Python:

  • < - mniejsze
  • <= - mniejsze równe, zwróćmy uwagę, że zapisujemy tak jak czytamy, nie ma operatora =< (równe mniejsze)
  • > - większe
  • >= - większe równe
  • != - różne
  • == - równa się.

Tutaj bardzo ważne jest, aby odróżniać operator przypisania (=) od operatora porównania (==). To bardzo częsty błąd. Operator = nie jest symetryczny, ma na celu przekopiowanie wartości z prawej do lewej, podczas gdy operator == jest operatorem zwracającym wartość logiczną, jest on operatorem symetryczym, a pisząc to mam na myśli tyle, że tutaj nie ma znaczenia zamienienie kolejnością argumentów. Poniżej prosty kod, który ilustruje działanie poszczególnych operatorów:

def main():
    x = 7
    y = 3
    
    print(str(x) + "<" + str(y) + " == " + str(x < y))
    print(str(x) + "<=" + str(y) + " == " + str(x <= y))
    print(str(x) + ">" + str(y) + " == " + str(x > y))
    print(str(x) + ">=" + str(y) + " == " + str(x >= y))
    print(str(x) + "==" + str(y) + " == " + str(x == y))
    print(str(x) + "!=" + str(y) + " == " + str(x != y))

main()
## 7<3 == False
## 7<=3 == False
## 7>3 == True
## 7>=3 == True
## 7!=3 == True
## 7==3 == False

Zauważ, że w powyższym kodzie nie przekazałam kilku argumentów do funkcji print, tylko zastosowałam wielokrotne sklejanie napisów: najpierw konwertujemy x do napisu, potem doklejamy napis reprezentujący relację logiczną (np. "<="), następnie skonwertowaną do napisu wartość y, by ostatecznie dokleić wynik działania danego operatora.

Operatory logiczne

W temacie operatorów pozostały nam jeszcze operatory logiczne, czyli takie, których argumentami są wartości logiczne oraz ich wynik także jest taką wartością. Są to znane nam z lekcji logiki operatory koniunkcji (and), alternatywy (or), a także zaprzeczenia (not).

Operator koniunkcji, and, utożsamiany z polskim i. Zwraca wartość True wtedy i tylko wtedy, gdy oba argumenty są równe True. Operator alternatywy, or, utożsamiany z polskim lub. Zwraca wartość True wtedy i tylko wtedy, gdy przynajmniej jeden argument jest równy True (uwaga: prawdę otrzymamy również gdy oba warunki będą prawdziwe). Operator zaprzeczenia, not, utożsamiany z polskim nie. Zwraca wartość przeciwną, niż sprawdzany argument.

print("1 i 1: " + str(True and True))
## 1 i 1: True
print("0 i 1: " + str(False and True))
## 0 i 1: False
print("1 i 0: " + str(True and False))
## 1 i 0: False
print("0 i 0: " + str(False and False))
## 0 i 0: False

print("1 lub 1: " + str(True or True))
## 1 lub 1: True
print("0 lub 1: " + str(False or True))
## 0 lub 1: True
print("1 lub 0: " + str(True or False))
## 1 lub 0: True
print("0 lub 0: " + str(False or False))
## 0 lub 0: False

print("nie 1: " + str(not True))
## nie 1: False
print("nie 0: " + str(not False))
## nie 0: True

# Przykład zastosowania
wiek = 35
czy_wiek_produkcyjny = (18 <= wiek and wiek <= 65)
print(czy_wiek_produkcyjny)
## True

W temacie operatorów na tę lekcję to już wszystko, w następnej poznamy jakie możliwości daje nam tworzenie własnych funkcji.