Podstawowe typy danych w Pythonie

Typ Opis Przykłady wartości
int liczby całkowite 1, 42, -5, 200
float liczby rzeczywiste (dokładniej: liczby zmiennoprzecinkowe; Python używa kropki dziesiętnej, a nie przecinka) 2.5, 3.25, -12.37832
bool wartości logiczne True, False
str łańcuchy znaków "krowa", "pies"
list listy, czyli uporządkowane zbiory wartości [1, 3, 8, 2], ["koza", "owca", "kangur"]
dict słowniki, czyli nieuporządkowane pary klucz–wartość (słownik mapuje klucze na wartości) {"a": 5, "b": 10}

Python oferuje także inne typy, np. complex (liczby zespolone), tuple (krotki, czyli niemutowalne sekwencje), set (zbiory).

Mutowalność i niemutowalność

Typy danych rozróżniamy ze względu na to, czy ich wartości można zmieniać:

  • typy mutowalne (mutable) to list, set, dict,
  • typy niemutowalne (immutable) to int, float, bool, str, tuple.

To rozróżnienie jest ważne na przykład przy użyciu słowników – słowniki można indeksować tylko typami niemutowalnymi.

Rzutowanie typów

Nazwy typów są jednocześnie nazwami wbudowanych funkcji, które wykonują rzutowanie (konwersję typu). Typy zmiennych są bardzo ważne – wpływają na znaczenie operatorów. Typowym przykładem jest rzutowanie liczby na łańcuch znaków:

x = 15

print(x)    # wypisze 15

print(3*x)  # wypisze 45

x = str(x)  # rzutowanie na łańcuch, x teraz zawiera "15"

print(x)    # wypisze 15 (tu różnica typu nie jest widoczna)

print(3*x)  # wypisze 151515 (x jest teraz łańcuchem znaków, a operator * dla łańcuchów # oznacza powielanie)
Do góry

Zapis łańcuchów znaków

Łańcuchy znaków zapisujemy w cudzysłowach lub apostrofach. W Pythonie 3 łańcuchy mogą zawierać również znaki diakrytyczne.

a = "To jest łańcuch znaków"

b = 'To też jest łańcuch znaków'

print(a, b)

Indeksowanie

Do poszczególnych znaków łańcucha odwołujemy się za pomocą indeksowania w nawiasach kwadratowych. Uwaga: indeksowanie zaczyna się od zera. Python (w przeciwieństwie do większości innych języków programowania) pozwala także na indeksowanie od końca za pomocą liczb ujemnych.

text = "krowa"

text[0]     # pierwsza litera => 'k'

text[1]     # druga litera => 'r'

text[4]     # piąta, ostatnia litera => 'a'

text[-1]    # ostatnia litera => 'a'

text[-2]    # przedostatnia litera => 'w'

Za pomocą dwukropka możemy wycinać podłańcuch.

text = "informatyk"

print(text[2:6])  # od pozycji 2 do 5 => form

print(text[:3])   # pierwsze 3 znaki => inf

print(text[-4:])  # ostatnie 4 znaki => atyk

Bardziej zaawansowanym elementem jest użycie dwóch dwukropków, gdzie trzecia wartość oznacza krok:

text = "Mamy-kotka-i-pieska"

print(text[5:15:2])  # od pozycji 5 do 14, co 2 => ktaip

print(text[::3])     # od początku do końca, co 3 => Myoa-ea

print(text[::-1])    # odwrócony tekst => akseip-i-aktok-ymaM

Iteracja po łańcuchu znaków

Poszczególne znaki łańcucha możemy łatwo przeglądać za pomocą pętli for.

text = "kotwica"

for letter in text:

    print("litera:", letter)

Niezmienność łańcuchów znaków

Łańcuchy znaków w Pythonie są niemutowalnym (immutable) typem danych. Jest to jedna z cech, która odróżnia je od list. Oznacza to, że nie możemy zmienić pojedynczego znaku w istniejącym łańcuchu. Musimy utworzyć nowy łańcuch, w którym dana litera zostanie zmieniona.

text = "korek"

text[2] = "t"                 # TypeError - łańcuch znaków nie pozwala na zmianę pojedynczego znaku

text = text[:2]+"n"+text[3:]  # tworzymy nowy łańcuch

print(text)

Operacje na łańcuchach znaków

Łańcuchy znaków można dodawać (łączyć). Możemy je także mnożyć przez liczbę całkowitą (powielać). Do innych przydatnych operacji należy sprawdzanie długości (‘len’) oraz testowanie obecności podłańcucha (‘in’).

text = "Biały"

text + "stok"  # => Białystok

3*text         # => BiałyBiałyBiały

len(text)      # => 5

"a" in text    # => True

Łańcuchy znaków są obiektami i mają wiele przydatnych metod wywoływanych w notacji kropkowej. Np. zamiana na wielkie lub małe litery (upper, lower), dzielenie łańcucha według podanego znaku (split) oraz zastępowanie podłańcucha (replace):

text = "Lublin"

text.upper()               # => LUBLIN

text.lower()               # => lublin

text.split("l")            # => ['Lub', 'in']

text.replace("Lu", "Du") # => Dublin

Zauważ, że używamy notacji kropkowej text.upper(), a nie funkcji upper(text), ponieważ łańcuchy znaków są obiektami.

Operacje na znakach

Podczas pracy z łańcuchami znaków czasami przydają się również operacje na pojedynczych znakach, a w szczególności funkcje ord i chr, które zamieniają znaki na liczby całkowite i odwrotnie:

  • ord(c) zwraca kod znaku c,
  • chr(i) zwraca znak kodzie i.

