Python typy danych i operatory z przykładami - Avendi
Szybki kontakt




Python – operatory

Na początek przypomnienie dotyczące operatorów, których możemy używać w Pythonie.

OperatorOpisPrzykład
+dodawanie2+2 = 4
odejmowanie6-1 = 5
*mnożenie7*2 = 14
/dzielenie zmiennoprzecinkowe14 / 5 = 2.8
//dzielenie całkowite14 // 5 = 2
%dzielenie modulo (reszta z dzielenia)14 % 5 = 4 (bo 2*5+4 = 14)
**potęgowanie2**8 = 256
+=zwiększ oa=1; a+=1 (wynik: a=2)
-=zmniejsz oa=1; a-=1 (wynik: a=0)
*=pomnóż przeza=2; a*=3 (wynik: a=6)
/=podziel przez (dzielenie zmiennoprzecinkowe)a=5; a/=2 (wynik: a=2.5)
//=podziel przez (dzielenie całkowite)a=5.0; a//=2 (wynik: a=2.0)

Pojedyncze wyrażenie może zawierać wiele operatorów. Są one wykonywane w kolejności znanej z algebry tzn. jeśli nie ma nawiasów:

  • mnożenie i dzielenie wykonują się przed dodawaniem i odejmowaniem
  • jeśli jest tylko dodawanie i odejmowanie, to działania wykonuje się od lewej do prawej
  • jeśli jest tylko mnożenie i dzielenie, to działania wykonuje się od lewej do prawej
a = 3+3/2
print(a)  

#wynik 4.5

b = 20+2*4-12/5
print(b)  

#wynik 25.6

Kolejność wykonywania operatorów zmieniamy za pomocą nawiasów okrągłych.

a = (3+3)/2
print(a)  

#wynik 3.0 

b = (((20+2)*4)-12)/5
print(b) 

#wynik 15.2 

W poniższym przykładzie do zmiennej o nazwie „wynik” przypisujemy dwójkę. Dwójka to wynik wyrażenia 16/4/2.

wynik = 16/4/2   

#wynik 2

Jeśli występują nawiasy, obliczenie wartości wyrażenia arytmetycznego, zaczyna się od działań w nawiasach najbardziej wewnętrznych, tj. tych, w których nie ma już innych nawiasów.

wynik = 16/(4/2)   # wynik = 8

Python – wbudowane typy danych

Python obsługuje następujące typy danych:

  • numeryczne (liczbowe): int, float, complex
  • tekstowe: str
  • sekwencji: list, tuple
  • odwzorowania (mapping type): dict
  • zestawów (set types): set, frozenset
  • logiczne: bool
  • binarne: bytes, bytearray

Są one wbudowane tzn. można z nich korzystać bez konieczności importowania zewnętrznej biblioteki.

Typ int (ang. integer) reprezentuje liczby całkowite dodatnie lub ujemne bez kropki dziesiętnej. Nie mają one limitu dopuszczalnych wartości tzn. mogą być tak długie, jak tylko chcesz. Ograniczeniem jest ilość pamięci Twojego komputera. Przykłady przypisania danych typu integer do zmiennych a, m, p.

a = 2017
m = -8 + 2
p = 314159265358979323846264338327950288419716939937510582

Typ float (zmiennoprzecinkowy) reprezentuje liczby rzeczywiste. Składają się one z części całkowitej i ułamkowej. Separatorem dzielącym część całkowitą od ułamkowej jest w Pythonie kropka.

e = 2.718281828459045
volume_of_the_sun = 1.4e27 

Liczby zespolone (complex) – zapisywane są jako suma części rzeczywistej i części urojonej. Część urojona oznaczana jest przez dostawioną na jej końcu literę „j”. Wartości rzeczywista i urojona przechowywane są jako typ float.

c1 = 0 + 2j
r = c1.real
i = c1.imag
c2 = complex(0,1)

Typ tekstowy (str) – reprezentuje sekwencje (ciągi) danych znakowych. Określa się też jako napisy, łańcuchy znaków.

