Wprowadzenie do programowania w Pythonie

Python to język skryptowy, jest łatwy w nauce jak i zarazem jest popularny i używany w profesjonalnych projektach. Python posiada bogatą bibliotekę standardową umożliwiającą wykonanie wielu czynności.

Niniejszy artykuł stanowi wstęp do Pythona. Omawia podstawowe elementy tego języka. Jeżeli Cię to zainteresuje możesz kontynuować naukę wykorzystując liczne pełne poradniki dostępne w sieci.

Powiązane artykuły:

Pełne kursy Pythona:

Uruchamianie skryptów Pythona

Przez skrypt rozumiemy plik tekstowy o rozszerzeniu .py. By go wykonać wydajemy polecenie:

python nazwa_pliku.py

Można też wykonać (kliknąć) na plik .py bezpośrednio (jeżeli jest wykonywalny). Jeżeli wykonujemy skrypty Pythona bezpośrednio na Linuksie to pliki te muszą mieć atrybut wykonywalności (chmod 755 nazwa_pliku.py)

Witaj świecie

Zapisz podany kod jako skrypt1.py i uruchom go jedną z opisanych wcześniej metod:
print('Witaj w swiecie Pythona')
print("Jeszcze jeden raz")

Powinieneś zobaczyć dwa wiersze z tekstem ze skryptu. Ten kod prezentuje napisy (łańcuchy). W Pythonie napisy zamykane są poprzez pojedynczy lub podwójny cudzysłów. Zastosowane polecenie print służy w Pythonie do wyświetlania tekstu (w konsoli)

Oto kolejny skrypt:

hello = 'Witaj w swiecie Pythona'
print(hello[0])
print(hello[0:5])

Gdy go wykonamy zobaczymy w pierwszym wierszu "W" a w drugim "Witaj". W skrypcie tym przypisaliśmy napis "Witaj w swiecie Pythona" do zmiennej hello a następnie skorzystaliśmy z operatora indeksowania by wyświetlić określony fragment napisu. Operator indeksowania ma postać: nazwa_zmiennej[od:do] gdzie od:do oznacza numery porządkowe w napisie (od którego wyświetlać / do którego wyświetlać).

Jeżeli podamy tylko jedną liczbę to zostanie wyświetlony znak z pozycji o podanym numerze. Dozwolone są też inne kombinacje:

hello = 'Witaj w swiecie Pythona'
print(hello[:5])
print(hello[6:])

Pierwszy przykład wyświelone zostaną znaki od pierwszego do piątego włącznie. W drugim od siódmego do ostatniego. Zwróć uwagę na to że indeks numerowany jest od zera - :5 oznacza odcięcie na szóstym elemencie a 6: rozpoczęcie od siódmego w numeracji od jedynki.

Napisy można łączyć za pomocą formatowania:

hello = 'Witaj'
world = 'w swiecie Pythona'
print(f'{hello} {world}')
print('%s %s' % (hello, world))

Litera f przed napisem oznacza go do formatowania, dzięki czemu można wewnątrz niego w nawiasach klamrowych umieszczać zmienne. W efekcie uzyskamy napis Witaj w świecie Pythona. Drugi przykład dotyczy starszych wersji Pythona, w których formatowanie nie jest dostępne. Jeżeli po napisie umieścimy znak % to informujemy interpreter że ten napis ma zmienne do podstawienia. W obecnych wersjach Pythona 3 zaleca się wyłącznie stosowanie pierwszego sposobu.

Liczby

Operacje matematyczne są proste i intuicyjne. Oto przykład:

a = 2
b = 5
print(a + b)
print(a * b)
print(a / b)
print(a % b)

Znak % oznacza dzielenie modulo - zwróci resztę z dzielenia. Wynik będzie następujący:

7
10
0
2

Dzielenie zwróciło wynik zero. Dlaczego? Gdyż operujemy na liczbach całkowitych (integer, int). Liczby zmiennoprzecinkowe zapisalibyśmy w Pythonie tak:

a = 2.0
b = 5.0

Przez co otrzymalibyśmy wynik:

7.0
10.0
0.4
2.0

Instrukcje Warunkowe

Do wykonywania testów "jeżeli" służy składnia:

b = 2
a = 1
if a > b:
    print(b)
else:
    print(a)

c = 2

if a > b and a > c:
    print('a większe od b i większe od c')
elif c == b:
    print('C i B równe')
else:
    print('żaden z warunków')
