In [1]:
%%javascript
$.getScript('http://kmahelona.github.io/ipython_notebook_goodies/ipython_notebook_toc.js')

Operatory


Operator Nazwa Wyjaśnienie Przykłady
o
p
e
r
a
c
j
e

a
l
g
e
b
r
a
i
c
z
n
e
+ Plus Dodaje dwa obiekty. 3 + 5 daje 8.'a' + 'b' daje 'ab'.
Minus Daje liczbę przeciwną do danej liczby bądź odejmuje jedną liczbę od drugiej. –5.2 daje liczbę ujemną.

50 – 24 daje 26.

_*_ Mnożenie Daje iloczyn dwóch liczb bądź zwraca napis powtórzony zadaną liczbę razy. 2 _*_ 3 daje 6.

'la' _*_ 3 daje 'lalala'.

_**_ Potęgowanie Zwraca x do potęgi y. 3 _**_ 4 daje 81 (czyli 3 _*_ 3 _*_ 3 _*_ 3).
/ Dzielenie Dzieli x przez y. 4 / 3 daje 1 (ponieważ dzielimy dwie liczby całkowite).

4.0 / 3 oraz 4 / 3.0 daje 1.3333333333333333.

// Dzielenie całkowite (ang. floor division) Zwraca wynik dzielenia całkowitego. 4 // 3.0 daje 1.
 % Dzielenie modulo Zwraca wynik z dzielenia modulo, czyli po prostu resztę z dzielenia. 8 % 3 daje 2.

-25.5 % 2.25 daje 1.5.

o
p
e
r
a
c
j
e

b
i
t
o
w
e
<< Przesunięcie bitowe (ang. shift) w lewo Przesuwa daną liczbę o zadaną liczbę bitów w lewo (pamiętaj, że liczby są zapisywane w pamięci postaci dwójkowej, czyli przez 0 i 1). 2 << 2 daje 8. 2 to 10 w zapisie dwójkowym. Przesunięcie w lewo o 2 bity daje 1000, czyli 8 w zapisie dziesiętnym.
>> Przesunięcie bitowe w prawo Przesuwa daną liczbę o zadaną liczbę bitów w prawo. 11 >> 1 daje 5. 11 w zapisie dwójkowym to 1011, czyli przesuwając o 1 bit w prawo dostajemy 101, czyli 5 w zapisie dziesiętnym.
& Iloczyn bitowy (bitowe „i”, ang. bitwise AND) Zwraca iloczyn bitowy wszystkich odpowiadających bitów podanych liczb. 5 & 3 daje 1.
| Suma (alternatywa) bitowa (bitowe „lub”, ang. bitwise OR) Zwraca sumę bitową wszystkich odpowiadających bitów podanych liczb. 5 | 3 daje 7.
^ Bitowa różnica symetryczna (bitowe „albo”, ang. bitwise XOR) Zwraca bitową różnicę symetryczną wszystkich odpowiadających bitów podanych liczb. 5 ^ 3 daje 6.
~ Odwrócenie wszystkich bitów (ang. bitwise invert) Odwrócenie wszystkich bitów x daje –(x+1). ~5 daje –6.
p
r
z
y
r
ó
w
n
a
n
i
a
< Mniejsze niż Zwraca wartość logiczną zdania „x mniejsze od y”. Wszystkie operatory porównania zwracają True (prawda) lub False (fałsz). Zwróć uwagę na wielkie litery na początku. 5 < 3 daje False, a 3 < 5 daje True.

Porównania mogą być dowolnie łączone: 3 < 5 < 7 daje True.

> Większe niż Zwraca wartość logiczną zdania „x większe od y”. 5 > 3 daje True.
<= Mniejsze lub równe Zwraca wartość logiczną zdania „x mniejsze lub równe y”. x = 3; y = 6

x <= y daje True.

>= Większe lub równe Zwraca wartość logiczną zdania „x większe lub równe y”. x = 4; y = 3

x >= 3 daje True.

== Równe Zwraca wartość logiczną zdania „x równe y”. x = 2; y = 2; x == y daje True.