Napisy ograniczamy cudzysłowami lub apostrofami. Jeżeli początek napisu oznaczony został cudzysłowem, powinien on zostać zakończony cudzysłowem. Jeśli oznaczony został apostrofem powinien zostać zakończony apostrofem.

wiadomość = "Spotkajmy się"
print(wiadomość)
w2 = 'Godzina piąta'
print(w2)

#wynik
Spotkajmy się
Godzina piąta

W napisach ograniczonych cudzysłowami można używać apostrofów. W napisach ograniczonych apostrofami można używać cudzysłowów:

message1 = 'I\'m so glad'
message2 = "I'm so glad"

Napisy ograniczone pojedynczymi cudzysłowami lub apostrofami muszą kończyć się przed końcem linii. Napisy mogą ciągnąć się przez wiele linii, jeżeli ograniczymy je potrójnymi cudzysłowami lub apostrofami:

cytat = '''Cytat z Ojca Chrzestnego:
"It's not personal. It's strictly business."'''
print(cytat)

lub

cytat = """Cytat z Ojca Chrzestnego:
'It's not personal. It's strictly business.'"""
print(cytat)

Napisy można łączyć (sklejać) operatorem + oraz multiplikować operatorem *:

'Szkolenie ' + 'z Pythona' # 'Szkolenie z Pythona'
'Witaj' + '!' * 3  # 'Witaj!!!'

Typ danych lista – lista to uporządkowana kolekcja elementów. Elementy listy mogą być zmieniane oraz mogą występować duplikaty. Więcej informacji o listach znajdziesz w artykule Python lista

Typ danych krotka (ang. tuple) – krotka to uporządkowana kolekcja elementów. Elementy krotki nie mogą być zmieniane. Krotka może zawierać duplikaty. Więcej informacji na temat krotki znajdziesz w artykule Python krotka

Typ danych dict – słownik (ang. dictionary) składa się ze zbioru par klucz-wartość. Każda para klucz-wartość odwzorowuje klucz na powiązaną wartość. Klucze muszą być unikalne. Przykład:

kontakty = {
    "Jan" : 938477566,
    "Jacek" : 938377264,
    "Janusz" : 947662781
}

Typ danych zestaw (ang. set) – to nieuporządkowany typ danych kolekcji. Jest on iterowalny, zmienny i nie zawiera zduplikowanych elementów. Zestaw, w przeciwieństwie do listy, posiada zoptymalizowaną, opartą o tablicę haszującą, metodę sprawdzania, czy określony element jest w nim zawarty. Set tworzymy w następujący sposób:

owoce =  {"jabłko", "gruszka", "śliwka"}
print(owoce)

Typ danych zestaw frozen (ang. frozenset) – to niezmienna wersja obiektu zestaw (set). Elementów w obiekcie frozenset nie można zmieniać.

owoce = {"jabłko", "gruszka", "śliwka"}
print(owoce)

Typ danych logiczny (ang. bool) – umożliwia ocenę dowolnego wyrażenia i uzyskanie odpowiedzi Prawda lub Fałsz.

print(2<3) #wynik True
print(2>3) #wynik False

Typ bytes – jest kontenerem do przechowywania bajtów. W przykładzie litera b przed słowem „ala” sygnalizuje, że to jest typ byte a nie string. Typ byte nie jest mutowalny.

imię = b"ala"

Typ bytearray to zmienna (mutowalna) wersja typu bytes.

Sprawdzanie typu danych obiektu

Aby sprawdzić typ danych dowolnego obiektu w Pythonie, należy użyć funkcji type():

x = 2; y = '2'
print(type(x), type(y))

#wynik
<class 'int'> <class 'str'>

W przykładzie do zmiennej x przypisujemy dwójkę jako liczbę, a do zmiennej y przypisujemy dwójkę jako tekst.

Ustawianie typu danych

Typ danych ustawiamy przypisując daną wartość do zmiennej. Nie deklarujemy jakiego typu ma być zmienna. Przyjmuje ona taki typ, jaki jest w przypisanej do niej wartości. Przykłady:

PrzykładTyp danych, który zostanie ustawiony dla zmiennej z
z = "Ala"
string (tekst)
z = 5
int (liczba całkowita)
'5'
string (tekst)
z = 1.3
float
z = ['Ala', 'Ola']
lista
z = ('Ala', 'Ola')
krotka (ang. tuple)
z = {'imię': "Jan", 'punkty': 21}
słownik (ang. dictionary)
z = {'Ala', 'Ola'}
set
z = frozenset({'Ala', 'Ola'})
frozenset
z = True
bool
z = 2+4j
complex
z = b"Ala"
bytes
z = bytearray(3)
bytearray

Jeśli spróbujemy użyć zmiennej, której wcześniej nie nadaliśmy żadnej wartości otrzymamy komunikat o błędzie:

print(a)

Traceback (most recent call last):
  File "C:\Users\Basia\Desktop\bb.py", line 1, in <module>
    print(a)
NameError: name 'a' is not defined

Konstruktory typu danych

Za pomocą konstruktorów możesz przypisać do zmiennej typ danych niezależny od typu wartości, którą przypisujemy. W poniższym przykładzie do zmiennej z przypisujemy wartość 5, która jest tekstem (piątka jest ujęta w apostrofy). Po sprawdzeniu typu zmiennej z otrzymujemy wynik ‚int’, gdyż za pomocą konstruktora int zmieniliśmy typ przypisywanej wartości z tekstu na int.

z = int('5')
print(type(z))

<class 'int'> #wynik

Konstruktory typu danych np. int, float, string nie są funkcjami. Są to konstruktory obiektów. Przykładowo int tworzy obiekt liczba całkowita.

Ciekawostka! Funkcja type() zwraca typ obiektu lub zwraca obiekt nowego typu na podstawie przekazanych argumentów. W poniższym przykładzie:

  • do zmiennej z przypisujemy wartość 5.2 – jest to wartość typu float i na jej podstawie zmienna z przyjmuje typ float
  • do zmiennej y przypisujemy wartość tekstową ‚123’. W wyniku otrzymujemy wartość 123.00, gdyż za pomocą funkcji type() przypisujemy zmiennej y typ float (w przykładzie: y = type(z))
    z = 5.2
    y = type(z)('123')
    print(y)
    

    określa jakiego typu jest wartość w z czyli zwraca klasę. następna para nawiasów z 123 uruchamia konstruktor tej klasy.

    Konwersja int na float (typ float jest szerszy)

    x = 12 # int
    y = 12.0  # float
    z = float(12) # float
    p = int(3.14) # p = 3 typu int
    

    Konwersja float na complex (typ complex jest szerszy). Jak sumujemy dwie wartości liczbowe nie tego samego typu python zaminm wyklna sumę musi uzgodnić typy. Np int i float. Najpierw przekształci int na float. Szerszy jest bardziej konwertowany. Wyjątek dzielenie int przez int w wyniku jest float. Float przez complex w wyniku jest complex. Float przez float jest float. Dzielenie dwóch floatów nie może dać complex.

    f = 1.765 # float
    c = f + 0j  # complex
    c = 1.765 + 0j  # complex
    

    Reguła: jeśli wykonujemy operacje na liczbach różnych typów, Python najpierw przekształci argumenty do szerszego typu, potem wykona operację.

    a = 2
    b = 6.0
    c = 12+0j
    
    #dodawanie
    a + b # int + float
    8.0 # float
    
    #odejmowanie
    b - a # float – int
    4.0 # float	
    
    #mnożenie
    a * 7 # int * int
    14 # int
    
    #dzielenie
    c / b # complex / float
    (2+0j) # complex
    

    Dzielenie zwraca tylko typy float lub complex.

    16/5 # = 3.2  ; int / int wynik typu float
    20/5 # = 4.0
    14//5 # = 2 (dzielenie całkowitoliczbowe)
    14%5 # = 4 (reszta z dzielenia)
    

    Uwaga.
    Jeśli jest ryzyko wykonania dzielenia przez 0, należy obsłużyć taką sytuację w sposób specjalny.

Dodaj komentarz

Twój adres email nie zostanie opublikowany.