5. Python – typy danych


W Pythonie mamy wiele różnych typów zmiennych, np.:

  • numeryczne – int lub float
  • łańcuchowe/string
  • listy/lists
  • słowniki/dictionaries
  • krotki/tuples
  • zestawy/sets
  • logiczne/boolean
  • none

Nie musimy w Pythonie określać typu zmiennej, interpreter sam będzie wiedział jaki typ ma zmienna.

Typy numeryczne – int i float

W Pythonie istnieją tylko 2 typy numeryczne – int oraz float. Integer definiuje liczby całkowite, a float zmiennoprzecinkowe.

Nie ma ich więcej, żadnych long, double itd.

number = 1
print(type(number))

number2 = 1.44
print(type(number2))

#liczba typu long (np. w Java)
long = 9223372036854775807
print(type(long)) #nadal jest int

#liczba typu double (np. w Java)
double = 10.12345678910
print(type(double)) #nadal jest float
#Python sam dostosowuje typ, po dokonaniu operacji na 2 różnych wartościach
#dodajmy do siebie typ int i float, zobaczmy co wyjdzie

result = number + number2

print(type(double)) #otrzymaliśmy float
 Jeżeli mamy do czynienia z naprawdę dużymi liczbami np. 95256987128, możemy zapisać je „czytelniej” stosując znak podkreślnika (nie będzie on widoczny w terminalu)
#czytelny zapis dużych liczb

readable = 95_256_987_128

print(readable) //95256987128

Stringi, czyli łańcuchy znaków

W Pythonie nie ma typu znakowego char, wszelkiego rodzaju napisy to po prostu łańcuchy znaków.

Takie znaki możemy wyświetlać używając cudzysłowów, apostrofów lub blokowego wyświetlania za pomocą potrójnych cudzysłowów/apostrofów, Nie ma tu różnicy w wykorzystywaniu jednego lub drugiego znaku, tak jak to występuje w PHP.

Pamiętajmy też o tym, że ciągi są niemutowalne, czyli nie możemy zmienić bezpośrednio ciągu już zadeklarowanego. Aby dokonać takiej operacji należy zmieniony ciąg przypisać do zmiennej.

string_quotation = """Ea ad incididunt culpa laboris est id. 
           Ea sunt enim ullamco aliquip tempor est consectetur. 
            Laboris aute nostrud voluptate eiusmod consectetur 
            id voluptate irure incididunt irure. 
           Et elit in velit dolore nisi dolor veniam non deserunt et veniam. 
            Nisi anim cillum dolor amet. Pariatur adipisicing laboris enim 
            et anim mollit est."""

string_apostrofy = '''Ea ad incididunt culpa laboris est id. 
            Ea sunt enim ullamco aliquip tempor est consectetur. 
            Laboris aute nostrud voluptate eiusmod consectetur 
            id voluptate irure incididunt irure. 
           Et elit in velit dolore nisi dolor veniam non deserunt et veniam. 
            Nisi anim cillum dolor amet. Pariatur adipisicing laboris enim 
            et anim mollit est.'''

#nie ma różnicy pomiędzy cudzysłowem i apostrofem

print(string_quotation) 

print(string_apostrofy)

print(type("blabla"))

"""

UWAGA!

Pamiętajmy, że w łączeniu ciągów za pomocą + musimy dokonywać rzutowania typów jeżeli są różne 

"""

zmienna_int = 100

zmienna_string = "dolarów"

# poniższy zapis wygeneruje błąd

# print("Mam" + zmienna_int + zmienna_string)

print("Mam " + str(zmienna_int) + " " + zmienna_string)

Lists – listy – []

Listy działają jak tablice, mogą zawierać w sobie różne dane, nie koniecznie tego samego typu. Dane w listach możemy zmieniać. Ich porządek jest ustalony.

#---------------------------------------------------------------
#lists
#---------------------------------------------------------------

#indeksy   0       1   2           3              4
lst = ["wartość1", 2, 1.22, ["lista w liście"], "Kama"]
print(lst)

#wyświetlanie konkretnych wartości
print(lst[0])
print(lst[3])
print(lst[3][0])