Po wykonaniu skryptu zobaczymy 1 i C i B równe. Struktura składni ma postać:
if warunek:
    instrukcje
else:
    instrukcje

Należy zwrócić uwagę na wcięcia - są one obowiązkowe! Struktura blokowa jest elementem składni Pythona (w C/C++ czy np. PHP odpowiednikiem są nawiasy klamrowe). Jako warunki podajemy zdarzenia zwracające wartości prawda/fałsz, np.:

== - jest równe
!= - nie jest równe
< > - mniejsze, większe niż

Należy pamiętać że a = b to przypisanie (do zmiennej a przypisaliśmy wartość zmiennej b), natomiast a == b to porównanie.

Listy i tuple

Listy i tuple są sekwencjami, zbiorami różnych obiektów. W innych językach nazywane tablicami. Oto przykład:

imiona = ["zbychu", "rychu", "zdzisiu"]
print(imiona)
imiona[1] = "Pafnucy"
print(imiona[1])
print(len(imiona))
imiona.append("Hermenegilda")
print(imiona)

Na początku tworzymy listę imiona. By wyświetlić obiekt z danej pozycji korzystamy z opisanego wcześniej operatora indeksowania. Przypisanie imiona[1] = "Pafnucy" zmienia wartość drugiego (numeracja elementów rozpoczyna się od zera) elementu listy. Funkcja len zwraca ilość elementów listy. Oprócz tego listy i tuple (krotki) mają sporo innych opcji, o których powiemy później. Mogą one zawierać również np. liczby czy inne listy/tuple.

Tuple różnią się tym od list że nie można zmieniać wartości elementów tupli po jej utworzeniu. Tuplę tworzymy tak:

tupla = (1, 3, "jurek")

Na listach działają te same operatory indeksowania co dla napisów. Zwracane są wtedy konkretne elementy lub fragmenty listy.

Metody list

  • list(s) - konwertuje sekwencję s na listę
  • s.append(x) - dodaje nowy element x na końcu s
  • s.extend(t) - dodaje nową listę t na końcu s
  • s.count(x) - zlicza wystąpienie x w s
  • s.index(x) - zwraca najmniejszy indeks i, gdzie s[i] == x
  • s.pop(i) - zwraca i-ty element i usuwa go z listy. Jeżli nie podamy parametru to usunięty zostanie ostatni element
  • s.remove(x) - odnajduje x i usuwa go z listy s
  • s.reverse() - odwraca w miejscu kolejność elementów s
  • s.sort(funkcja) - Sortuje w miejscu elementy. funkcja to funkcja porównawcza

Metody napisów

  • s.capitalize() - zmienia pierwszą literę na dużą
  • s.center(długość) - Centruje napis w polu o podanej długości
  • s.count(sub) - zlicza wystąpienie podciągu sub w napisie s
  • s.isalnum() - sprawdza czy wszystkie znaki są znakami alfanumerycznymi
  • s.isdigit() - sprawdza czy wszystkie znaki są cyframi
  • s.islower() - sprawdza czy wszystkie litery są małe
  • s.isspace() - sprawdza czy wszystkie znaki są białymi znakami
  • s.isupper() - sprawdza czy wszystkie litery są duże
  • s.join(t) - łączy wszystkie napisy na liście t używając s jako separatora
l = ['a', 'b', 'c']
s = '.'
print(s.join(l))
  • s.lstrip() - usuwa początkowe białe znaki
  • s.replace(old, new) - zastępuje stary podciąg nowym
  • s.rstrip() - usuwa końcowe białe znaki
  • s.split(separator) - dzieli napis używają podanego separatora
  • s.strip() - usuwa początkowe i końcowe białe znaki

Pętle

W Pythonie mamy też kilka rodzajów pętli. Pierwsza z nich to while:

licznik = 10
wartosc = 15

while licznik <= wartosc:
    licznik += 1
    print("Jestem w while.")

Po wykonaniu kodu zobaczymy sześć Jestem w while.. Pętla ta ma postać ogólną:

while WARUNEK:
    ZDARZENIA_DLA_PĘTLI

Kolejna pętla wygląda następująco:

for liczba in range(10):
    print(liczba)

print("Petla 2:")
for liczba in range(3, 5):
    print(liczba)

print("Petla 3:")
for liczba in range(10, 100, 10):
    print(liczba)