x = 'str'; y = 'stR'; x == y daje False.

x = 'str'; y = 'str'; x == y daje True.

 != Nie jest równe Zwraca wartość logiczną zdania „x nie jest równe y”. x = 2; y = 3

x != y daje True.

o
p
e
r
c
j
e

l
o
g
i
c
z
n
e
not Zaprzeczenie logiczne (logiczne „nie”, ang. boolean NOT) Jeśli x jest prawdą, zwracane jest False. Jeśli x jest fałszem, zwracane jest True. x = True; not x daje False.
and Iloczyn logiczny (logiczne „i”, ang. boolean AND) x and y zwraca x, jeżeli x jest fałszem, w przeciwnym wypadku zwraca y x = False; y = sin(30)

x and y daje False, ponieważ x jest fałszem. W tym przypadku Python nie oblicza wartości y, ponieważ w trakcie wykonywania iloczynu okazuje się, że lewa strona wyrażenia jest nieprawdą, co oznacza, że na pewno całe wyrażenie jest nieprawdą, niezależnie od wartości logicznej y. Nazywa się to warunkowym obliczaniem wartości wyrażenia (ang. short-circuit evaluation).

or Suma logiczna (logiczne „lub”, ang. boolean OR) Jeśli x jest prawdą, zwracane jest x, w przeciwnym wypadku zwracane jest y. x = 3; y = False

x or y zwraca 3. Warunkowe wyliczanie wartości również tutaj ma zastosowanie.

o
p
e
r
c
j
e

n
a

z
b
i
o
r
a
c
h
| Suma zbiorów Zwraca zbiór wszystkich elementów które są w pierwszym zbiorze lub są w drugim zbiorze. set([1,3,5]) | set([7,3]) daje set([1,3,5,7]).
Różnica zbiorów Zwraca zbiór elementów które są w pierwszym zbiorze i nie są w drugim zbiorze. set([1,3,5]) − set([7,3]) daje set([1,5]).
& Przecięcie (część wspólna, iloczyn) zbiorów Zwraca zbiór elementów które są w pierwszym zbiorze i są w drugim zbiorze. set([1,3,5]) & set([7,3]) daje set([3]).
^ Elementy unikalne Zwraca zbiór zawierający elementy nie będące wspólne dla dwu zbiorów. set([1,3,5]) ^ set([7,3]) daje set([1,5,7]).
in Sprawdzenie czy jest elementem. Zwraca wartość logiczną zdania „x jest elementem zbioru A”. 3 in set([1,3,5]) daje True.
not in Sprawdzenie czy nie jest elementem Zwraca wartość logiczną zdania „x nie jest elementem zbioru A”. 3 not in set([1,3,5]) daje False.
< Sprawdzenie czy jest podzbiorem Zwraca wartość logiczną zdania „A jest podzbiorem zbioru B”. set([1,3]) < set([7,3]) daje False.
set([1,3]) < set([1,7,3]) daje True.
> Sprawdzenie czy jest nadzbiorem Zwraca wartość logiczną zdania „A jest nadzbiorem zbioru B”. set([1,5,3]) > set([7,3]) daje False.
set([1,5,3]) > set([1,3]) daje True.
== Sprawdzenie czy są jednakowe Zwraca wartość logiczną twierdzenia, że każdy element pierwszego zbioru jest elementem drugiego zbioru i każdy element drugiego zbioru jest elementem pierwszego. set([1,3,5]) == set([7,3]) daje False.
set([1,3,5]) == set([5,3,1]) daje True.
 != Sprawdzenie czy nie są jednakowe Zwraca wartość logiczną twierdzenia, że pierwszy zbiór nie jest jednakowy z drugim. set([1,3,5]) != set([7,3]) daje True.

Kolejność wykonania

Poniższa tabela prezentuje priorytety operatorów w Pythonie, od najwyższego (wykonywanego najpierw) do najniższego (wykonywany w ostatniej kolejności). W wyrażeniu najpierw wykonane zostaną operacje położone wyżej w tabeli, a potem te z niższych wierszy. Jeśli chcesz zmienić kolejność wykonywania działań musisz użyć nawiasów. Aby dodawanie zostało wykonane przed mnożeniem należy napisać (2 + 3) _*_ 4.

