PPy3/PierwszeKroki

Z Brain-wiki
Wersja z dnia 11:36, 27 cze 2016 autorstwa RobertJB (dyskusja | edycje) (formatowanie)

Pierwsze kroki

Podstawowe cegiełki

  • Program w Pythonie to tekst, stanowiący ciąg instrukcji; są one wykonywane przez interpreter (zasadniczo) kolejno jedna po drugiej.
  • Prosta instrukcja to (zasadniczo) jedna linijka, kończy się wraz z przejściem do kolejnej linii.
  • Instrukcja złożona, to linijka otwierająca zawsze zakończona dwukropkiem, a po niej - blok wcięty, tj. ciąg instrukcji (prostych i/lub złożonych) pisanych z dodatkowym wcięciem w stosunku do linijki otwierającej; mogą to być dodatkowe (np. dwie lub cztery) spacje, lub kod tabulacji, na początku każdej linijki. Koniec instrukcji złożonej następuje wraz z powrotem do poprzedniego poziomu wcięcia.
  • Wyjątki od podanych reguł, istnienie których sygnalizuje słowo zasadniczo, będą przedstawione później.
  • Należy się raz zdecydować, jak dokładnie będziemy tworzyć poziomy wcięcia, i konsekwentnie się tego trzymać. Najlepiej po dwie lub cztery spacje (wg. upodobań), i ustawić w opcjach edytora kodu, żeby wciśnięcie klawisza Tab skutkowało odpowiednią liczbą spacji. Mieszanie w tekście kodu spacji i tabulacji zawsze prowadzi do kłopotów.

Przykłady instrukcji prostych:

x = 1 + 2
y = 2 * x
x = x + 1
print(x, y)

Przykłady instrukcji złożonych:

if x > 0:
    print(x)

def dodaj1(x):
    return x + 1

Ważnym elementem są komentarze:

# a teraz, powiększę x o 1
x = x + 1
  • Instrukcje budowane są z wyrażeń, a wyrażenia - z nazw, stałych i operatorów.
  • Nazwa może składać się z liter (bez ogonków), cyfr i znaku podkreślenia (_). Nie może zaczynać się od cyfry. Litery małe i wielkie są rozróżniane.
  • Przykładem stałych są liczby - całkowite i ułamki dziesiętne. Zamiast przecinkiem, część ułamkową oddziela się kropką.
  • Inny rodzaj stałych to napisy. Można je budować na kilka sposobów:
'to jest napis'
"to jest drugi napis"
'''a to jest...
jeszcze jeden napis'''
  • Ostatni przypadek to wyjątek od zasady że koniec linii kończy instrukcję. Napis podany w pierwszych dwóch postaciach nie może zawierać przejścia do nowej linii.
  • Nazwy są po to, aby oznaczać nimi wartości. Wartościami mogą być np. liczby i napisy:
pi = 3.14159
komunikat = 'Uwaga!!!'

UWAGA: znak równości to nie porównanie, a operator przypisania. Powoduje on, że nazwa po jego lewej stronie będzie odtąd oznaczać wartość zapisaną po prawej.

  • Więcej o stałych i nazwach na następnej stronie, na razie tyle nam wystarczy.
  • Inne operatory, to w szczególności arytmetyka:
+ - * / % **

'*' to mnożenie, '%' to reszta z dzielenia (liczb całkowitych), '**' to potęgowanie.

  • Napisy też można "dodawać":
imie = 'Jacek'
powitanie = 'witaj ' + imie
print(powitanie)

Używanie linii poleceń interpretera

Interpreter to aplikacja, która potrafi czytać tekst kodu w języku Python i wykonać zapisane w nim polecenia. Może on być używany jako samodzielne polecenie, wywoływane w oknie terminala, lub zintegrowany z środowiskiem programistycznym w rodzaju Spyder.

Zanim zaczniemy pisać "poważne" programy, nauczymy się korzystać z trybu interaktywnego interpretera, który pozwala na wpisywanie po jednym poleceniu i natychmiastowe uzyskanie wyniku jego wykonania. Można go używać do podręcznych rachunków - zamiast kalkulatora -- i do eksperymentowania z kodem w Pythonie. Do pracy interaktywnej warto używać "wzbogaconej" wersji interpretera, wywoływanej poleceniem

$ ipython3

w najprostszych zastosowaniach niewiele się on różni od "zwykłego" interpretera, wywoływanego przez python3, ale posiada pewne dodatkowe możliwości, które niedługo się nam przydadzą.

UWAGA: polecenie ipython (bez 3) wywoła starszą wersję Pythona. I odpowiednio - python wywołuje starszą wersję "zwykłego" interpretera, a python3 - wersję aktualną.

Wykonywanie rachunków

$ ipython3
Python 3.5.1+ (default, Mar 30 2016, 22:46:26) 
Type "copyright", "credits" or "license" for more information.

IPython 2.4.1 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: 7 * (3 + 5)
Out[1]: 56

In [2]: 2.81 / (1.25 - .33)
Out[2]: 3.054347826086957

In [3]: 2**128
Out[3]: 340282366920938463463374607431768211456