Pod pojęciem „kod” rozumie się numer w kodowaniu Unicode. W podstawowych zastosowaniach litery w tym kodowaniu są ułożone alfabetycznie jedna po drugiej (dotyczy to głównie alfabetu angielskiego). W ten sposób możemy wypisać litery alfabetu angielskiego:python start = ord('A') for i in range(26): print(chr(start + i))

Do góry

Lista (list) to uporządkowana kolekcja wartości dowolnego typu.

Tworzenie listy

Listy zapisujemy w nawiasach kwadratowych:

s = []           # pusta lista

s = [8, 3, 45]   # lista trzech liczb

Listę można też utworzyć za pomocą słowa kluczowego list.

s = list("krowa")   # powstaje lista ['k', 'r', 'o', 'w', 'a']

Indeksowanie

Do elementów listy odwołujemy się za pomocą indeksów w nawiasach kwadratowych. Ważne: indeksujemy od zera. Możemy też używać indeksów ujemnych, aby liczyć od końca:

s = ["pies", "krowa", "owca", "koza"]

s[0]      # pierwszy element listy => "pies"

s[1]      # drugi element listy => "krowa"

s[-1]     # ostatni element listy => "koza"

s[-2]     # przedostatni element listy => "owca"

Za pomocą dwukropka możemy wycinać fragmenty listy:

numbers = [37, 99, 42, 7, 13, 1, 1000]

print(numbers[2:5])  # => [42, 7, 13]

print(numbers[:3])   # => [37, 99, 42]

print(numbers[-2:])  # => [1, 1000]

Operacje na listach

Przydatne funkcje:

s = [8, 3, 45]

a = len(s)    # długość listy

s.append(7)   # dodanie elementu do listy

s.sort()      # sortowanie elementów listy

t = sorted(s) # tworzy nową, posortowaną listę

              # s nie zmienia się

Zwróć uwagę, że używamy tutaj tzw. notacji kropkowej: zapisujemy s.sort(), a nie zwykłe wywołanie funkcji w postaci sort(s). Wynika to z tego, że listy w Pythonie są traktowane jako obiekty.

Listy i pętla for

Za pomocą pętli for możemy przechodzić po elementach listy:

s = [8, 3, 45]

for x in s:

    print(x)

Możemy też przechodzić po liście za pomocą indeksów (ten sposób zapisu jest bardziej podobny do tego, który stosuje się w innych językach programowania):

for i in range(len(s)):

    print(s[i])
Do góry

Słownik (dictionary, dict) pozwala przechowywać dane w postaci par: klucz – wartość. Każdemu kluczowi przypisana jest konkretna wartość. Dzięki temu możemy w prosty sposób zapisać np. informację o liczbie owoców w magazynie.

Tworzenie słownika

Słownik tworzymy przy użyciu nawiasów klamrowych.

fruits = {"apple": 5,

          "banana": 10,

          "orange": 2}



empty_dictionary = {}    # pusty słownik

Dostęp do elementów

Aby odczytać wartość przypisaną do danego klucza, używamy nawiasów kwadratowych. W ten sam sposób możemy dodać nowy element do słownika.

print(fruits["apple"])

fruits["pear"] = 3

Jeśli spróbujemy odwołać się do klucza, którego nie ma w słowniku, Python zgłosi błąd. Aby tego uniknąć, warto skorzystać z get:

print(fruits["plum"])    # => KeyError: 'plum'

print(fruits.get("plum", 0))   # jeśli elementu nie ma w słowniku,

                               # zwróci podaną wartość (0)

Przydatne operacje na słownikach

Python udostępnia kilka funkcji, które ułatwiają pracę ze słownikami:

len(fruits)        # liczba kluczy w słowniku

fruits.keys()      # wszystkie klucze, czyli 'pear', 'orange', 'banana', 'apple'

fruits.values()    # wszystkie wartości, czyli 10, 2, 3, 5

"apple" in fruits  # sprawdzenie, czy klucz istnieje w słowniku
Do góry

Python, podobnie jak większość innych nowoczesnych języków programowania, obsługuje programowanie obiektowe. Jest to już dość zaawansowany temat programistyczny, dlatego w tym miejscu podsumujemy tylko niektóre podstawowe pojęcia.

Obiekt (object) to kolekcja danych (zmiennych) oraz metod (funkcji), które operują na tych danych. W Pythonie prawie wszystkie dane, z którymi się spotykamy, są obiektami (liczby, ciągi znaków, listy, …).

Obiekty są konkretnymi instancjami klas (class). Klasę można rozumieć jako ogólny wzorzec, na podstawie którego tworzone są obiekty.

Przykład definicji klasy:

class Person:

    def __init__(self, name, age):

        self.name = name

        self.age = age

        

    def introduce(self):

        print("My name is ", self.name)

        print("I am ", self.age, "years old")

A tak tworzymy obiekty (instancje klasy) i z nich korzystamy:

homer = Person("Homer Simpson", 39)

bart = Person("Bart Simpson", 10)

homer.introduce()

bart.introduce()

W tym przykładzie:

  • Person to klasa,
  • homer i bart to obiekty,
  • name i age to atrybuty danych,
  • introduce() to metoda,
  • __init__ to metoda inicjalizująca, która jest automatycznie wywoływana podczas tworzenia obiektu.
Do góry
NAPISZ DO NAS

Twoja wiadomość została wysłana. Dziękujemy.

Napisz do nas

Jesteś w kropce?

Zanim zadasz pytanie, zapoznaj się z instrukcjami:

Prosimy o nieprzesyłanie próśb o gotowe rozwiązania. Jeśli zgłaszasz błąd, dokładnie opisz, czego dotyczy, i dołącz zrzut ekranu.

Wybierz temat

Wiadomość Zgłoszenie błędu Treści Sterowanie Logowanie Licencja