Uvod ================= Ovaj dokument služi kao pomoć pri učenju osnova pythona u sklopu kolegija Računarstvo i praktikum na prvoj godini istraživačkog smjera studija fizike na Fizič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 je napravljen tako da olakša (=ubrza) pisanje programa. Na primjer, nema deklariranja varijabli unaprijed, a dopušteno je miješanje tipova što znači dopušteno je ``a=1`` i nakon toga ``a="xy"``. - Programe napisane u C-u je potrebno 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. 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``, upisujemo/izvršavamo naredbu po naredbu, iz ljuske izađemo pomoću CTRL-d --- ovakav način nam omogućuje brzo isprobavanje dijelova programa; - 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``. (Ako postavimo da je datoteka ``prg.py`` izvršna, pomoću ``chmod u+x prg.py``, i ako je prva linija 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. - python2 (npr. python 2.6, python 2.7) - python3 (npr. python 3.4) - **nije** *kompatibilan unazad* s pythonom 2 (to znači da programe za python2 treba prepraviti ako ih se želi izvršiti pomoću pythona 3). - Kako je python2 rašireniji, koristit ćemo njega. - Gore spomenuti python interpreteri (oni s https://www.python.org) predstavljaju jednu (standardnu) implementaciju jezika python, napisanu u C-u koja se naziva CPython. 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). Također postoje i RPython (podskup pythona) i Cython (http://cython.org, prevoditelj iz pythona u C) kojima je glavni cilj ubrzavanje izvršavanja. U nastavku ćemo se baviti samo standardnom, CPython, implementacijom. 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: - http://cs.stanford.edu/people/nick/python-in-one-easy-lesson/ - https://developers.google.com/edu/python/ - https://docs.python.org/2/tutorial/ - http://www.tutorialspoint.com/python/python_variable_types.htm 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). 3. Ako ništa drugo ne upali, možete probati tražiti po službenim uputstvima za python: - https://docs.python.org/2/ - https://docs.python.org/2/library/index.html 4. Za crtanje grafova u pythonu, koristan je dodatak ``matplotlib`` - http://matplotlib.org/users/pyplot_tutorial.html 5. Za rad s poljima brojeva brojeva, koristan je dodatak ``numpy`` - http://wiki.scipy.org/Tentative_NumPy_Tutorial 6. Gotove funkcije za numeriku, nalaze se u dodatku ``scipy`` - http://docs.scipy.org/doc/scipy/reference/tutorial/index.html 7. Za određene primjene dobro je znati da postoje tzv. *regular expressions*. Ovo izlazi, naravno, van okvira kolegija, iako ste najjednostavniji oblik *regular expression*\ a već vidjeli prilikom korištenja :func:`scanf` npr. ``scanf("%[^\n]",s)`` učitava u ``s`` sve do znaka za novi red. - https://developers.google.com/edu/python/regular-expressions - http://www.tutorialspoint.com/python/python_reg_expressions.htm - https://docs.python.org/2/howto/regex.html .. 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.