Uvod ================= Ovaj dokument služi kao pomoć pri učenju osnova programskog jezika python u okviru kolegija Računarstvo i praktikum na prvoj godini istraživačkog smjera studija fizike na Fizičkom odsjeku te studija geofizike na Geofizičkom odsjeku Prirodoslovno-matematičkog fakulteta Sveučilišta u Zagrebu. Pretpostavlja se osnovno znanje C-a. Pretpostavlja se da se primjeri izvršavaju na Unix-like operativnom sustavu (linux, OSX). Primjeri u pythonu i C-u će raditi i na Windows-ima, ali će ih trebati pokrenuti na odgovarajući način. Interpreter ------------------ - Jezik python napravljen je s namjerom da olakša (=ubrza) pisanje programa. Na primjer, za razliku od C-a, nema deklariranja varijabli unaprijed, a dopušteno je miješanje tipova (npr. dopušteno je ``a=1`` i nakon toga ``a="xy"``). - Programe napisane u C-u potrebno je prvo prevesti u strojni jezik, a zatim izvršiti. Python umjesto toga koristi "simultano prevođenje" tj. program se prevodi u strojni jezik malo po malo tijekom izvršavanja. Programi koji prevode sve odjednom nazivaju se *compiler*\ i (npr. ``gcc``), a programi koji "simultano prevode" nazivaju se *interpreter*\ i (npr. ``python``). Više na ``_. - 2 načina korištenja: - interaktivna ljuska: ljusku pokrenemo s ``python`` (ili ``python3``), upisujemo/izvršavamo naredbu po naredbu, iz ljuske izađemo pomoću CTRL-d --- ovakav način nam omogućuje brzo isprobavanje dijelova programa. Primjere u kojima se koristi ljuska možete prepoznati po oznaci ``>>>`` koju ljuska ispisuje kad očekuje unos naredbe. - samostalni programi: upišemo cijeli program pomoću tekst-editora i snimimo ga npr. pod imenom ``prg.py`` zatim pokrenemo pomoću ``python prg.py`` (ili ``python3 prg.py``). .. note:: Ako postavimo da je datoteka ``prg.py`` izvršna, pomoću ``chmod u+x prg.py``, i ako je prva redak programa ``prg.py`` standardno zaglavlje (vidi :ref:`Uobičajeno-zaglavlje`, :ref:`zadaca6`), tada se program može pokrenuti samo s ``./prg.py``. - Postoje 2 glavne verzije python-a. Mogu se preuzeti (besplatne su) s https://www.python.org. To su: - python 2 (npr. python 2.6, python 2.7) - python 3 (npr. python 3.6, python 3.7) .. attention:: Python 3 **nije** *kompatibilan unazad* s pythonom 2 (to znači da programe za python 2 treba prepraviti ako ih se želi izvršiti pomoću pythona 3). - Kako se čini da python 2 neće biti podržan nakon 2020 godine (https://www.python.org/dev/peps/pep-0373/), u nastavku ćemo koristiti python 3, iako će većina primjera, uz sitne popravke, raditi i na pythonu 2. Kako učiti ------------------ 1. S obzirom da već imate praksu u C-u prilično je lako naučiti osnove pythona. Za tu svrhu možete koristiti primjere s ovih stranica ili neki od tutoriala: - https://docs.python.org/3/tutorial/ - https://www.tutorialspoint.com/python3/python_variable_types.htm Također mogu biti korisni i sljedeći tutoriali za python 2: - http://cs.stanford.edu/people/nick/python-in-one-easy-lesson/ - https://developers.google.com/edu/python/ 2. Početi koristiti python. Pri tome se korisno pomagati već gotovim receptima: - Npr. ako tražimo *python print string as bytes*, google nas uputi na http://stackoverflow.com/questions/12214801/print-a-string-as-hex-bytes gdje se nalazi gotov recept koji omogućuje ispis pojedinih byteova koji čine string (općenito stranica http://stackoverflow.com je dosta korisna). - Moguće da će neka rješenja biti vezana za python 2 i bit će ih potrebno prebaciti u verziju 3. .. note:: Za prebacivanje u verziju 3 u najjednostavnijim primjerima samo će biti potrebno pretvoriti ``print a, b`` u ``print(a,b)``, kao i ``a/b`` u ``a//b`` ako se želi cjelobrojno dijeljenje. (U pythonu 3 vrijedi ``a//b==floor(a/b)``) Također prebacivanje iz 2 u 3 olakšava program ``2to3`` koji dolazi s pythonom. Na webu se mogu naći razne upute za ručno prebacivanje npr.: - http://python-future.org/compatible_idioms.html Dodaci za python ------------------ Dodaci (tj. dodatni paketi/biblioteke) za python sadrže funkcije za razne namjene. Dodaci koji se isporučuju s pythonom nazivaju se standardni dodaci. Nestandardni dodaci dobavljaju se iz drugih izvora. Spomenimo neke: 1. Za crtanje grafova u pythonu, koristan je dodatak ``matplotlib`` - http://matplotlib.org/users/pyplot_tutorial.html 2. Za rad s poljima brojeva brojeva, koristan je dodatak ``numpy`` - http://wiki.scipy.org/Tentative_NumPy_Tutorial 3. Gotove funkcije za numeriku, nalaze se u dodatku ``scipy`` - http://docs.scipy.org/doc/scipy/reference/tutorial/index.html 4. U službenim uputstvima za python mogu se naći sve specifikacije za python i njegove standardne dodatke: - https://docs.python.org/3/ - https://docs.python.org/3/library/index.html Standardnih dodataka ima dosta. Oni omogućuju programerima pristup sustavu, te donose gotova rješenja za uobičajene probleme. Primjerice, dodatak za tzv. *regular expressions* omogućuje traženje po tekstu. Najjednostavniji oblik *regular expression*\ a ste već vidjeli prilikom korištenja :func:`scanf` - npr. ``scanf("%[^\n]",s)`` učitava u ``s`` sve do znaka za novi red. Proučavanje detalja tog paketa, naravno, izlazi van okvira kolegija, ali korisno je znati da postoji. Također treba uočiti da *regular expressions* ne postoje isključivo u pythonu nego predstavljaju standard za traženje po tekstu koji koriste i drugi jezici i programi. - https://developers.google.com/edu/python/regular-expressions - http://www.tutorialspoint.com/python/python_reg_expressions.htm - https://docs.python.org/3/howto/regex.html 5. Popisi popularnih dodataka za python korisnih za znanstvene primjene - https://gist.github.com/sebp/58da862b779489998e8e6088908fbfa5#file-python-scientific-computing-md - https://medium.com/activewizards-machine-learning-company/top-20-python-libraries-for-data-science-in-2018-2ae7d1db8049 .. note:: S pythonom i alatima numpy, scipy, matplotlib ćete se opet susresti u kolegijima Simboličko programiranje, Klasična mehanika, Kvantna fizika, ..., tako da trud koji uložite sada nije uzalud. Ipak, uputstava ima jako puno i ideja je proučiti detaljnije samo manji dio npr. primjere koji slijede ili neki od navedenih tutoriala, a ostale materijale koristiti kad i ako zatrebaju --- kao rječnik ili telefonski imenik. Druge implementacije pythona -------------------------------- Gore spomenuti python interpreteri (oni s https://www.python.org) predstavljaju jednu (standardnu) implementaciju jezika python, napisanu u C-u koja se naziva CPython. Također postoje i RPython (podskup pythona) i Cython (http://cython.org, prevoditelj iz pythona u C) kojima je glavni cilj ubrzavanje izvršavanja. Postoje i implementacije jezika python pisane u drugim jezicima: java (Jython), RPython (PyPy), C# (IronPython) itd. Korištenje neke druge implementacije omogućuje lagan pristup bibliotekama jezika u kojem je ta implementacija pisana (ali u tom slučaju neke standardne (CPython-ove) biblioteke mogu biti nepodržane). U nastavku ćemo se baviti samo standardnom, CPython, implementacijom.