języki skryptowe pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · języki...

35
Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie programów Typowanie dynamiczne Interpreter i kompilacja Narzędzia Python w pigułce Kilka słów o składni Uruchamianie programów Poniżej znajduje się prosty program (skrypt) napisany w Pythonie: In [1]: # symbolem "#" oznaczamy komentarz (wiersz ignorowany przez interpreter Pythona) # Lista instrumentów muzycznych instruments = ['Saksofon', 'Perkusja', 'Gitara'] # dla każdej nazwy na liście for item in instruments: # wypisz tę nazwę na ekranie print(item) W powyższym przykładzie instruments to nazwa zmiennej, której przypisano listę nazw instrumentów. Słowo kluczowe for oznacza pętlę po elementach listy w każdym powtórzeniu zmiennej instrument przypisana jest inna nazwa z tej listy. Saksofon Perkusja Gitara

Upload: others

Post on 28-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Języki skryptowe ­ Python

Wykład 2 ­ Pierwsze kroki

Janusz Szwabiński

Plan wykładu:

Uruchamianie programówTypowanie dynamiczneInterpreter i kompilacjaNarzędziaPython w pigułceKilka słów o składni

Uruchamianie programówPoniżej znajduje się prosty program (skrypt) napisany w Pythonie:

In [1]:

# symbolem "#" oznaczamy komentarz (wiersz ignorowany przez interpreter Pythona)

# Lista instrumentów muzycznychinstruments = ['Saksofon', 'Perkusja', 'Gitara']

# dla każdej nazwy na liściefor item in instruments: # wypisz tę nazwę na ekranie print(item)

W powyższym przykładzie instruments to nazwa zmiennej, której przypisano listę nazw instrumentów.Słowo kluczowe for oznacza pętlę po elementach listy ­ w każdym powtórzeniu zmiennej instrumentprzypisana jest inna nazwa z tej listy.

SaksofonPerkusjaGitara

Page 2: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Tryb skryptowy

Przedstawiony kod został uruchomiony bezpośrednio w notatniku IPythona, który wykorzystuję do prezentacjiw ramach wykładu. Inna możliwość to zapisanie programu do pliku tekstowego z rozszerzeniem .py iuruchomienie go bezpośrednio z wiersza poleceń:

W systemach z rodziny Windows rozszerzenia plików .py, . pyw, . pyc i . pyo są przypisaneautomatycznie do interpretera Pythona podczas instalacji. Dlatego klikając w ikonę pliku, również gouruchomimy (pliki .pyw uruchamiane są z alternatywną wersją interpretera, który nie otwiera okna konsoli).

Tryb interaktywny

Interpretera Pythona możemy używać w trybie interaktywnym. Interpreter zachęca wtedy do podania kolejnejinstrukcji za pomocą znaku zachęty, zwykle w postaci >>>. Znak zmienia się na ..., gdy interpreter wymagaod nas kontynuacji instrukcji w następnej linii.

W systemach Windows można ponadto uruchomić interpreter Pythona w trybie interaktywnym korzystając zikony Python (command line).

Trybu interaktywnego używa się do:

obliczeń matematycznychtestowania hipotezoperacji na danych i wizualizacji danychtestowania i modyfikowania wycinków kodu przed wstawieniem ich do wiekszych programówanalizowania stanu obiektów w pamięcii wielu innych

Page 3: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Wbudowane typy danych (wybrane)numeryczne

int ­ liczby całkowitefloat ­ liczby zmiennopozycyjne (rzeczywiste)complex ­ liczby zespolone

sekwencyjnelist ­ listytuple ­ krotki (tzn. listy, których nie można zmieniać)range ­ niezmienne sekwencje liczb, wykorzystywane w pętlach for

tekstowestr ­ ciągi znaków Unicode

zbioryset ­ nieuporządkowane kolekcje elementówfrozenset ­ j.w., ale nie można zmieniać ich zawartości

mapowaniadict

In [2]:

import sys

In [3]:

sys.float_info

In [4]:

sys.int_info

In [6]:

sys.maxsize

In [7]:

sys.maxsize + 10

Out[3]:

sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

Out[4]:

sys.int_info(bits_per_digit=30, sizeof_digit=4)

Out[6]:

9223372036854775807

Out[7]:

9223372036854775817

Page 4: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Typowanie dynamiczneJedną z ważnych cech Pythona jest typowanie dynamiczne(https://pl.wikipedia.org/wiki/Typowanie_dynamiczne), które polega na tym, że typy przypisywane są dowartości przechowywanych w zmiennych dopiero w trakcie działania programu. Interpreter ustala typy napodstawie samych wartości oraz metod udostępnionych przez obiekt. W języku angielskim takie typowanieokreśla się czasami jako Duck Typing. Nazwa wywodzi się z tzw. testu kaczki, który przypisywany jest J. W.Rileyowi (źródło: Wikipedia (https://en.wikipedia.org/wiki/Duck_typing)):

When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I callthat bird a duck.

Warto wspomnieć również o tym, że typowanie w Pythonie jest silne(https://pl.wikipedia.org/wiki/Typowanie_silne), tzn. interpreter wykonuje automatyczną konwersję jedyniemiędzy typami, które są silnie ze sobą powiązane (np. int i long int). Wszelkie operacje międzyniekompatybilnymi typami mogą się odbyć jedynie po jawnej konwersji zmiennej lub zmiennych do jednegotypu.

In [9]:

1 + 3

In [10]:

1 + 3.0

In [11]:

"Hello" + " world"

In [12]:

"Hello" * 3

Out[9]:

4

Out[10]:

4.0

Out[11]:

'Hello world'

Out[12]:

'HelloHelloHello'

Page 5: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [13]:

"Hello" + 3

Dla porównania zobaczmy, jak ten ostatni przykład będzie wyglądał w JavaScripcie:

O takim języku mówimy, że jest słabo typowany.

---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-13-888f0e761d75> in <module>()----> 1 "Hello" + 3

TypeError: Can't convert 'int' object to str implicitly

Page 6: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Interpreter i kompilacjaKod źródłowy jest parsowany i tłumaczony do kodu bajtowego (ang. bytecode) Pythona, czyli ciągu instrukcjido wykonania zapisanych w formacie binarnym. Kod bajtowy można przenosić między różnymi systemamioperacyjnymi i uruchamiać bez wyjściowego pliku źródłowego.

Kod bajtowy jest domyślnie zapisywany na dysku. Dlatego przy następnym uruchomieniu programu nie makonieczności ponownego parsowania skryptu i kompilowania go. W ten sposób skrócony zostaje czasuruchomienia programu.

Kod bajtowy przechowywany jest w plikach .pyc (wersja normalna) lub .pyo (wersja zoptymalizowana).Wersja zoptymalizowana wymaga uruchomienia interpretera z flagą -O.

Page 7: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie
Page 8: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

NarzędziaIstnieje bardzo dużo narzędzi, które ułatwiają programowanie w Pythonie. Można wśród nich znaleźćprogramy zastępujące powłokę, edytory wspierające składnię czy też zintegrowane środowiskaprogramistyczne (ang. Integrated Development Environments, IDEs).

Zamiast powłoki

Do pracy interaktywnej, zamiast oryginalnej powłoki Pythona, możemy użyć programów PyCrust (w nowszejwersji Py (http://www.wxpython.org/py.php)) lub IPython (http://ipython.org/) .

PyCrust to graficzna powłoka, która między innymi oferuje uzupełnianie składni, podgląd przestrzeni nazw ihistorię poleceń. Po włączeniu programu do projektu WxPython w najnowszych dystrybucjach można goznaleźć pod nazwą Py.

IPython ma możliwości podobne do PyCrust, jednak może pracować w trybie tekstowym. Powłoka oferujem.in. kolorowanie składni, uzupełnianie składni, historię. Do wersji 3.0 IPython oferował również uruchamianew przeglądarce WWW notatniki, które pozwalały na mieszanie wykonywalnego kodu źródłowego z tekstem odość zaawansowanym formatowaniu. Od wersji 4.0 IPython to głównie powłoka interaktywna Pythona, a całafunkcjonalność związana z notatnikami została przeniesiona do projektu Jupyter (https://jupyter.org/).

Page 9: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Edytory tekstowe

Decydując się na pracę z Pythonem w trybie "skryptowym", potrzebujemy w zasadzie tylko edytoratekstowego. Dobrze, gdyby wspierał on składnię Pythona. W systemach linuksowych możemy korzystać zpraktycznie każdego edytora w trybie tekstowym (np. vi, emacs, nano) lub graficznym (gedit, kate, geany).

Page 10: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie
Page 11: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Ostatni ze przedstawionych powyżej edytorów, Geany, dostępny jest również w wersjach dla Windows i MacOS. Innym edytorem dostępnym pod Linuksem i na Windows jest SciTE (http://www.scintilla.org/SciTE.html).

Bardzo dobrym edytorem dla programistów pod Windowsem jest Notepad++ (http://notepad­plus.sourceforge.net/br/site.htm). Jeśli spodoba się nam ten edytor, a pod innymi systemami chcielibyśmymieć podobny, można pomyśleć o zainstalowaniu Notepadqq (http://notepadqq.altervista.org/wp/).

IDE

Zintegrowane środowiska programistyczne (ang. Integrated Development Environment) to pakietyoprogramowania oferujące wiele narzędzi przydatnych programiście ­ od edytorów z kolorowaniem iuzupełnianiem składni, poprzez przeglądarki kodów źródłowych, zintegrowaną powłokę po debugger (lubprzynajmniej nakładkę graficzną na niego). Poniżej znajdują się wybrane IDEs dla Pythona:

Idle (https://docs.python.org/2/library/idle.html)PyScripter (http://code.google.com/p/pyscripter/)SPE (http://pythonide.blogspot.com/) (Stani's Python Editor)Eric (http://eric­ide.python­projects.org/)PyDev (http://pydev.org/) (plug­in do Eclipse)

Page 12: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie
Page 13: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Budowanie pakietów binarnych

Jeżeli myślimy o dystrybucji programów napisanych w Pythonie, warte uwagi mogą okazać się programysłużące do budowania pakietów binarnych, złożonych z kodu bajtowego, interpretera i wszystkichpotrzebnych zależności. Stworzenie takiego pakietu umożliwia uruchomienie naszego programu nakomputerze bez zainstalowanego Pythona. Dodatkowo (do pewnego stopnia) chroni kod źródłowy.

Wśród tego typu aplikacji mamy do wyboru m.in.:

py2exe (tylko dla Windows)cx_Freeze (przenośne)

Platformy programistyczne (ang. frameworks)

Platformy programistyczne to szkielety do budowy aplikacji. Definiują strukturę aplikacji oraz ogólnymechanizm jej działania, a także dostarczają zestawy komponentów i bibliotek ogólnego przeznaczenia dowykonywania określonych zadań.

Najbardziej znane platformy dla Pythona:

aplikacje webowe: Django, TurboGears, Zope i web2pyGUI: wxPython, PyGTK i PyQtobliczenia naukowe: NumPy i SciPyprzetwarzanie obrazów: PILwizualizacje 2D: Matplotlib i SVGFigwizualizacje 3D: Visual Python, PyOpenGL i Python Ogremapowanie obiektowo­relacyjne: SQLAlchemy i SQLObject

Page 14: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Python w pigułce

Liczby całkowite

Zacznijmy od prostych działań na liczbach całkowitych:

In [14]:

2+2

In [15]:

(50-5*6)/4 #w pythonie 2.7 wynik byłby całkowity!!!

In [16]:

(50-5*6)//4

In [17]:

7/3 # w pythonie 2.7 wynik będzie 2

In [18]:

-7/3

In [19]:

7//3

Out[14]:

4

Out[15]:

5.0

Out[16]:

5

Out[17]:

2.3333333333333335

Out[18]:

-2.3333333333333335

Out[19]:

2

Page 15: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [21]:

szer = 10wys = 30.0pole = szer * wysprint(pole)

In [22]:

type(szer)

In [23]:

type(wys)

In [24]:

a = b = c = 0 print(a, b, c)

In [25]:

a, b, c = 1, 2, 3 # pythonowy idiomprint (a,b,c)

In [26]:

9**2

In [27]:

_/3 # _ to ostatni wynik

Funkcje użytkownika

Możliwości Pythona możemy rozszerzać, definiując własne funkcje:

300.0

Out[22]:

int

Out[23]:

float

0 0 0

1 2 3

Out[26]:

81

Out[27]:

27.0

Page 16: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [28]:

def silnia(x): if x<=1: return 1 return x*silnia(x-1)

In [29]:

silnia(4)

In [30]:

silnia(17)

In [31]:

silnia(100)

I jeszcze raz, informacja systemowa dotycząca typu całkowitego:

In [39]:

sys.maxsize

W przeciwieństwie do Pythona 2.7, w wersji 3.5 nie mamy największej liczby w typie int. Jest ona wpraktyce ograniczona jedynie możliwościami komputera. Powyższa liczba stanowi maksymalny rozmiarsekwencji i odpowiada największej możliwej do przedstawienia liczbie naturalnej w typie int w Pythonie 2.7.

Liczby zmiennoprzecinkowe

In [32]:

7 / 3

Out[29]:

24

Out[30]:

355687428096000

Out[31]:

93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Out[39]:

9223372036854775807

Out[32]:

2.3333333333333335

Page 17: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [33]:

7.0/3

In [34]:

float(7)

In [35]:

x = 1.1*10**308

In [36]:

2*x

In [37]:

y = 2*x

In [38]:

1/y

Kilka informacji systemowych o liczbach zmiennoprzecinkowych:

In [37]:

import syssys.float_info

Liczby zespolone

Out[33]:

2.3333333333333335

Out[34]:

7.0

Out[36]:

inf

Out[38]:

0.0

Out[37]:

sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

Page 18: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [40]:

1j * 1J

In [41]:

complex(1,2)

In [42]:

complex(1,2)*complex(2,1)

In [43]:

(1+2j)*(2+j) #nie do końca jak na papierze

In [44]:

(1+2j)*(2+1j)

In [45]:

a = 1.5 + 0.5j

In [46]:

a.real

Out[40]:

(-1+0j)

Out[41]:

(1+2j)

Out[42]:

5j

---------------------------------------------------------------------------NameError Traceback (most recent call last)<ipython-input-43-ce6b82197b42> in <module>()----> 1 (1+2j)*(2+j) #nie do końca jak na papierze

NameError: name 'j' is not defined

Out[44]:

5j

Out[46]:

1.5

Page 19: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [47]:

a.imag

In [48]:

float(a)

In [49]:

abs(a) #sqrt(a.real**2 + a.imag**2)

Wbudowana pomoc

Out[47]:

0.5

---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-48-93d25633ffc4> in <module>()----> 1 float(a)

TypeError: can't convert complex to float

Out[49]:

1.5811388300841898

Page 20: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [50]:

help(a)

Page 21: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie
Page 22: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Help on complex object:

class complex(object) | complex(real[, imag]) -> complex number | | Create a complex number from a real part and an optional imaginary part. | This is equivalent to (real + imag*1j) where imag defaults to 0. | | Methods defined here: | | __abs__(self, /) | abs(self) | | __add__(self, value, /) | Return self+value. | | __bool__(self, /) | self != 0 | | __divmod__(self, value, /) | Return divmod(self, value). | | __eq__(self, value, /) | Return self==value. | | __float__(self, /) | float(self) | | __floordiv__(self, value, /) | Return self//value. | | __format__(...) | complex.__format__() -> str | | Convert to a string according to format_spec. | | __ge__(self, value, /) | Return self>=value. | | __getattribute__(self, name, /) | Return getattr(self, name). | | __getnewargs__(...) | | __gt__(self, value, /) | Return self>value. | | __hash__(self, /) | Return hash(self). | | __int__(self, /) | int(self) | | __le__(self, value, /) | Return self<=value. | | __lt__(self, value, /) | Return self<value. |

Page 23: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

| __mod__(self, value, /) | Return self%value. | | __mul__(self, value, /) | Return self*value. | | __ne__(self, value, /) | Return self!=value. | | __neg__(self, /) | -self | | __new__(*args, **kwargs) from builtins.type | Create and return a new object. See help(type) for accurate signature. | | __pos__(self, /) | +self | | __pow__(self, value, mod=None, /) | Return pow(self, value, mod). | | __radd__(self, value, /) | Return value+self. | | __rdivmod__(self, value, /) | Return divmod(value, self). | | __repr__(self, /) | Return repr(self). | | __rfloordiv__(self, value, /) | Return value//self. | | __rmod__(self, value, /) | Return value%self. | | __rmul__(self, value, /) | Return value*self. | | __rpow__(self, value, mod=None, /) | Return pow(value, self, mod). | | __rsub__(self, value, /) | Return value-self. | | __rtruediv__(self, value, /) | Return value/self. | | __str__(self, /) | Return str(self). | | __sub__(self, value, /) | Return self-value. | | __truediv__(self, value, /) | Return self/value. | | conjugate(...) | complex.conjugate() -> complex |

Page 24: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Biblioteka standardowa

In [51]:

import math #importujemy moduł matematyczny z biblioteki standardowej

| Return the complex conjugate of its argument. (3-4j).conjugate() == 3+4j. | | ---------------------------------------------------------------------- | Data descriptors defined here: | | imag | the imaginary part of a complex number | | real | the real part of a complex number

Page 25: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [52]:

dir(math) #zawartość modułu

Page 26: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Out[52]:

['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'hypot', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

Page 27: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [53]:

help(math.ceil)

In [54]:

math.pi

In [55]:

math.cos(math.pi/2) #powinno być zero

Help on built-in function ceil in module math:

ceil(...) ceil(x) Return the ceiling of x as an int. This is the smallest integral value >= x.

Out[54]:

3.141592653589793

Out[55]:

6.123233995736766e-17

Page 28: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [56]:

math.e

In [57]:

math.log(math.e) #logarytm naturalny

In [58]:

math.sqrt(8)

In [59]:

math.sqrt(-8)

In [60]:

import cmathcmath.sqrt(-8)

Out[56]:

2.718281828459045

Out[57]:

1.0

Out[58]:

2.8284271247461903

---------------------------------------------------------------------------ValueError Traceback (most recent call last)<ipython-input-59-d928edca9d4e> in <module>()----> 1 math.sqrt(-8)

ValueError: math domain error

Out[60]:

2.8284271247461903j

Page 29: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [61]:

dir(cmath)

Listy

In [4]:

numbers = [1, 2, 3, 4, 5]

Out[61]:

['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']

Page 30: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [5]:

numbers[3]

In [6]:

numbers[1:3]

In [7]:

numbers.append(6)

In [8]:

numbers

In [9]:

squares = [i**2 for i in numbers]

In [10]:

squares

Pętle

In [11]:

for i in numbers: print(i,i**2)

Wyrażenia warunkowe

Out[5]:

4

Out[6]:

[2, 3]

Out[8]:

[1, 2, 3, 4, 5, 6]

Out[10]:

[1, 4, 9, 16, 25, 36]

1 12 43 94 165 256 36

Page 31: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [12]:

for i in numbers: if(i%2==0): print(i)

Zbiory

In [13]:

z1 = set('banan')z2 = set('ananas')

In [14]:

print(z1,z2)

In [16]:

z1 | z2

In [17]:

z1 - z2

In [18]:

z1 & z2

In [19]:

z1 ̂ z2

Łańcuchy znaków

246

{'b', 'a', 'n'} {'s', 'a', 'n'}

Out[16]:

{'a', 'b', 'n', 's'}

Out[17]:

{'b'}

Out[18]:

{'a', 'n'}

Out[19]:

{'b', 's'}

Page 32: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [20]:

tekst = "To jest przykład zdania w języku polskim."

In [21]:

tekst.split()

In [22]:

slowa = tekst.split()

In [23]:

'&'.join(slowa)

Operacje na plikach

In [24]:

f = open('mojplik.txt','w')

In [25]:

f.write('Pierwszy wiersz.\n')

In [26]:

f.write('Drugi wiersz.')

In [27]:

f.close()

In [28]:

f = open('mojplik.txt','r')for line in f: print(line)f.close()

Out[21]:

['To', 'jest', 'przykład', 'zdania', 'w', 'języku', 'polskim.']

Out[23]:

'To&jest&przykład&zdania&w&języku&polskim.'

Out[25]:

17

Out[26]:

13

Pierwszy wiersz.

Drugi wiersz.

Page 33: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

Formatowanie wyjścia

In [29]:

template = '{0}{1}{0}'

In [30]:

template.format('abra','cad')

In [31]:

coord = (3,5)'X: {0[0]}; Y: {0[1]}'.format(coord)

Kilka słów o składniProgram (skrypt) w Pythonie składa się z wierszy, które zawierają sekwencje elementów języka. Ze wzgleduna czytelność kodu źródłowego najczęściej umieszcza się jedno wyrażenie w jednym wierszu. Czasamijednak zdarzają się sytuacje, kiedy lepiej takie wyrażenie rozciągnąć na wiele linii kodu. W tym celuużywamy:

ukośnika wstecznego \ (ang. backslash), jeżeli wyrażenie nie zawiera nawiasów lub dzielimy jepomiędzy niminawiasów, jeżeli wyrażenie ich wymaga

In [63]:

a = 7 * 3 + \5 /2

print(a)

In [65]:

b = [1,2,3, 4,5,6]

print(b)

Out[30]:

'abracadabra'

Out[31]:

'X: 3; Y: 5'

23.5

[1, 2, 3, 4, 5, 6]

Page 34: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [66]:

c = range(1, 11)print(c)

Znak # oznacza początek komentarza. Tekst pojawiający się po tym znaku aż do końca linii będzieignorowany. Wyjątek stanowią komentarze funkcjonalne:

informacja o kodowaniu znaków w kodzie źródłowym, np.:# -*- coding: utf-8 -*-informacja o programie interpretującym kod, np.:#!/usr/bin/env python

Bardzo ważnym elementem Pythona są wcięcia w kodzie ­ nie tylko zwiększają czytelność całego programu,ale definiują zawartość bloków kodu.

range(1, 11)

Page 35: Języki skryptowe Pythonprac.im.pwr.wroc.pl/~szwabin/assets/intro/lectures/2.pdf · Języki skryptowe Python Wykład 2 Pierwsze kroki Janusz Szwabiński Plan wykładu: Uruchamianie

In [67]:

#pętla po liczbach od 1 do 99for i in range(1,100): #jeśli reszta z dzielenia równa 0: if i%3 ==0: #wyświetl na ekranie print(i, '/3 =', i/3)

Dla danego bloku głębokość wcięcia musi być stała. Jednak do dobrych praktyk należy używanie zawsze tejsamej głębokości wcięcia. Należy również unikać naprzemiennego używania tabulatorów i spacji do wcięć,ponieważ to rodzi problemy przy przenoszeniu kodu między różnymi systemami operacyjnymi. Najlepiej jestużywać edytorów, które zamieniają tabulatory na określoną liczbę spacji w "locie".

3 /3 = 1.06 /3 = 2.09 /3 = 3.012 /3 = 4.015 /3 = 5.018 /3 = 6.021 /3 = 7.024 /3 = 8.027 /3 = 9.030 /3 = 10.033 /3 = 11.036 /3 = 12.039 /3 = 13.042 /3 = 14.045 /3 = 15.048 /3 = 16.051 /3 = 17.054 /3 = 18.057 /3 = 19.060 /3 = 20.063 /3 = 21.066 /3 = 22.069 /3 = 23.072 /3 = 24.075 /3 = 25.078 /3 = 26.081 /3 = 27.084 /3 = 28.087 /3 = 29.090 /3 = 30.093 /3 = 31.096 /3 = 32.099 /3 = 33.0