Funkcja range tworzy listę wartości całkowitych od zera do podanej wartości (jeżeli podamy 1 argument) lub od - do (jeżeli podamy 2 argumenty). Możemy podać też trzeci parametr określający przyrost (normalnie +1). For może też iterować inne typy danych, np napisy, listy:

napis = "Zdrabniamy literki"
for litera in napis:
    print(litera)

wazywa = ["pomidor", "rabarbar", "kalafior"]
for wazywo in wazywa:
    print(wazywo)

Słowniki

Słownik to w innych językach takich jak PHP tablica asocjacyjna (haszująca) zawierająca obiekty poindeksowane za pomocą kluczy.

osoba = {"imie" : "Arthas", "nazwisko" : "Menethil"}
osoba['alias'] = "Król Liszów"

print(osoba["imie"])

for klucz, wartosc in osoba.items():
    print(klucz, wartosc)
nazwa = { "klucz" : "wartość",  "klucz" : "wartość" }

Słowniki podobne są do list, by wyświetlić określony wpis wystarczy podać jego klucz - nazwa_słownika["nazwa_klucza"]. Jako że klucze nie są liczbowym indeksem można nadawać im konkretne nazwy i przechowywać bardziej uporządkowane dane.

Funkcje

Funkcję definiujemy za pomocą instrukcji def. Oto przykład:

def nasza_funkcja(argument1, argument2):
    return f'{argument1} + {argument2}'


print(nasza_funkcja("Poczatek", "Koniec"))
def nazwa_funkcji(parametry...):
    # kod funkcji
    return wynik
Gdzie return zwraca podany obiekt, wartość (może to być też np. wywołanie innej funkcji). Zmienne utworzone wewnątrz funkcji nie są dostępne poza nią. Funkcje są podstawowym elementem dzielenia kodu na mniejsze niezależne od siebie elementy. Wykonanie jakiegoś zadania zazwyczaj składa się z wielu operacji i dla każdej można mieć funkcję (lub metodę, klasę), która się tym zajmie. Poprawia to czytelność kodu jak i ułatwia testowanie czy dalszy rozwój kodu.

Klasy

Instrukcja class pozwala definiować klasy - podstawy w programowaniu obiektowym. Klasy to w uproszczeniu reprezentacja czegoś - np. mając różne warzywa i owoce możemy mieć klasę Roślina, która dziedziczyć będzie klasa Owoc i Warzywo. Każda klasa może mieć zbiór metod i właściwości. Dla przykładu klasa Roślina może mieć metodę zwróć nazwę, klasa Owoc może mieć metodę lub właściwość zawartość cukru.

Patrząc na klasę nieco inaczej - może to być niejako zbiór podobnych funkcji. Np. jeżeli chcemy pobierać i przesyłać pliki na stronę to możemy mieć klasę, która zawierać będzie metody wyślij i pobierz oraz szereg pomocniczych implementujących potrzebne czynności. Część kodu (np. zalogowanie się na stronie) będzie używana przez obie metody co pozwala unikać duplikowania kodu.

class Koszyk:
    def __init__ (self):
        self.koszyk = []

    def dodaj(self, obiekt):
        self.koszyk.append(obiekt)

    def zwroc_koszyk(self):
        return self.koszyk

    @property
    def rozmiar(self):
        return len(self.koszyk)


zakupy = Koszyk()
zakupy.dodaj("pieczarki")
zakupy.dodaj("rukola")
print(zakupy.rozmiar)
print(zakupy.zwroc_koszyk())

Metody klasy definiowane są za pomocą def podobnie jak funkcje. Pierwszy argument każdej metody odnosi się do obiektu i zazwyczaj stosuje się nazwę self. Dzięki tej zmiennej mamy dostęp do wszystkich metod, właściwości czy przypisanych atrybutów. Metoda __init__ to specjalna metoda, która jest wykonywana przy utworzeniu obiektu klasy. Może służyć do przekazania argumentów do klasy i przypisania ich do self. Dość często są to dane potrzebne do użycia klasy (np. konfiguracja albo wymagane dane).

Programowanie obiektowe to dość duży temat i jeżeli Python Ciebie wciągnie to znajdziesz znacznie więcej na ten temat. Jest to dość ważny element programowania w Pythonie i poprawne myślenie obiektowe stanowi klucz do pisania dobrego kodu i bycia dobrym programistą.

Pełny kurs Pythona

RkBlog

Podstawy Pythona, 14 July 2008, Piotr Maliński

Comment article
RkBlog main page Search RSS Contact