Wyzwanie Python #1: Instalacja środowiska i pierwsze kroki

Maciej Bartoszuk 21 lutego 2023
 

W tym poradniku dowiesz się, jak rozpocząć swoją przygodę z programowaniem w języku Python. Poradnik został przygotowany tak, aby dostarczyć tylko najpotrzebniejsze informacje w jak najbardziej zwięzłej formie, aby móc zacząć pisać swoje pierwsze programy. Wymagań jest niewiele: komputer, internet, a także dużo czasu, chęci i wytrwałości.

Oczywiście, zanim przejdziemy do technikaliów, trzeba wyjaśnić sobie, czemu warto się zajmować nauką języka programowania, w szczególności języka Python: po pierwsze, programowanie samo w sobie jest po prostu fajne. Jest to jedna z niewielu dziedzin inżynierii, gdzie w domowym zaciszu możemy używać narzędzi, które niewiele, jeśli w ogóle, różnią się od narzędzi profesjonalistów. Na pewno jest to łatwiejsze, niż zorganizować sobie własną betoniarkę i dźwig, by dla własnej rozrywki zbudować most przez pobliską rzekę. Mamy poczucie sprawczości. Wystarczy napisać parę komend, mieszczących się w paru wierszach kodu, aby zobaczyć, jak nasz własny program wykonuje naszą wolę na naszym własnym komputerze. Ponadto programowanie uczy logicznego myślenia, pewnej dyscypliny myślowej, oraz daje praktyczne zastosowanie tym wszystkim wzorom, jakich uczono nas przez lata lekcji matematyki.

Co do samego języka Python, to jest to tzw. język programowania wysokiego poziomu dla ogólnych zastosowań. Cóż to znaczy? Wysoki poziom oznacza tu, że parę komend może wykonać całkiem dużo pracy. Nie musimy tutaj przejmować się kwestiami niskopoziomowymi, jak zarządzanie pamięcią, jej alokowanie czy zwalnianie, gdy nie jest już potrzebna, a także jakim znakiem specjalnym rozpoznajemy koniec napisu itp. Możemy skupić się na samym meritum i radości programowania. Istnieje wiele wbudowanych funkcji, które pozwolą nam wykonać nudne i uciążliwe zadania programistyczne, jak np. implementacja listy. To wszystko znów w tym samym celu: aby szybciej pisać bardziej skomplikowane programy. Co zaś oznaczają ogólne zastosowania? To znaczy, że gdy nauczymy się pisać programy w języku Python, będzie całkiem wiele obszarów, w których będziemy mogli się wykazać: czy to stworzenie własnej strony internetowej (takiej z użytkownikami, logowaniem się itp.), skryptu porządkującego pliki na dysku twardym w sposób automatyczny, napisania rozwiązania na konkurs algorytmiczny, czy zajęciu się szeroko pojętą analizą danych znaną ostatnio pod hasłem data science, co zahacza o liczenie średnich w podgrupach, tabele przestawne, wizualizacje danych różnymi wykresami, testy statystyczne i uczenie maszynowe (przewidywanie defraudacji finansowych, raka itp.).

Sam język Python sięga swoją historią 1990 roku, gdy został po raz pierwszy wypuszczony przez Guida van Rossuma. Tak długa historia sprawia, że język ten jest już dobrze ugruntowany na rynku, zawiera przemyślane, sprawdzone rozwiązania, a ofert pracy jest naprawdę sporo: w chwili pisania tego tekstu w serwisie https://www.pracuj.pl są 694 oferty pracy dla tego języka, podczas gdy dla C# (popularny język programowania stworzony przez Microsoft) jest ich 678. Znajduje się on też od 2003 roku regularnie na liście 10 najpopularniejszych języków, a w styczniu 2018 roku zajmował tam 4 (TIOBE Index). miejsce. Sam język miał wpływ na nowsze języki, które się na nim inspirowały: np. Go, Julia, Ruby, Swift. Języka Python używają Google, Facebook,Amazon, Instagram, CERN, Wikipedia. We wspomnianej wcześniej data science język ten ma jedyną zaledwie konkurencję: język R. Więcej zastosowań dla tego języka znajdziemy pod linkiem. Ostatnią ciekawostką jest to, że język ten został tak skonstruowany, aby jak najbardziej przypominał język angielski i był zrozumiały dla kogoś, kto nigdy nie programował: stąd słowa kluczowe takie jak and, or, def, a także wymuszanie spójnej indentacji (więcej szczegółów w tym i następnych wyzwaniach).