In [4]: 1/9
Out[4]: 0.1111111111111111

In [5]: 11//9, 11%9
Out[5]: (1, 2)

Zapis wyrażeń arytmetycznych raczej nie zaskakuje. Drobne uwagi:

  • spacje w zapisie wyrażenia, pomiędzy liczbami a operatorami (lub ich brak), nie mają znaczenia
  • reguły pierwszeństwa operatorów (najpierw potęgowanie, potem mnożenie i dzielenie, potem odejmowanie i dodawanie,...) są w zasadzie takie, jak należy się spodziewać; kolejność operacji możemy narzucić nawiasami - ale tylko okrągłymi, które można wielokrotnie zagnieżdżać
  • pisząc ułamek dziesiętny (liczbę z kropką), można pominąć część całkowitą lub ułamkową, o ile ma ona być zero (nie można jednak pominąć obu);
  • liczby całkowite mogą być dowolnie duże (w ramach fizycznych ograniczeń komputera)
  • operacje na ułamkach należy zawsze traktować jako przybliżone - komputer może ogarnąć tylko skończoną liczbę cyfr
  • zwykłe dzielenie da zawsze wynik ułamkowy; istnieje jednak operator // dzielenia całkowitego
  • gdy chcemy zakończyć "rozmowę" z interpreterem, piszemy exit(); jeżeli pracujemy w Linuxie, zadziała również dwukrotne Ctrl-D (tzn. trzymając naciśnięty klawisz Ctrl stukamy dwukrotnie w klawisz D)

Jak uzyskać pomoc

W programie IPython mamy w każdej chwili dostęp do pomocy na temat poleceń, funkcji itd. Pythona:

In [8]: print?
Type:        builtin_function_or_method
String form: <built-in function print>
Namespace:   Python builtin
Docstring:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file:  a file-like object (stream); defaults to the current sys.stdout.
sep:   string inserted between values, default a space.
end:   string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.

W tym przykładzie uzyskaliśmy szczegółowy opis zastosowania funkcji wbudowanej print. Wprawdzie po angielsku, ale mam nadzieję, że nie jest to przeszkoda nie do przeskoczenia. Już niedługo będziemy dokładnie rozumieli to, co jest tu napisane.

Jeżeli tekst pomocy jest dłuższy, to będzie wyświetlany w trybie pozwalającym m. in. na jego przewijanie z użyciem klawiszy strzałek czy PgUp, PgDn. Aby wyjść z tego trybu i powrócić do interpretera, wystarczy nacisnąć q.

Najprostszy program

Za pomocą ulubionego edytora tekstowego stwórzmy plik o nazwie hello.py i następującej treści:

#! /usr/bin/python3

print('Witaj świecie!')

Zgodnie z tradycją, będzie to program wykonujący jedno banalne zadanie: wypisanie komunikatu o ustalonej treści. Zgodnie z zasadą, że programowanie w Pythonie ma być maksymalnie proste - jedynym niezbędnym elementem tego programu jest linijka wywołująca funkcję print. W tym przykładzie, uzupełniłem treść programu o pierwszą linijkę, zaczynającą się od znaku kratki (#) - istotne jest, aby była to dokładnie pierwsza linijka w pliku, i by zaczynała się od pierwszej pozycji w wierszu. Czyli, aby #! były dokładnie dwoma pierwszymi znakami w treści pliku. Z punktu widzenia Pythona, linijka ta jest komentarzem, i przy uruchamianiu pliku jest ignorowana. Pozwala ona jednak, by plik ten był automatycznie rozpoznawany przez system operacyjny (Linux) jako zawierający program w języku Python. Jaki z tego pożytek, dowiemy się za chwilę.

Aby ten program uruchomić, jest parę sposobów. Najprościej:

$ python3 hello.py

powyższe polecenie wpisujemy w terminalu, w trybie powłoki systemowej (nie w programie IPython!). Tutaj musieliśmy jawnie wywołać interpreter Pythona i wskazać mu plik hello.py jako zawierający kod do uruchomienia.

Zamiast tego, możemy nadać plikowi hello.py atrybut pliku wykonywalnego, czyli programu, i uruchomić go bezpośrednio:

$ chmod +x hello.py
$ ./hello.py
  • Polecenie z pierwszej linijki wystarczy wykonać raz dla danego pliku
  • Zamiast z linii poleceń, można w okienku Właściwości pliku znaleźć odpowiednie pole do kliknięcia
  • Postać drugiej linijki tłumaczy się tym, że nasz program hello.py nie jest zainstalowany w systemie i nie zostanie odnaleziony przez przeszukanie standardowych lokalizacji programów na dysku. Należy wyraźnie wskazać, że chodzi o plik znajdujący się w bieżącym folderze - i to tu robimy.
  • Plik z kodem w Pythonie nie musi mieć nazwy kończącej się na .py - jest to jednak wygodne, bo np. edytory tekstu traktują to jako sugestię co do zawartości pliku, i mogą dostosować do tego swoje działanie (np. gedit)

poprzednia | Strona główna | dalej

--RobertJB (dyskusja) 13:53, 15 cze 2016 (CEST)