Tabela pochodzi z dokumentacji Pythona. Priorytety operatorów są dobrane tak, by były zgodne z przyzwyczajeniami wziętymi z matematyki, a także by można były popularne wyrażenia zapisać bez nawiasów. O tym, czy należy użyć nawiasów w sytuacji gdy nie są konieczne, decyduje czytelność. Jeśli program jest bardziej zrozumiały z nawiasami, to należy ich użyć. </p>

Priorytety operatorów
Operator Opis
(), [], {}, ` ` wszystkie formy naturalnie zagnieżdzone: konstrukcja krotki, listy i słownika, przekształcenie w napis
f(argumenty ...), x[indeks:indeks], x[indeks], x.atrybut wywołanie funkcji, pobranie wycinka, wydobycie elementu, dostęp do atrybutu.
_**_ potęgowanie
~x, +x, –x inwersja bitowa, liczba, liczba przeciwna (operatory jednoargumentowe).
_*_, /, //, % mnożenie, dzielenie, dzielenie całkowite i dzielenie modulo
+, – dodawanie i odejmowanie (operatory dwuargumentowe)
<<, >> przesunięcia bitowe
& iloczyn bitowy
^ bitowa różnica symetryczna
| suma bitowa
is, is not, in, not in, <, <=, >, >=, !=, == sprawdzanie identyczności, sprawdzanie przynależności, porównania.
not x zaprzeczenie logiczne
and iloczyn logicznym
or suma logiczna
lambda wyrażenie lambda

o czym warto pamiętać

operator in

operator przynaleznosci 'in' sprawdza czy wskazany element nalezy do kolekcji:

In [ ]:
'a' in u
In [ ]:
4 not in v

łączność

co do zasady operatory są lewostronnie łączne

In [ ]:
3/3/3

z wyjątkiem operatora '**' który jest łączny prawostronnie czyli 3**3**3 jest równe $3^{3^3}$

In [ ]:
3**3**3
In [ ]:
3**3**3 == 3**27

'odpakowanie' sekwencji

operatora przypisania '=' mozna uzywac w ciekawy sposob

In [ ]:
a,b,c = range(3)
In [ ]:
a 
In [ ]:
b

jak widac jednym przypisaniem nadalismy wartosci 3 zmiennym

In [ ]:
print(a,b,c)

jest to tak zwane 'odpakowanie sekwencji'. nalezy pamietac ze liczba argumentow po obu stronach musi byc zgodna

In [ ]:
a,b,c,d = (3,2,1) # błąd

Operatory porównania

operatory porównania w Pythonie mają ciekawe własności - mozna stosowac zapis 'matematyczny', niespotykany w innych jezykach

In [ ]:
a = 4
3<a<5
In [ ]:
5>a>4

'rozszerzone' operatory przypisania

Jak wiele języków programowania Python oferuje 'rozszerzone' operatory przypisania ktorych dzialanie polega na wykonaniu operacji na lewym i prawym operandzie i przypisaniu wyniku operacji do lewego operandu. Na przyklad:

In [ ]:
a = 6
a += 2
a
In [ ]:
a **= 2
a
In [ ]:
# ale uwaga na ciagi znakowe!
a = []
a += 'Ala'
a

porownywanie kolekcji

kolekcje mozna porownywac podobnie jak typy elementarne

In [ ]:
'Ola' < 'Ola2'
In [ ]:
[1,2,3] > [1,2,3,4]
In [ ]:
(1,2,3)>(1,2,3,4)
In [ ]:
{'x','y','z',1,3,5} == {5,'z',3,'x','y',1}

Sterowanie przepływem programu

pętla for

Prosze zwrócić uwage na formatowanie - wcięcia są elementem składni Pythona i wyznaczają granice logicznych bloków kodu:

for zmienna in sekwencja:
        blok kodu, który ma być powtarzany
        dopoki sekwencja elementow sie nie wyczerpie
