Wstęp do pythona

Z RoboCity
Wersja z dnia 10:33, 23 cze 2016 autorstwa Isj (dyskusja | edycje) (print (ang. drukuj), czyli wyświetlanie napisów)

Kilka słów o języku programowania python. Skupimy się na używaniu tego języka pozostawiając szczegóły techniczne na boku.

Jak w ogóle działa język programowania i co to jest?

Komputery są przydatne o tyle, o ile potrafią wykonać to, czego od nich chcemy.

Jednym ze sposobów przekazywania innym, w miarę rozgarniętym bytom, czego od nich oczekujemy są instrukcje. Możemy na przykład poinstruować rodzeństwo, żeby nie dotykało tej kupki części i... Przynajmniej mieć nadzieję, że instrukcje zostaną wykonane. Jednak pomijając kłopoty komunikacyjne zastanówmy się chwilę co właściwie zrobiliśmy. Po pierwsze użyliśmy znanego pewnie nie więcej niż 100mln ludzi specyficznego języka (polskiego) z jego wszystkimi zasadami wymowy czy gramatyki, żeby przy pomocy dość skomplikowanej aparatury (nasze gardło i język -- powietrze -- uszy odbiorcy) przekazać myśl opisującą jakiego zachowania oczekujemy.

Dokładnie na tym samym polega programowanie komputerów. W tej chwili jeszcze nie jest możliwe zagajenie rozmowy z komputerem w języku naturalnym, który jest zbyt zawiły i za bardzo wieloznaczny. Tym bardziej nie było to możliwe wcześniej. Z tego powodu informatycy opracowali pewne prostsze i bardziej precyzyjne języki. Ponadto zrezygnowali z rozmów z komputerami i przyjęli zasadę, że treść programu trzeba dostarczyć na piśmie, co w przypadku komputerów oznacza plik tekstowy lub tekst wprowadzony z klawiatury.

Jeśli nauczymy się zapisywać swoje intencje, w którymś z języków, które nasz komputer rozumie, będziemy mogli wykorzystywać go do różnych, mniej lub bardziej przydatnych zajęć. Jednym programistom podoba się "przekonywanie" komputerów do wyświetlania wirtualnych światów, w których inni ludzie lubią przebywać. Innym udaje się tworzyć zestawy instrukcji, dzięki którym komputer potrafi samodzielnie kierować samochodem. Kody napisane przez niektórych sterują sondami w przestrzeni kosmicznej, które muszą samodzielnie zbierać dane (są zbyt daleko żeby człowiek mógł reagować na bieżąco!) i posyłać wyniki czekającym na Ziemi ludziom. Jak widać na filmie poniżej są też tacy, którzy tworzą zestawy instrukcji do tańca na śniegu, przysiadów z pudłami i szczerej cierpliwości wobec posiadaczy kijów hokejowych.

Kiedy program steruje jakimś większym urządzeniem efekty błędów w kodzie bywają zaskakujące.


Okazuje się więc, że pomimo prostoty języków programowania, potrafimy z ich pomocą wyrażać naprawdę skomplikowane instrukcje oraz zupełnie nieźle się przy tym bawić!


Warto zwrócić uwagę na fakt, że w odróżnieniu od rodzeństwa, maszyny ciągle jeszcze są dość bezmyślne i z chęcią zrealizują dowolne instrukcje o ile tylko zapiszemy je w zrozumiały dla nich sposób. Niestety ta zaleta komputerów jest jednocześnie ich najgorszą wadą. Kiedy instrukcje są bez sensu, maszyny wykonają działanie bez sensu bez sprzeciwu. Niestety z tego powodu programowanie przypomina opiekę nad bardzo wydajnym, ale jednak ciągle "osiołkiem".

Praktyczna zasada: Jeżeli "komputer robi coś głupiego", to najwyższa pora przemyśleć instrukcje, które otrzymał; już dłużej nie da się zwlekać.


Jak zacząć programować?

Wystarczy włączyć terminal i wpisać polecenie python.

ktos@maszyna:~$ python
Python 2.7.11+ (default, Apr 17 2016, 14:00:29) 
[GCC 5.3.1 20160413] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

W odpowiedzi zostaje uruchomiony program, który czeka na nasze instrukcje i będzie je wykonywał w miarę wpisywania. Stan oczekiwania na instrukcje sygnalizowany jest wyświetleniem >>> na początku linii. Na samym początku python wyświetla też kilka dodatkowych technicznych informacji na temat języka, oraz zachętę do skorzystania z kilku instrukcji w celu poznania dalszych szczegółów. Możemy te linijki zignorować.

