Skoro w Pythonie mamy różne wartości liczbowe, obiekty, które reprezentują liczby. No to na pewno mamy możliwość wykonywania na nich pewnych operacji. W końcu w jakimś celu tych liczb używamy, a robimy to właśnie po to, by dynamicznie wyliczyć pewien rezultat.
Operator
Operacje na obiektach robimy m.in. za pomocą opratorów, dla liczb będą to operatory arytmetyczne. Operator to coś co po jednej stronie ma liczbę i po drugiej także, taki sobie na przykład plus – jest to operator, który po lewej ma przykładowo liczbę 2, a po prawej 3: 2 + 3 i to oczywiście równa się 5 (2+3=5). Takim samym operatorem jest, rzecz jasna…
- odejmowanie –
- mnożenie *
- dzielenie /
- modulo (reszta z dzielenia) %
- Potęgowanie **
Z jednej strony jest to podstawowa matematyka, z drugiej, będziemy tutaj mieć do czynienia ze specyfiką Pythona – takie rzeczy, na które powinniśmy zawsze zwracać uwagę.
Z podstawowymi działaniami jak odejmowanie, dodawanie czy mnożenie nie ma problemu.
Dzielenie może wyglądać trochę dziwnie, bo jest to kreska ukośna, jak przy podawaniu adresu. Dlaczego? Bo dwukropek jest zarezerwowany dla innych rzeczy w języku Python, ale też w innych językach – dlatego używamy znaku /
Teraz taka specyfika dzielenie w Pythonie, popatrz na obrazek poniżej.
Wynikiem tego kodu będzie <class 'float’>. Dlaczego, przecież zarówno a, jak i b są typu int, więc skąd nagle float. No właśnie, w Pythonie nawet jeśli na wejściu mamy dwa inty, to jeśli je podzielimy w ten sposób, za pomocą tego operatora – uzyskamy na wyjściu zawsze float. Jeśli zaś chciałbym koniecznie inta na wyjściu, to musimy użyć dwu kresek (bez skojarzeń), czyli tzw. integer division.
Operatory dodatkowe
Wymieniliśmy już cztery podstawowe operatory, które jakoś bardzo nie zaskakują, bo mieliśmy z nimi do czynienia już na lekcjach matematyki (brrr…. matma 😉 ).
Modulo
Mamy też inne – dodatkowe operatory, które ułatwiają niektóre operacje, przykładowo takie modulo, które jest resztą z dzielenia (i jest dość ważnym i przydatnym operatorem).
Jeśli podzielimy a czyli 10 przez b czyli pięć to powinniśmy otrzymać zero, sprawdźmy to:
I mamy zero! Czyli wszystko się zgadza, 10 % 5 = 0, bo 10 przez 5 dzieli się bez reszty 🙂 Nawet czytamy / jako przez, jak w adresie 🙂
Generalnie, modulo używa się zazwyczaj gdy chcemy sprawdzić czy jakaś liczba jest parzysta, czy nie, bo jeśli liczba % 2 nie jest równe zero, to liczba nie jest parzysta. W innym wypadku, mamy do czynienia z parzystością.
Potęgowanie
Mamy też operator potęgowania, czyli podwójna gwiazdka. Pojedyncza gwiazdka to mnożenie, podwójna gwiazdka to potęgowanie.
Czyli jak na obrazku, a ** b to a do potęgi b, czyli w tym wypadku 10 do potęgi 3, co da 1000.
Typy w działaniach arytmetycznych
Jeszcze jedna rzecz: baczną uwagę polecam zwracać na typy, bo jeśli przykładowo dodamy inta i floata, otrzymamy float i nie dotyczy to tylko dodawania 😉
Kolejność działań
W większości języków programowania mamy styczność ze standardową kolejnością działań, znaną nam ze szkolnych lekcji matematyki. Sprawa ma się tak samo w języku Python, gdzie, jak można się spodziewać, poniższy kod
..daje oczywiście liczbę 17, bowiem dodawanie, jak pamiętamy, jest przemienne. Oczywiście inne działania, zachowują się również tak jakbyśmy się spodziewali:
Na powyższym obrazku, mamy do czynienia z kodem, gdzie najpierw zostanie wykonane mnożenie, a później dodawanie. W wyniku otrzymamy: 43
Oczywiście jak to w matematyce, możemy „czitować”, czyli można użyć nawiasów, do ustalenia kolejności jaką chcemy mieć, czy innymi słowy do priorytetyzacji działań:
Otrzymując, jak się domyślamy, w wyniku liczbę 70.
Operatory skracające działanie
W programowaniu często mamy do czynienia z tzw. inkrementacją, lub dekrementacją. Jest to po prostu zwiększanie liczby (zmiennej) o jeden, lub jej zmniejszanie – o jeden. Oczywiści na logikę, można by napisać: zmienna = zmienna + 1, ale to brzmi jak jakieś masło maślane i jest wbrew zasadzie „Don’t reapeat youself”.
W różnych popularnych językach programowania mamy coś takiego jak a++, co jest właśnie inkrementacją i jest równoznaczne z napisaniem a = a + 1. Mamy też operator dekrementacji czyli przykładowo a–, czyli zmniejszanie o jeden za pomocą podwójnego minusa. Natomiast w Pythonie nie mamy takich rzeczy, ale co mamy…
…no właśnie mamy, jak pokazano powyżej, inny operator inkrementacji, a mianowicie np: a += 1, co „zwiększa wartość zmiennej” a o 1 (cudzysłów bo oczywiście nie zwiększa samej zmiennej a, raczej tworzy nowy obiekt z nową wartością, na który teraz zmienna a wskazuje).
Łączone operatory można wykorzystać nie tylko w inkrementacji czy dekrementacji, można je wykorzystać w większości działań, przykładowo w takim mnożeniu:
Oczywiście chodzi tu o krótszy zapis, czyli o zwięzłość, która w Pythonie ma duże znaczenie. Jeżeli w interaktywnym interpreterze użyjemy import this, to możemy nawet sobie przeczytać tzw. Zen of Python.