print("Wyciągamy elementy listy od końca:", lst[-1])
print("Wyciągamy fragment listy od wskazanego indeksu do końca:", lst[-3:])
print("Wyciągamy całą listę:", lst[:])

#zmiana wartości listy
lst[1]=4
print(lst[1])

#zmiana wielu wartości
print("To jest lista przed zmianą wielu wartości:",lst)

print(lst[1:3]) #możemy zauważyć, że zwraca 2 pola

lst[1:3]=['a','b','c'] #kazaliśmy zamienić 2 pola, a wpisujemy 3, 'c' zostanie dopisane do listy

print("To jest lista po zmianie wielu wartości:",lst)



#dodawanie elementu
lst.append("wartość w 5 indeksie")
print(lst)

#usuwanie elementu listy
lst.remove('a')
print(lst)
#lub
lst[1:3]=[]
print(lst)

#możemy dodawać do siebie listy
print(lst+[1,5,8]) #wartości dodadzą się na końcu

#wyciąganie ostatniej wartości z listy i umieszczanie jej w zmiennej
last = lst.pop() #jeżeli chcemy wyciągnąć inną wartość to umieszczamy w nawiasie jej indeks
print(lst)
print(last)
second = lst.pop(1) #indeksy idą od 0 więc druga pozycja ma indeks 1
print(lst)
print(second)

#czyszczenie całej listy
lst[:]=[]
print(lst)#otrzymamy []

#podczas zabaw z listami możemy korzystać z wielu dostępnych metod:
"""

append()    Adds an element at the end of the list

clear() Removes all the elements from the list

copy()  Returns a copy of the list

count() Returns the number of elements with the specified value

extend()    Add the elements of a list (or any iterable), to the end of the current list

index() Returns the index of the first element with the specified value

insert()    Adds an element at the specified position

pop()   Removes the element at the specified position

remove()    Removes the first item with the specified value

reverse()   Reverses the order of the list

sort()  Sorts the list

"""
#przetestuj je wszystkie
 

Dictionaries – słowniki – {„key” : „value”}

Słowniki działają jak tablice asocjacyjne w PHP. Zamiast indeksów numerycznych używamy słownych odpowiedników.

#---------------------------------------------------------------
#dictionaries
#---------------------------------------------------------------

#deklaracja słownika jako pary klucz -> wartość (jak tablice asocjacyjne w PHP)
#dictionary = {
#    "key" : "value"
#}
osoba = {
    "name" : "Kama",
    "surname" : "Kaczmarek",
    "mail" : "kamakaczmarek@zse-zdwola.pl"
}
print(osoba)

#dostęp do konkretnej wartości, zamiast indeksu podajemy nazwę pola
print(osoba["surname"])

#dodawanie nowego elementu
osoba['employment'] = "teacher"
print(osoba)

#usuwanie klucza/wartości
del osoba['mail']
print(osoba)

"""
więcej opcji dla słowników

clear() Removes all the elements from the dictionary

copy()  Returns a copy of the dictionary

fromkeys()  Returns a dictionary with the specified keys and value

get()   Returns the value of the specified key

items() Returns a list containing a tuple for each key value pair

keys()  Returns a list containing the dictionary's keys

pop()   Removes the element with the specified key

popitem()   Removes the last inserted key-value pair

setdefault()    Returns the value of the specified key. If the key does not exist: insert the key, with the specified value

update()    Updates the dictionary with the specified key-value pairs

values()    Returns a list of all the values in the dictionary

Przetestuj każdą z nich
"""

Tuple – krotki – ()

Krotki działają jak listy, jednakże nie możemy zmieniać ich zawartości. Raz zadeklarowane – pozostają niezmienne.

#---------------------------------------------------------------
#tuple
#---------------------------------------------------------------

animals = ("kot", "pies", "koń", "modliszka", "kot",) #dodajemy na końcu przecinek, żeby python na 100% wiedział że chodzi nam o tuple a nie o funkcję

print(type(animals)) #upewniamy się, że to na pewno tuple
print(animals)

#wyświetlamy elementy
print(animals[0])
print(animals[1])