Kiedy już skończymy wykonywanie różnych instrukcji pythona możemy wrócić do linii poleceń terminala używając kombinacji klawiszy Ctrl-D. Możesz to sprawdzić od razu, ale nie zapomnij ponownie uruchomić pythona ponownie przed przejściem do następnych przykładów.

Przykładowe instrukcje i konstrukcje języka python

Dla wygody poniżej posługujemy się kolorowaniem składni. W terminalu nie będzie ono widoczne, ale dzięki niemu poniższe przykłady czyta się łatwiej.

print (ang. drukuj), czyli wyświetlanie napisów

Spróbujmy wykonać jedną z prostszych instrukcji, która po prostu wypisuje podany tekst. Kiedyś, kiedy będziemy pisali dłuższe programy, taka instrukcja przyda nam się na przykład do wyświetlenia wyniku, albo komunikatu, że program skończył działanie pomyślnie i wykonał to czego chcieliśmy.

>>> print("Nie będę śpiewał kołysanek na lekcji")
Nie będę śpiewał kołysanek na lekcji
>>>

Jak widać programowanie w pythonie jest zupełnie proste. Napisaliśmy nazwę funkcji (print) po czym w nawiasie podaliśmy parametr (tutaj tekst, który należy wydrukować) i tyle. Po naciśnięciu ENTER zobaczymy nasz tekst. Zwróćmy też uwagę, że tekst otoczony jest znakami cudzysłowu. Chodzi o to, że gdybyśmy go napisali bez cudzysłowu, na przykład print( print print ), mogłoby być trudno w niektórych sytuacjach zrozumieć, które słowa należy traktować jak zwykły kawałek tekstu do wyświetlenia, a które należy interpretować jako instrukcje programu. Kiedy jednak napiszemy print( "print print" ) będzie oczywiste, że należy wyświetlić napis print print.

Jak widać powyżej tekst wyświetlony jest w pierwszej pustej linii na ekranie, ale zaraz potem zostaje wyświetlony ponownie znak oczekiwania na kolejną instrukcję. Wszystko razem wygląda trochę ciasno. Żeby temu zaradzić dodajmy zarówno przed tekstem jak i po nim znak przejścia do nowej linii. Przejście do nowej linii zostawi pustą linijkę dzięki czemu wyświetlony komunikat będzie się lepiej wyróżniał.

 >>> print("\nNie będę śpiewał kołysanek na lekcji\n")
 
 Nie będę śpiewał kołysanek na lekcji
 
 >>>

A co jeśli chcielibyśmy wyświetlony tekst powtórzyć? Python pozwala użyć mnożenia w tym celu.

>>> print("\nNie będę śpiewał kołysanek na lekcji"*5)

Nie będę śpiewał kołysanek na lekcji
Nie będę śpiewał kołysanek na lekcji
Nie będę śpiewał kołysanek na lekcji
Nie będę śpiewał kołysanek na lekcji
Nie będę śpiewał kołysanek na lekcji
>>>

Wyświetlanie napisu wielokrotnie ma raczej mały sens ale, choć dla człowieka takie zadanie byłoby karą, komputer wykonuje kod bez problemu. Jeśli pomyłkowo pomnożymy napis milion razy, funkcja print cierpliwie wyświetli milion napisów....

Na wszelki wypadek dodajmy przy okazji, że zbyt długo pracujący program można przerwać kombinacją klawiszy Ctrl-C.

Czasem jednak powielenie tekstu może być przydatne. Na przykład przepis na wyświetlenie choinki mógłby wyglądać tak (zwróć uwagę, że jeśli w jednej linii podajemy wiele instrukcji (tutaj print) to rozdzielamy je średnikiem ;):

>>> print(" "*10 + "^"*1); print(" "*9 + "^"*3); print(" "*8 + "^"*5);print(" "*7 + "^"*7);print(" "*6 + "^"*9);
          ^
         ^^^
        ^^^^^
       ^^^^^^^
      ^^^^^^^^^
>>>

Dzięki temu, że możemy łatwo powielić tekst, stworzenie choinki składającej się z coraz krótszych kawałków spacji (10, 9, 8, 7, 6) oraz coraz dłuższych pięter choinki (znaki ^ powtórzone 1, 3, 5, 7 i 9 razy) było proste w zapisie. Jeśli nie wierzysz, spróbuj za pierwszym razem uzyskać ładną symetryczną choinkę licząc znaki poszczególnych pięter samemu i wstawiając odpowiednio długie ciągi znaków w kolejnych instrukcjach print.