Pierwsze kroki

Instalacja środowiska

Zanim rzucimy się w wir kodowania, musimy zainstlować na naszym komputerze potrzebne programy: będzie to interpreter języka Python wraz z potrzebnymi bibliotekami (w naszym przypadku posłużymy się dystrybucją Anaconda), oraz zintegrowane środowisko programistyczne (ang. integrated development environment, IDE, w naszym przypadku będzie to PyCharm).

Anaconda

Python to jeden z najpopularniejszych języków programowania na świecie. Wyróżnia go wielka wszechstronność: możemy w nim zarówno napisać program na konkurs algorytmiczny, stworzyć serwis internetowy, a także zająć się zdobywającą coraz większą popularność dziedziną wiedzy jaką jest data science. Poza samym językiem Python potrzebne nam będą różne biblioteki, dlatego warto zainstalować dystrybucję, która ułatwia zarządzanie takowymi, a także udostępnia inne narzędzia, którę mogą się nam przydać podczas procesu programowania.

Taką dystrybucją jest Anaconda, którą można pobrać stąd. Warto zwrócić uwagę na to, że istnieją dwie wersje języka Python: 2 i 3. Pomiędzy tymi wersjami istnieją zasadnicze różnice, znacznie większe niż tylko numerek przy nazwie. Aktualnie rozwijaną jest wersja 3 i to właśnie jej dotyczy ten poradnik.

Poniżej znajdują się screeny z procesu instalacji Anacondy 5.3.0 dla języka Python w wersji 3.7, wersji x86_64 na systemie Windows:

PyCharm

Programowanie polega na napisaniu odpowiednich poleceń w zwykłym pliku tekstowym. Jednak pisanie ich w zwykłym notatniku byłoby bardzo uciążliwe. Stąd stworzono bardzo wiele tzw. środowisk programistycznych, czyli programów, które ułatwiają poruszanie się po kodzie, podpowiadają możliwe nazwy identyfikatorów zmiennych czy funkcji, a także wspomagają proces znajdowania błędów (tzw. debugowanie). Dla języka Python możemy wymienić:

Najpopularniejszymi IDE dla Pythona są:

Wybór środowiska programistycznego zależy głównie od osobitych upodobań i dyskusje o wyższości jednego nad drugim są częstym elementem spotkań branżowych programistów. Najlepiej spróbować wielu, aby móc wyrobić sobie swoje własne zdanie i wybrać ten jedyny. Na potrzeby tego poradnika nasz wybór padnie na środowisko PyCharm, które ściągamy w wersji Community.

Poniżej print screeny z procesu instalacji PyCharm na przykładzie wersji 2018.2.4 w systemie Windows (pobieramy najnowszą dostępną wersję PyCharm):

Pierwszy program

Mając zainstalowaną dystrybucję Pythona oraz środowisko programistyczne dla niego możemy napisać swój pierwszy program w tym języku. Uruchamiamy PyCharma. Naszym oczom ukazuje się okno:

Ponieważ nie mamy żadnych doświadczeń z poprzednimi wersjami środowiska, wybieramy Do not import settings1. Następnie akceptujemy postanowienia licencyjne i politykę prywatności. Aby móc wybrać Accept należy przewinąć tekst do końca suwakiem po prawej:

Następny komunikat dotyczy wysyłania danych, aby ulepszyć środowisko. Tutaj wybieramy zgodnie z własnymi przekonaniami. Podczas pytania o wybór kolorystyki znów wybieramy tak, jak podpowiada nam nasz zmysł estetyczny, a następnie klikamy Skip Remaining and Set Defaults:

Wreszcie naszym oczom ukazuje się okno startowe PyCharma. Wybieramy Create New Project:

W oknie tworzenia nowego projektu podajemy nazwę nowego projektu (proponujemy kodolamacz-first-challenge) i jego lokalizację. Następnie możemy rozwinąć resztę opcji pod Project Interpreter: New Virtualenv environment. Tutaj nic nie zmieniamy, jedynie upewniamy się, że w Base Interpreter znajduje się interpreter języka Python 3.7 znajdujący się w dystrybucji Anaconda:

Naszym oczom ukaże się okno projektu. Już prawie gotowe! Teraz wystarczy dodać do niego pierwszy plik z kodem źródłowym. W tym celu klikamy prawym przyciskiem myszy na nazwę projektu (w naszym przypadku kodolamacz-first-challenge, po lewej stronie okna), a następnie wybieramy New->File. W oknie proszącym o podanie nazwy pliku wpisujemy main.py:

Wpiszmy następujący kod w nowo utworzony plik:

def main():
    print("Witaj świecie!")
if __name__ == "__main__":
    main()

Zaraz omówimy jego składowe. Jednak pewnie nie możesz się już doczekać, aby zobaczyć jego efekt działań! Dlatego w tym celu wybierz z menu u góry Run->Run ‘main’. Inną możliwością jest kliknięcie prawym przyciskiem myszy na kodzie źródłowym i wybór Run ‘main’ albo po prostu użycie skrótu klawiszowego: Shift + F10. Wtedy u dołu zobaczymy wynik działania programu:

C:\[...]\kodolamacz-first-challange\venv\Scripts\python.exe C:/[..]/kodolamacz-first-challange/main.py
Witaj świecie!

Process finished with exit code 0

Teraz, gdy nasza ciekawość została zaspokojona i wiemy już, że nasz program działa i teraz ogranicza nas tylko nasza własna wyobraźnia (i ew. umiejętności), możemy przejść do omówienia poszczególnych składowych kodu. Program napisany w języku Python to skrypt. Ma to dwie konsekwencje: po pierwsze tekst naszego programu jest interpretowany przy każdym uruchomieniu. Oznacza to, że dostarczamy użytkownikowi naszego programu kod programu, a on sam musi mieć komputer wyposażony w interpreter języka Python (np. w dystrybucję Anaconda). Przez to nie musimy sami kompilować naszego kodu na różne platformy (osobno na Windowsy, Linuksy, platformy 32- i 64-bitowe). Wystarczy, że interpreter został w ten sposób skompilowany.

Drugą konsekwencją skryptu jest to, że kod wykonuje się od góry do dołu (nie ma wyszczegółnionego miejsca rozpoczęcia programu, jakim w innych językach programowania zazwyczaj jest funkcja main()). Dlatego musimy postarać się stworzyć sobie takie miejsce rozpoczęcia programu sami, aby uniknąć bałaganu. Dlatego nasz kod zamkniemy w funkcji, którą sami nazwiemy main() (jednak jest to nasz własny wybór, funkcja ta mogłaby się nazywać dowolnie inaczej, jednak chcemy dopasować się do konwencji znanej z innych języków). Służy do tego wiersz def main():. O funkcjach napiszemy więcej w jednym z przyszłych wyzwań. Na razie powiedzmy sobie, że jest to pewien wydzielony fragment kodu o swojej własnej nazwie. Jednak samo stworzenie funkcji nie jest wystarczające. Musimy powiedzieć, że funkcja ta ma się wykonać (mówimy, że wywołujemy funkcję). W tym celu piszemy main() w czwartym wierszu. Pozostaje nam tylko upewnić się, że funkcja main zostanie wywołana tylko wtedy, gdy skrypt main.py będzie uruchamiany jako samodzielny program, a nie np. moduł większego programu. Stąd wiersz if __name__ == "__main__": (jest to instrukcja warunkowa, którą także opiszemy w kolejnych wyzwaniach).

Konstrukcja polegająca na definicji funkcji main(), a także jej wywołaniu w instrukcji warunkowej, będzie się powtarzać we wszystkich programach, które będziemy pisać. Nie martw się, jeśli póki co nie jest to dla Ciebie jasne. Ta typowa konstrukcja korzysta z elementów języka Python, które wprowadzimy dopiero później. Przede wszystkim koncentruj się na wnętrzu funkcji main, w tym wypadku jest to print("Witaj świecie!"). print to funkcja wypisująca podany komunikat (w naszym przypadku “Witaj świecie!”) na tzw. standardowe wyjście. Zazwyczaj oznacza to po prostu konsolę, w której kazaliśmy wykonać nasz program. Więcej o strumieniach możemy przeczytać na Wikipedii.