#tuple są niezmienne, dlatego mają tylko 2 możliwe metody
"""
opcje dla krotek:
count() Returns the number of times a specified value occurs in a tuple
index() Searches the tuple for a specified value and returns the position of where it was found
"""

#ile razy występuje w liście podana wartość
print(animals.count('kot')) 

#na którym indeksie występuje pierwsza wartość
print(animals.index('kot')) 

Sets – zestawy – {}

Również działają jak listy, ale ich porządek nie jest ustalony. Za każdym razem, gdy uruchomimy „sets” jej elementy zostaną wyświetlone losowo.

#---------------------------------------------------------------
#sets
#---------------------------------------------------------------

sets = {"wartość 1", "wartość 2", "wartość 3"}
print(sets)

#sets wyświetla jedynie unikalne wartości
sets = {"wartość 1", "wartość 2", "wartość 2", "wartość 3"}
print(sets)

"""
więcej opcji dla set:

add()   Adds an element to the set

clear() Removes all the elements from the set

copy()  Returns a copy of the set

difference()    Returns a set containing the difference between two or more sets

difference_update() Removes the items in this set that are also included in another, specified set

discard()   Remove the specified item

intersection()  Returns a set, that is the intersection of two other sets

intersection_update()   Removes the items in this set that are not present in other, specified set(s)

isdisjoint()    Returns whether two sets have a intersection or not

issubset()  Returns whether another set contains this set or not

issuperset()    Returns whether this set contains another set or not

pop()   Removes an element from the set

remove()    Removes the specified element

symmetric_difference()  Returns a set with the symmetric differences of two sets

symmetric_difference_update()   inserts the symmetric differences from this set and another

union() Return a set containing the union of sets

update()    Update the set with another set, or any other iterablePrzetestuj każdą z nich

Przetestuj je wszystkie
"""

Boolean – True/False

Typ boolean umożliwia zapisanie wartości logicznej True lub False. Jest to typ interpretowany jako prawda/fałsz inaczej 1/0.

Jeżeli do zmiennej jest przypisana jakakolwiek wartość to jest ona uznawana za True.

#deklaracja typu bool

logic_true = True
logic_false = False
print(logic_true)
print(logic_false)

None – absolutnie nic

None to typ danych, który oznacza, że jeszcze nic nie zostało zadeklarowane lub kiedy ma być „niczym”.

None to nie false, nie 0 to po prostu „nic”.

#deklaracja typu None

messege = None
#...
messege = "już jestem"

Rzutowanie typów

Istnieją sytuacje, w których musimy dokonać rzutowania typów (casting), aby zmienić daną na int, str, bool, list, tuple, set itp.


age = input("Ile masz lat? ")

data_type = type(age)

print(data_type)


age = int(age)

data_type = type(age)

print(data_type)



owoce = ['jabłka', 'pomarańcze', 'jabłka','gruszki']
owoce = set(owoce) #rzutujemy, bo chcemy np. unikalne wartości
print(owoce)

Zadania:

  1. Dokonaj rzutowania pomiędzy poznanymi typami.
  2. Dane są następujące zmienne (var1 – pusty string, var2 – spacja, var3 – znak nowej linii):

    1. var1 = ”
    2. var2 = ’ ’
    3. var3 = '\n’

    Używając odpowiedniej funkcji wbudowanej wydrukuj do konsoli typ każdej zmiennej w osobnej linii.

  3. Dane są następujące zmienne:

    1. var1 = None
    2. var2 = False
    3. var3 = 'True’

    Używając odpowiedniej funkcji wbudowanej wydrukuj do konsoli typ każdej zmiennej w osobnej linii.

  4. Sprawdź, czy zmienna:

    1. flag = False

    jest obiektem typu bool (instancją klasy wbudowanej bool). Wynik wydrukuj do konsoli.

    Wskazówka! Użyj funkcji isinstance().

  5. Podana jest poniższa zmienna:

    1. number =0

    Zbadaj czy zmienna number jest obiektem typu int (instancją klasy wbudowanej int). Wydrukuj 'True’ jeśli to prawda, przeciwnie 'False’.

    Wskazówka: Użyj funkcji isinstance().

    Oczekiwany wynik:

    1. True