Drukując napisy możemy jeszcze skorzystać z jednej bardzo przydatnej funkcji pythona. Bardzo często kiedy wyświetlamy jakiś komunikat na ekranie, chcielibyśmy w standardowym tekście zmienić tylko pojedyncze słowo. Na przykład gdybyśmy chcieli przywitać użytkownika, standardowy tekst mógłby brzmieć Witaj ?, miło Cię zoabczyć znowu! i zamiast znaku zapytania wstawiałoby się tylko imię użytkownika. Do tego celu można się posłużyć następującą konstrukcją:

>>>print("\nNie będę śpiewał %s kołysanek na lekcji\n" % "dziwnych")

Nie będę śpiewał dziwnych kołysanek na lekcji

>>>

Co zrobiliśmy? W tym miejscu tekstu, gdzie chcielibyśmy wstawić inny tekst, umieściliśmy znacznik %s natomiast po tak przygotowanym tekście dodaliśmy po znaku % wartość, którą należy wstawić w zaznaczone miejsce. Posłużmy się jeszcze innym przykładem, w którym wstawiamy dwa różne teksty do innego.

>>>print("\nNie będę śpiewał %s %s kołysanek na lekcji\n" % ("przerażająco", "dziwnych"))

Nie będę śpiewał przerażająco dziwnych kołysanek na lekcji

>>>

A co jeśli chcielibyśmy wstawić nie tekst, ale liczbę? Wówczas musimy zastosować inny znacznik, czyli %d.

>>> print("\nNie będę śpiewał %s %s kołysanek na %d lekcji\n" % ("przerażająco", "dziwnych", 5))

Nie będę śpiewał przerażająco dziwnych kołysanek na 5 lekcji

>>>

W tej chwili może to się wydawać trochę dziwną konstrukcją, ponieważ prościej byłoby zapisać od razu całe zdanie tak jak miało brzmieć. Ale sens tej konstrukcji wyjaśni się już w następnym kroku.

zmienna, czyli jak pamiętać to co program przetwarza

Byłoby bardzo wygodnie, gdyby dało się napisać instrukcję powodującą zapisanie w pamięci komputera jakiegoś wyniku, który za chwilę wykorzystamy w dalszym ciągu programu. Taki podręczny "schowek" na dane to zmienna. W pythonie jej stworzenie jest zupełnie banalne, na przykład:

>>> jakas_liczba = 5
>>>

Wygląda tak, jakby nic się nie stało, ale wystarczy wpisać nazwę nowo zdefiniowanej zmiennej, a python wyświetli jej wartość, co oznacza, że ją zapamiętał!

>>> jakas_liczba
5
>>>

Co więcej, od teraz wszędzie, gdzie powołamy się na nazwę zmiennej otrzymamy jej aktualną wartość.

>>> jakas_liczba + 7
12
>>> jakas_liczba - 3
2
>>> print(":" + ")" * jakas_liczba)
:)))))
>>>

Ta prosta konstrukcja języka okazuje się bardzo użyteczna. Za chwilę poznamy różne inne zastosowania, ale już teraz możemy powiedzieć, że zmienna pojawia się co chwilę i bez niej wielu przydatnych rzeczy nie dałoby się wykonać.

Ponieważ wiemy już jak działa zmienna możemy wrócić do przykładu drukowania napisów, w którym wstawialiśmy do drukowanego tekstu inne. Załóżmy, że mierzymy co 1/10 sekundy prędkość naszego pojazdu i chcemy ją wyświetlić zarówno w metrach na sekundę jak i w kilometrach na godzinę. Jeśli wynik pomiaru zapiszemy sobie w zmiennej predkosc wówczas następująca instrukcja pozwoli nam drukować aktualnie zmierzoną wartość w sposób zrozumiały i wygodny dla człowieka (dla przykładu zmieniamy wartość prędkości dwa razy, żeby zasymulować różne pomiary):

>>> predkosc = 3.21
>>> print("Akualna prędkość wynosi %f [m/s] (= %f [km/h])" % (predkosc, predkosc * 3.6))
Akualna prędkość wynosi 3.210000 [m/s] (= 11.556000 [km/h])
>>> predkosc = 5.111
>>> print("Akualna prędkość wynosi %f [m/s] (= %f [km/h])" % (predkosc, predkosc * 3.6))
Akualna prędkość wynosi 5.111000 [m/s] (= 18.399600 [km/h])
>>>

Zwróć uwagę, że do wyświetlania liczb z przecinkiem używamy znacznika %f.

pętla, czyli to co komputer potrafi robić bez znudzenia

ciąg dalszy nastąpi