Przyszedł czas na sprawdzenie podstaw Pythona w praktyce. Wykorzystamy do tego wspomnianą wcześniej sesję interaktywną. Po jej uruchomieniu zobaczymy mniej więcej coś takiego:

A więc… Zaczynajmy ! Na początek tradycyjnie:

print jest funkcją wypisującą tekst na ekranie.

Po naciśnięciu przycisku ENTER każde wyrażenie wprowadzone w sesji interaktywnej jest natychmiast wykonywane, a jego wynik jest wypisywany na ekranie.

Podstawy.

Python posiada swój zestaw typów wbudowanych oraz operacji podstawowych. Jak już wspomniałem wcześniej, Python jest językiem typowanym dynamicznie. Nie musimy deklarować typów zmiennych przed ich użyciem.

Możemy po prostu wykonać przypisanie:

Sesja zapamiętuje zmienną (nazwę) x oraz przypisaną do niej wartość. Podanie nazwy zmiennej w sesji interaktywnej powoduje wypisanie na ekran wartości przechowywanej w zmiennej. Zmienna x nie istnieje, dopóki czegoś do niej po raz pierwszy nie przypiszemy. W tym przypadku typem zmiennej (a tak naprawdę typem przechowywanej wartości) jest int. Mówi nam o tym wywołanie funkcji type.

Tak naprawdę każdy, nawet podstawowy typ danych, jest w Pythonie klasą.

Python jest dość intuicyjny, jeśli chodzi o podstawowe typy danych oraz operacje na nich. Możemy sprawdzić, jak radzi sobie sesja interaktywna w roli prostego kalkulatora:

Brak zaskoczeń 🙂 Ale przyjrzyjmy się temu nieco bliżej…

Podstawowe typy danych.

Python posiada szereg typów wbudowanych. Są to:
– liczby (int, float, complex): 13, 3.14, 4j + 7
– tekst (str): 'przykład nr 1', "przykład nr 2"
– lista (list): [3, 17, 'tekst', False]
– krotka (tuple): (3, 17, 'tekst', False)
– słownik (dict): ['klucz': 'wartość', 44: 77, 'status': False]
– typ logiczny (bool): True, False

Pomimo tego, że zmiennych nie musimy deklarować z konkretnym typem (dynamiczne typowanie), typ przechowywanych wartości zawsze jest ściśle zdefiniowany (silne typowanie).

Zmienne możemy modyfikować na 3 sposoby:
– używając operatorów (przy czym dla różnych typów przechowywanych wartości ten sam operator może oznaczać coś innego)
– używając ogólnych funkcji wbudowanych
– używając funkcji wewnętrznych, zdefiniowanych tylko dla pojedynczego typu (klasy)

Poćwiczmy na konkretnych przykładach…

Liczby.

Zabawa operatorami jest bardzo intuicyjna w przypadku liczb:

Jedyną ciekawostką jest tutaj dzielenie. W Pythonie 3, standardowym operatorem dzielenia jest pojedynczy ukośnik (/). Natomiast znak podwójnego ukośnika (//) wykonuje dzielenie całkowitoliczbowe (bez reszty). Operatorem reszty z dzielenia jest znak procenta (%).

Podobnie sprawa wygląda w przypadku operatorów logicznych:

Wynikiem działania operatorów logicznych jest zawsze prawda lub fałsz.

Teksty.

Klasa str reprezentuje w Pythonie wszelkiego rodzaju teksty:

Tekst możemy umieścić pomiędzy znakami pojedynczego ('') lub podwójnego ("") cudzysłowu – efekt będzie dokładnie taki sam. Jak widzimy, operator dodawania oznacza dla tekstów ich konkatenację (łączenie) w jeden wynikowy tekst.

Python posiada wiele przydatnych funkcji, dzięki którym możemy w łatwy sposób badać i modyfikować teksty. Oto kilka przykładów:

Funkcja len zwraca długość tekstu.

Tekst (obiekt klasy str) jest w Pythonie tzw. uporządkowaną kolekcją. Dzięki temu za pomocą operatora [] możemy dostać się do dowolnego elementu tej kolekcji. W przypadku tekstu są to po prostu pojedyncze litery – powyżej wyświetlamy pierwszą i czwartą literę naszego tekstu. Kolekcje są indeksowane od zera (podobnie jak tablice w większości języków programowania).

Funkcja upper klasy str zamienia wszystkie litery na ich wielkie odpowiedniki.

Jedną z najczęściej wykorzystywanych funkcji, jeśli chodzi o przetwarzanie tekstów, jest format. Dzięki niej można wygodnie formatować teksty, wstawiając do nich dowolne wartości.

Listy.

Listy to takie dużo bardziej inteligentne i intuicyjne tablice 🙂 W Pythonie można w nich przechowywać różnego typu wartości:

Znakiem rozpoznawczym listy są nawiasy kwadratowe. Podobnie, jak w przypadku tekstów (a także krotek), możemy dostać się do każdego przechowywanego obiektu za pomocą operatora [], czyli:

Podobnie jak wcześniej, lista jest indeksowana od zera. Co ciekawe, stosując indeks -1, możemy pobrać element każdej kolekcji, a więc również listy:

Jest to sposób niezależn y od ilości elementów w kolekcji.

Kolejnym przydatnym elementem języka są tzw. wycinki, czyli możliwość uzyskania podzbioru kolekcji (tutaj listy):

Zapis lista[1:4] oznacza, że interesuje nas zakres od elementu o indeksie 1 do elementu o indeksie 4. Trzeba pamiętać o tym, że ten przedział jest lewostronnie domknięty i prawostronnie otwarty. Oznacza to, że w wynikowej liście znajdzie się element o indeksie 1, ale nie znajdzie się element o indeksie 4. Rezultaty widać powyej.

Podobnie jak teksty, listy można łączyć ze sobą:

Wynik jest dość intuicyjny – dodawana lista jest po prostu doklejana do pierwszej.

Na listach można też wykonywać szereg zdefiniowanych operacji – zarówno ogólnych dla kolekcji (np. funkcja len), jak i typowych dla samych list. Bardzo szybko można posortować naszą listę:

lub dodać nowy element na jej końcu:

Wszystko wygląda tutaj bardzo prosto i intuicyjnie.

Krotki.

Krotki są bardzo podobne do list. Zasadnicza różnica polega na tym, że krotki są niezmienne – podobnie do tekstów. Nie można zmodyfikować krotki po jej utworzeniu. Drugim wyróżnikiem są tutaj nawiasy okrągłe zamiast kwadratowych:

Jak widać powyżej, podobnie do tekstów i list (również kolekcji), krotki można indeksować, dodawać do siebie, tworzyć z nich wycinki i sprawdzać ich długość funkcją len.

Z powodu niezmienności nie rozszerzymy krotki o kolejny element (brak funkcji append), ani nie zamienimy wartości wybranego elementu na inną:

Słowniki.

Słowniki implementują znane z innych języków programowania typy nazywane tablicami asocjacyjnymi lub nieuporządkowanymi mapami. Słownik przechowuje w sposób nieuporządkowany pary klucz:wartość.

Wygląda to tak:

Podając klucz jako indeks, możemy się dostać do przechowywanej wartości. Przykładowe metody keys oraz values pozwalają wyświetlić wszystkie klucze oraz wartości pzrechowywane w słowniku.

Podsumowanie.

Nasza zabawa z podstawowymi typami danych w Pythonie dobiegła końca. Zachęcam do własnych eksperymentów – powyżej ledwie spojrzeliśmy na ten ciekawy temat. Mogę was zapewnić, że te podstawowe typy danych Pythona doskonale się uzupełniają i każdy będzie przez Was często wykorzystywany.

Zachęcam również do dodawania komentarzy i opinii dotyczących tego wpisu i nauki Pythona. Chętnie wezmę pod uwagę Wasze sugestie dotyczące tego artykułu – wolałbym w pierwszej kolejności opisać tematy najbardziej Was interesujące.

W następonych wpisach z serii będziemy poznawać kolejne konstrukcje języka oraz bibliotekę standardową Pythona.