else:
        blok kodu, który ma być wykonany
        kiedy sekwencja elementow sie wyczerpie
        (nie zostanie wykonany jeśli w bloku 
        poprzednim wykonamy komende 'break')

Sekcja 'else' jest opcjonalna.

In [ ]:
for i in range(10):
    print(i)
In [ ]:
lista = list(range(20))
lista.reverse()
lista
In [ ]:
s = 'Ala ma kota'
for i in s:
    print(i, end=' ')

Instrukcja warunkowa if

Ogolna forma instrukcji warunkowej w Pythonie jest nastepująca:

if warunek1:
    blok kodu, który ma być wykonany
    jeśli warunek1 jest prawdziwy
elif warunek2:
    blok kodu, który ma być wykonany
    jeśli warunek2 jest prawdziwy
elif warunek3:
    blok kodu, który ma być wykonany
    jeśli warunek3 jest prawdziwy
 .
 .
 .
else:
    blok kodu, który ma być wykonany
    jeśli każdy z powyższych warunków jest fałszywy

Sekcje elif oraz else sa opcjonalne. W Pythonie nie ma instrukcji 'switch/case'

In [ ]:
for i in range(10):
    if i % 2 == 0: 
        print('%i jest liczbą parzystą' % i)
    else:
        print('%i jest liczbą nieparzystą' % i)

wyrażenia warunkowe

uproszczoną formą instrukcji warunkowej sa wyrażenia warunkowe. ogólna struktura jest nstp:

<wartość jeśli warunek spełniony> if <warunek> else <wartość w p.p.>
In [ ]:
for i in range(10):
    print(i, 'jest liczbą', 'parzystą' if i % 2 == 0 else 'nieparzystą')

pętla while

while <warunek>:
    blok kodu, który ma być powtarzany
    dopóki warunek jest prawdziwy
else:
    blok kodu, który ma być wykonany
    kiedy warunek jest fałszywy
    (nie zostanie wykonany jeśli w bloku 
    poprzednim wykonamy komende 'break')

Sekcja else jest opcjonalna.

In [ ]:
# Przyklad
# znajdz 'tajemnicza' liczbe
liczba = 23
ile_prob = 6

while ile_prob:
    strzal = int(input('Wpisz liczbę całkowitą: '))
    if strzal == liczba:
        print('Gratulacje! Odgadłeś tajemniczą liczbę: ', liczba)
        break
    elif strzal < liczba:
        print('Szukana liczba jest większa od podanej. Próbuj dalej')
    else:
        print('Szukana liczba jest mniejsza od podanej. Próbuj dalej')
    ile_prob -= 1
else:
    print('Niestety, nie odgadles tajemniczej liczby :(')
print('Koniec programu')
In [ ]:
int(input('podaj liczbe:'))

'Sklejanie' sekwencji

Szczególną forma pętli for sa tzw sekwencje sklejane albo składane (ang. list comprehensions). Jest to bardzo przydatne i wygodne narzedzie. Przyjmijmy ze chce policzyc kwadraty pewnego ciagu liczb. Moge to zrobic tak

In [ ]:
kwadraty = []
for n in range(10):
    kwadraty.append(n**2)

kwadraty

ale istnieje wygodniejszy sposob:

In [ ]:
[x**2 for x in range(10)]

chce wyznaczyc iloczyn kartezjanski zbiorow A i B

In [ ]:
A = set(range(5))
B = {'a', 'b', 'c'}
print(A,B)

moge tak:

In [ ]:
C = []
for a in A:
    for b in B:
        C.append((a,b))
C

ale mozna prosciej :-)

In [ ]:
[(a,b) for a in A for b in B]

moge użyc klauzuli if zeby pominąć niektóre elementy:

In [ ]:
A = tuple(range(5))
A
In [ ]:
list( (a,b) for a in A for b in A if a != b) # odrzucam elementy diagonalne

a sumę elementów dwoch kolekcji moge policzyć tak:

In [ ]:
A = list(range(10))
B = list(range(10,0,-1))
In [ ]:
A
In [ ]:
B
In [ ]:
[a+b for a,b in zip(A,B)]