Zwróćmy uwagę na jeszcze jeden ważny szczegół: tzw. wcięcia. Liczba spacji poprzedzająca kod we wnętrzu funkcji, np. main musi być taka sama. Co więcej, liczba wcięć, czyli spacji, ew. znaków tabulacji, powinna być taka sama w całym programie, jest to tzw. dobra praktyka programistyczna: w różnych funkcjach liczba wcięć może być różna, ale nie powinniśmy z tego korzystać, bo kod będzie trudniejszy do czytania. Liczba spacji w praktyce wynosi 3 lub 4. W naszym poradniku będziemy korzystać z 4-spacjowego wcięcia. Kod wcina się w każdej konstrukcji językowej: funkcji, instrukcji warunkowej, pętli itp. Wcięcia “kumulują się” wraz z zagnieżdżaniem takich konstrukcji. Oznacza to, że w instrukcji warunkowej w funkcji napiszemy kod poprzedzony 8 spacjami. Jeśli masz doświadczenia z innymi językami programowania, to zapewne w nich funkcję wydzielania fragmentu kodu pełniły klamerki. To znak rozpocznawczy języka Python: nie ma klamerek, jest za to wymuszenie spójnej liczby wcięć, co ma zapewnić większą czytelność kodu.

Teraz, gdy już umiemy wypisać pierwszy komunikat, spróbujemy czegoś ambitniejszego. Pobierzemy napis od użytkownika. W tym celu skorzystamy ze standardowego wejścia:

def main():
    print("Witaj świecie!")
    pobrany_napis = input()
    print("Twój napis to: " + pobrany_napis)
if __name__ == "__main__":
    main()

Znów, najpierw przetestujmy nasz program. Po uruchomieniu napiszmy w konsoli na dole, w której wykonuje się nasz program, pod napisem Witaj świecie!, jakiś wyraz i wciśnijmy Enter. Program zaraz potem wypisze komunikat, powtarzając podane słowo.

C:\[...]\kodolamacz-first-challange\venv\Scripts\python.exe C:/[..]/kodolamacz-first-challange/main.py
Witaj świecie!
Witaj
Twój napis to: Witaj

Process finished with exit code 0

Teraz wyjaśnienie: input() jest funkcją, która pobiera napis podany przez użytkownika ze standardowego wejścia (czyli, jak się przekonaliśmy, tego, co użytkownik napisze w konsoli, w której uruchomiliśmy nasz program). Cały wiersz pobrany_napis = input() oznacza, że tak pobrany napis ma zostać zapisany pod identyfikatorem pobrany_napis. Dokładniej, pobrany_napis to tzw. zmienna. Zmiennym poświęcimy dużo miejsca w następnym wyzwaniu, jednak na razie powiedzmy sobie, że jest to pojemnik na dane. Następnie wywołujemy ponownie funkcję print, jednak to, co się tu zmieniło, to podany argument: "Twój napis to: " + pobrany_napis. Taki zapis, konkretnie operator dodawania w przypadku napisów, oznacza, że łączymy dwa napisy w jeden (profesjonalnie takie złączenie nazywamy konkatenacją). Np. wynikiem dodawania "aa"+"bb" będzie "aabb".

Zadanie 1

Teraz zadanie dla Was! Korzystając z wiedzy, jaką przedstawiliśmy do tej pory (umiejętność założenia projektu, dodania pliku, napisania szablonu programu, obsługi standardowego wejścia i wyjścia, konkatenacji napisów) napiszcie program (najlepiej w nowym projekcie), który wyświetla prośbę o podanie imienia i następnie nazwiska, pobiera te dwa napisy od użytkownika, a następnie się z nim wita:

Podaj swoje imię:
Jan
Podaj swoje nazwisko:
Kowalski
Witaj Jan Kowalski

Maciej Bartoszuk

Ukończył z wyróżnieniem informatykę na wydziale Matematyki i Nauk Informacyjnych Politechniki Warszawskiej, gdzie aktualnie pracuje w zakładzie Sztucznej Inteligencji i Metod Obliczeniowych. Tam też od 2013 roku prowadzi zajęcia dydaktyczne z programowania w R, Pythonie, C/C++, C#. Uczestnik studiów doktoranckich w Instytucie Podstaw Informatyki Polskiej Akademii Nauk w latach 2013-2015. W 2018 roku obronił doktorat z wyróżnieniem na swoim rodzimym wydziale: System do oceny podobieństwa kodów źródłowych w językach funkcyjnych oparty na metodach uczenia maszynowego i agregacji danych, który obejmuje zarówno algorytmy przetwarzania kodów źródłowych programów, jak i data science. Współautor książki Przetwarzanie i analiza danych w języku Python wydanej przez PWN. Ponadto trener na bootcampach Data Science, gdzie uczy programować w języku Python pod kątem analizy danych.
Komentarze
Ostatnie posty
Data Science News #202
Data Science News #201
Data Science News #200