Osnovna sintaksa programskog jezika Python
-
Greg Stein u prezentaciji Python at Google kaže:
-
"Python has been an important part of Google since the beginning, and remains so as the system grows and evolved. Today dozens of Google engineers use Python, and we're looking for more people with skils in this language" (Peter Norvig, Director of Search Quality at Google)
-
Google's programming environment
- Primary languages: C++, Java, Python
-
Python at eShop:
- 1995. "What in the world is Python?"
- 1996. "This is great stuff."
- (eShop gets assimilated by Microsoft)
-
Python at Microsoft:
- 1996. "It's called what?"
- 1997. "You actually shipped Python code?" (MerchantServer 1.0)
- 1998. "Nice prototype. We'll rewrite it in the next version." And they did, in C++.
-
Python at CollabNet (poznati kao autori Subversiona):
- 2001. "No, we don't really use Python here."
- 2003. "Definitely write that in Python."
-
Python at Google:
- 2004. "Of course we use Python. Why wouldn't we?" Python caught on here [at Google] like a virus, moving from developer to developer.
-
-
- programski jezik visoke razine,
- naglasak na čitljivost koda,
- vrlo bogata standardna biblioteka,
- sličan C/C++-u, Perlu, Javi, Rubyju, JavaScriptu,
-
referentna implementacija je CPython:
- napisana u C-u,
- višeplatformska,
- dostupna pod slobodnom licencom,
- interpreter (nema kompajliranja).
-
danas vrlo korišten u raznim domenama, od numeričkog računanja u kvantnoj fizici i poravnavanja sekvenci gena do poslovne logike i web aplikacija
- Google pretraga za "who uses python" daje nekoliko popisa).
- postoji popis domena u kojima se Python koristi
- postoji popis korisnih modula koji omogućuju primjenu u raznim domenama
-
-
- verzija 0.9.0, Guido von Rossum na alt.sources,
-
- verzija 1.0, 1995. 1.2, 1996. 1.4, ...,
-
- verzije 1.6 i 2.0, Python razvojni tim napušta CNRI, interes za Python u zajednici otvorenog koda raste,
-
- verzija 3.0 poznata kao Python 3000 ili kraće Py3k, nekompatibilna s verzijom 2.0, promjene u sintaksi, izbačeni zastarjeli dijelovi.
-
-
Python 2 i Python 3 danas:
python
==python3
==python3.8
python2
==python2.7
-
Python 2 i Python 3 nekad:
python
==python2
==python2.7
python3
==python3.5
-
koristit ćemo Python 3.8 jer je Python 2.7 eksplicitno mrtav od 1. siječnja 2020. godine
Rad s Python interpreterom
-
interaktivni način rada
- pokretanjem naredbe
python3
dobivamo ljusku u koju možemo unositi naredbe >>>
unos naredbe...
nastavak prethodnog retka
- pokretanjem naredbe
-
pokretanje programa pomoću interpretera
- spremimo niz naredbi u datoteku s ekstenzijom
.py
i pokrenemo je interpreterompython3
-
zaglavlje je oblika
#!/usr/bin/env python3
-
env
tražipython3
na sustavu; on bi mogao biti u/usr/bin
,/usr/local/bin
ili čak u/opt/python3/bin
; autor skripte o tome ne mora brinuti
- spremimo niz naredbi u datoteku s ekstenzijom
-
Unicode
- Python 3 ga koristi u zadanim postavkama
-
kod Pythona 2 potrebno eksplicitno navesti u drugom retku zaglavlja
#!/usr/bin/env python # -*- coding: utf-8 -*-
-
- vrlo detaljno i kvalitentno napisana, i mnogo ćemo je koristiti; možete je koristiti na kolokviju
- naročito važni Tutorial i Library Reference
-
dinamički tipovi (engl. dynamic typing) -- nema deklaracije tipa varijable, određuje se prema pridruženoj vrijednosti
a = 3 b = "rijec"
// ekvivalentan C++ kod int a = 3; char* b = "rijec";
-
tipovi (klase) varijabli
- objektno orijentiran jezik: svaka varijabla je objekt
type() # vraća tip (klasu) objekta
-
osnovni tipovi varijabli
-
bool
,int
,long
,float
,complex
float
je pandan C++-ovomfloat
idouble
-
nepromjenjivi:
str
,bytes
,tuple
,frozenset
str
ibytes
su pandani C++-ovomstd::string
ichar*
tuple
je pandan C++-ovim poljima
-
promjenjivi:
list
,set
,dict
,bytearray
list
je pandan C++-ovomstd::list
istd::vector
set
je pandan C++-ovomstd::set
dict
je pandan C++-ovomstd::map
-
za svaki od tipova postoji istoimena funkcija (tzv. konstruktor) koja služi za stvaranje instanci klase i pretvaranje među različitim tipovima
-
-
osnovni operatori
=
,+
,-
,*
,**
,/
,//
,%
- pridruživanje, zbrajanje, oduzimanje, množenje, potenciranje, dijeljenje, cjelobrojno dijeljenje, modulo dijeljenje
-
"hello world": funkcija
print()
vrši ispis na ekranprint("Pozdrav Rijeci")
// ekvivalentan C++ kod #include <iostream> using namespace std; int main () { cout << "Pozdrav Rijeci" << endl; return 0; }
-
sustav pomoći
help()
-- interpreter ima u sebi ugrađenu dokumentacijuhelp(xyz) # pomoć za funkciju xyz() help("xyz") # pomoć na temu xyz
Rad s ljuskom IPython
Ljuska IPython proširuje funkcionalnost osnovnog intepretera.
<Tab>
kompletira uneseni niz znakova do imena naredbe/varijable/funkcije/tipa/modula, dvostruki<Tab>
nudi sve mogućnosti (isto kao u ljuscibash
).help(modul/funkcija/objektu)
ilimodul/funkcija/objekt?
daje detaljne informacije o modulu/funkciji/tipu, koje su pored toga lijepo formatirane.
Tip
Intrepreter ipython
je moguće testirati i izravno u web pregledniku.
Podrška za Python u uređivaču teksta Emacs
Emacs u standardnoj distribuciji ima python.el
koji mu omogućuje napredno baratanje Python kodom:
python-shift-left
,C-c C-<
: Decrease indentation of the regionpython-shift-right
,C-c C-<
: Increase indentation of the regionpython-switch-to-python
,C-c C-z
: Start (or switch) to a Python shellpython-send-buffer
,C-c C-c
: Run the current buffer in the Python interpreterpython-send-region
,C-c C-r
: Run the selected code in the Python interpreterpython-describe-symbol
,C-c C-f
: Get help on a Python symbol (Better than visiting the slow Python website, right?)
Zadatak
Napišite "hello world" program u Pythonu s pozdravom po želji, a zatim ga modificirajte kako je opisano.
- Pokušajte spomenuti način ispisati i varijable tipa
int
ifloat
. - Isprobajte na koji način radi ispis znakovnih nizova s našim znakovima.
- Ostavite proizvoljan znakovni niz sam u svom retku i pokušajte pokrenuti program. Što se ispisuje na ekran kod pokretanja programa? Što se mijena kod interaktivnog načina rada?
Objektni pristup programiranju
- atribut objekta je konstanta vezana uz objekt
- metoda objekta je funkcija vezana uz objekt
- funkcija
dir()
vraća popis atributa i metoda
a = 5 # varijabla a će dinamički postati tipa int
dir() # vraća popis atributa i metoda tipa int
Zadatak
U Pythonu se varijabli može pridružiti vrijednost kompleksnog broja na nekoliko načina, a najjednostavniji je a = 2+3j
(naravno, vrijednosti 2 i 3 mogu se zamijeniti bilo kojim int
ili float
brojevima).
- Pronađite način da ispište realni i imaginarni dio kompleksnog broja.
- Pronađite način da ispište kompleksni konjugat tog broja. Objasnite koju razliku pravi par zagrada
()
nakon metode.
Naredbe if
, else
, for
, while
-
Python zahtjeva točnu uvlaku koda; u protivnom, interpreter javlja grešku
- nedostatak uvlake:
IndentationError: expected an indented block
- višak uvlake:
IndentationError: unexpected indent
- Emacs za Python uvlaku koristi 4 razmaka (preporučeno, PEP 8) i automatski pravilno uvlači pritiskom na tipku
Tab
- nedostatak uvlake:
-
None
-- tip podataka ništa; (a
nedefiniran) != (a = None
) True
iFalse
-- boolean tip podataka;False
suint(0)
,float(0.0)
,str("")
,list([])
- operatori
and
ior
-
naredbe
if
ielse
if x < 0: print("Negative") elif x == 0: print("Zero") else: print("Positive")
// ekvivalentan C++ kod #include <iostream> using namespace std; int main () { if (x < 0) { cout << "Negative" << endl; } else if (x == 0) { cout << "Zero" << endl; } else { cout << "Positive" << endl; } return 0; }
-
tip podataka
range
- funkcija
range([start,] stop[, step])
vraća niz brojeva odstart
dostep
u koracimastep
- "početak uključen, kraj isključen" (prema idejama knjige C Traps and Pitfalls Andrewa Koeniga)
- funkcija
-
in
označava iteraciju po "elementima" nekog objekta (liste, uređene n-torke, rječnika, ...) -
naredba
for
for x in range(2, 7): print(x, x**2)
// ekvivalentan C++ kod #include <iostream> using namespace std; int main () { for (int x = 2; x < 7; x++) { cout << x << " " << x * x << endl; } }
-
naredba
while
x = 0 while x < 5: x += 1 print(x, x**2)
// ekvivalentan C++ kod #include <iostream> using namespace std; int main () { int x = 0; while (x < 5) { x++; cout << x << " " << x * x << endl; } }
Zadatak
Napišite program koji ispisuje:
- sve neparne brojeve u rasponu od 1 do 101 (uključujući 101),
- sve brojeve djeljive s 3 u rasponu od 5 do 45 (uključujući 45).
Rad sa znakovnim nizovima
-
Python koristi i jednostruke i dvostruke navodnike za navođenje znakovnih nizova
"...'..."
,'..."...'
ili"...\"..."
- mi ćemo koristiti dvostruke navodnike, s prekidnim znakom po potrebi
-
podnizovi znakovnih nizova rade po pravilu "početak uključen, kraj isključen"
a[i] # i-ti znak u nizu; ista sintaksa kao C++ a[i:j] # znakovi od i-tog do j-tog a[i:j:k] # svaki k-ti znak od i-tog do j-tog
-
str.strip()
miče razmake s početka i s kraja str.split()
cijepa znakovni niz u listu po razmacimastr.lower()
str.upper()
Zadatak
Neka je a = "AndrewKoenig"
.
-
Isprobajte čemu je jednako, pa objasnite zašto za iduće podnizove:
a[1:5]
,a[:3]
,a[2:]
,a[-3]
,a[:-1]
,a[1::2]
,a[::-1]
.
-
Pretvorite
a
u listu (korištenjem funkcijelist()
) i spremite je u varijablub
. Dobivate li iste rezultate kada tražite podliste?
Zadatak
Neka je a = "Miami 2 Ibiza"
.
- Pretvorite
a
u listu (korištenjem funkcijelist()
) i spremite je u varijablub
. - Pretvorite
a
u listu korištenjem metode split i spremite je u varijabluc
. - Je li
b
jednakoc
? Objasnite zašto je ili zašto nije.
Rad s listama
- ista sintaksa pristupanja pojedinom elementu kao kod znakovnih nizova
list.append()
dodaje element na kraj listelist.pop()
miče element s kraja listelist.insert()
ubacuje element u listu na određeno mjesto
Zadatak
Neka je a = [1, "Bok", [24, 7, 365], ["Da", "Ne"]]
.
-
Isprobajte čemu je jednako, pa objasnite zašto za iduće podliste:
a[1]
,a[2]
,a[2][0]
,a[2][4]
,a[3][1]
.
-
Promijenite vrijednost elementa
a[0]
na 5. - Umetnite element "Swedish House Mafia" na mjesto 1.
- Maknite element s kraja liste, a zatim na kraj liste umetnite listu koja sadrži brojeve 5, 4, 2.
Author: Vedran Miletić