Professional Documents
Culture Documents
Milan Bjelica
Beograd, 2016.
Uvod
1.1
ta je Python
S Wikipedije:
1.2
Zato ga uimo?
slobodni softver
lako se ui
prvi programski jezik
bogate biblioteke:
na MIT
matematiki prorauni
crtanje graka funkcija
obrada TK signala
simulacija
upravljanje laboratorijskim instrumentima
programiranje mrenih aplikacija (Google, Youtube)
xrange i unicode
stringova.
forking.
Na dananjem
1.3
1.3.1
Kako se instalira?
Linux
Sve to treba je prevui iz baze python 2.7 i potrebne module npr. numpy, scipy, matplotlib, pylab (obuhvata tri prethodna), python-serial... Neki moduli, kao npr. vxi11,
nisu u bazi, te ih treba preuzeti s njihovog sajta i slediti uputstvo za instalaciju (najee jedna komanda u terminalu).
1.3.2
Win
Canopy
sa sajta
www.enthought.com,
koja
sadri najvei broj standardnih modula. One ostale, poput pySeriala, treba preuzeti s
njihovog sajta i slediti uputstvo za instalaciju.
1.4
Dokumentacija
www.python.org/doc
online
Veoma
2.1
Opte
case sensitive
#.
\.
2.2
help(naredba ).
a = 1.17
ili
X = 8.
integers )
obini (plain integers ) celi brojevi u opsegu od -2147483648
celi (
dugi (
False i True
nizovi (
celi brojevi
niske/stringovi (
tuples )
liste (lists ) npr. [1, 9, 10, 78]
n-torke (
mappings )
preslikavanja (
izvrivi tipovi (
callable types )
Funkcija
user-dened functions )
metode koje deniu korisnici (user-dened methods )
type(argument )
2.3
hex(0o472).
2.4
oct, hex
bin,
npr.
Kompleksni brojevi
j ili J. Kompleksni broj se moe formirati
a = complex(1, 2), ili se moe zadati eksplicitno, npr. b =
3 + 4j.
complex,
npr.
Osnovne funkcije i metode nad kompleksnim brojevima navedene su u tabeli. U primeru je pretpostavljeno da je kompleksni broj smeten u promenljivu
Oznaka
Opis
z.real
z.imag
abs(z)
z.conjugate()
2.5
z.
realni deo
imaginarni deo
moduo
konjugovano-kompleksni broj
Znaenje
//
sabiranje
oduzimanje
mnoenje
deljenje
stepenovanje
celobrojno deljenje
a = 3
umesto
a = a3.
2.6
Logike operacije
Operandi su tipa
2.7
bool (True
ili
False;
Simbol
Znaenje
and
or
not
i
logiko ili
logiko ne
logiko
Operatori poreenja
Simbol
==
!=
<>
>
<
>=
<=
Znaenje
je jednako
nije jednako
nije jednako
vee od
manje od
vee ili jednako
manje ili jednako
ili
0).
Korienje modula
del.
import.
p:
import math
math.sin(math.pi/4)
Oigledno, ovakvo pozivanje funkcija (i konstanti) ne samo da je naporno, ve je i
programski kd nepregledan. Obriimo stoga modul
i kucajmo
import math as m
m.sin(m.pi/4)
del m
Umesto oznake
m, mogli smo koristiti i bilo koju drugu; ako nam je cilj uteda vremena
Liste
Listu ine elementi uzajamno odvojeni zapetama, koji se nalaze unutar uglastih zagrada:
4.1
N 1.
N .
A[0]
A[1]
A[-1]
A[-2]
A[i:j]
A[0:3]
A[:3]
A[1:3]
A[2:-1]
A[1:]
4.2
Znaenje
prvi element
drugi element
poslednji element
pretposlednji element
elementi od indeksa
do indeksa
j1
len
del
append
extend
reverse
sort
index
count
remove
in
Opis
Primer upotrebe
len(A)
del A[2]
A.append([5, 7])
A.extend([5, 7])
A.reverse()
A.sort()
A.index(5)
A.count(5)
A.remove(5)
5 in A
Lista koja sadri redom cele brojeve u zadatom opsegu generie se naredbom
Na primer,
4.3
range(7)
range.
Nizovi i matrice
Prazan niz
append.
inicijalizuje se naredbom
A = []
[0]*10.
A = [[1, 2], [3, 4], [5, 6]].
elementima lista, npr. A[1][0].
Elemen-
Kontrola toka
Za razliku od programskih jezika koji programske blokove razdvajaju pomou vitiastih zagrada ili kljunih rei (npr.
end),
# if elif else
if a > b:
print "a je vece od b"
elif b > a:
print "b je vece od a"
else:
print "a i b su jednaki"
# for petlja, indeksiranje po listi
W = range(100)
for i in W:
print 'korak broj', i+1
# for petlja, indeksiranje po stringu
Q = 'programski jezik Python'
for j in Q:
print j
Funkcije
# pozivanje funkcije
# pomoc
# brisanje funkcije
10
Stringovi
String (niska) je grupa simbola unutar apostrofa (') ili navodnika ("), npr.
'13E033tm'.
Ukoliko string zauzima vie od jednog reda, kao delimiter se koriste tri apostrofa ('''),
kao to je to bio sluaj u primeru iz odeljka 6.
Podatak drugog tipa prevodi se u string naredbom
str.
7.1
len
+
*
[]
[:]
in
7.2
Opis
Primer upotrebe
len(s)
s + 'abc'
s 5
s[5]
s[2:7]
'a' in s
Primer primene
Opis
s.capitalize()
Kopija stringa
s.count(target )
s.find(target )
s.lower()
s.replace(old, new )
s.split(sep )
s.upper()
target
u stringu
target
s.
u stringu
s.
11
7.3
Formatirani izlaz
7.3.1
Funkcija print()
S funkcijom
print()
ment na monitoru:
n = 5
print(n)
print n
Funkciji se kao argument moe predati vie objekata, koji ne moraju biti istog tipa;
njihove vrednosti e se ispisati u istom redu, razdvojene razmacima:
7.3.2
Metoda format
format.
gom koji predstavlja eljeni format ispisa, dok joj se kao argument predaju podaci koje
treba ispisati:
'format_ispisa '.format(podaci ).
'{0}:{2};{1}'
znai
vitiaste
'{0:3},{1:5}'
na
onoliko mesta koliko je potrebno da bi se u potpunosti prikazao. Ukoliko se podaci ispisuju redom kojim su navedeni u argumentu metode
zagradama moe se izostaviti, npr.
'{:3},{:5}'.
format,
Kada je irina polja vea od broja cifara, brojevi se poravnavaju uz desnu ivicu; nasuprot tome, stringovi se podrazumevano poravnavaju iz levu.
Preciznost oznaava koliko se cifara realnog broja ispisuje pre i posle decimalne take;
zadaje se prirodnim brojem koji sledi posle irine polja i simbola
'{:8.4}'
na primer,
Vrsta zapisa broja zadaje se slovnom oznakom, prema tabeli. Podrazumevani ispis je
u decimalnoj notaciji.
12
Simbol
b
c
d
o
x
X
a-f
slova A-F
Primeri:
>>> n = 10
>>> '{:b}'.format(n)
'1010'
>>> '{:c}'.format(n)
'\n'
>>> '{:d}'.format(n)
'10'
>>> '{:o}'.format(n)
'12'
>>> '{:x}'.format(n)
'a'
>>> '{:X}'.format(n)
'A'
13
Podatak koji se unese preko komandne linije (prompta) ita se u vidu stringa naredbom
raw_input:
x = raw_input('Koji je danas dan? ')
print('Danas je ' + x + '.')
Ako je ulazni podatak druge prirode (npr. broj), potrebno je konvertovati mu format:
y = raw_input('Unesite broj:
z = float(y)**2
print 'Njegov kvadrat je', z
')
14
Rad s datotekama
import os
print os.getcwd()
Datoteka se otvara komandom
open,
'w',
'a')
'a' (append )
Opis
f.read(n)
iz datoteke se ita
f.read()
f.readline()
f.readlines()
f.write(s)
f.close()
string
se upisuje u datoteku
datoteka se zatvara
Primer:
f = open('dat.txt', 'w')
f.write('novi tekst')
f.close()
15
10
Izvravanje programa
prog.py.
Iz
komandne linije
emo
#!/usr/bin/python
Ako program treba da prihvata ulazne argumente, npr. dva numerika parametra, realni
broj
i ceo broj
k,
import sys
m = float(sys.argv[1])
k = int(sys.argv[2])
Program se sad iz komandne linije poziva uz numerike vrednosti argumenata, npr.
16
11
Matematike funkcije
pylab
11.1
koje on sadri.
Tabeliranje funkcija
numpy.
Iako kao argument prihvataju i liste, zbog mogunosti kasnijeg crtanja njihovih
ones
ili
arange
Funkcija
arrays ).
x = arange(0, 1, .01)*2*pi
y = cos(x)
z = sin(x)
11.2
.npy
datoteke:
np.save('vrednosti_y.npy', y)
w = np.load('vrednosti_y.npy')
11.3
Osnovna naredba je
plot,
logy
ili
loglog.
show().
plot
plot(x, y, 'b-').
koriste se naredbe
semilogx, semi-
show,
17
uzimaju i
Simbol
'-'
'--'
'-.'
':'
'.'
'o'
Znaenje
Oznaka
'b'
'g'
'r'
'c'
'm'
'k'
'w'
puna linija
isprekidana linija
taka-crta
takasta linija
takasti marker
kruni marker
Znaenje
plava
zelena
crvena
svetloplava
ljubiasta
crna
bela
Kada se u istom prozoru crta vie graka, poeljno je postaviti legendu u kojoj e biti
objanjeno na koju se funkciju (ili skup podataka) odnosi svaki od njih. To se postie
stringovskim argumentom
label.
linewidth.
title.
1.0
cos
sin
f(x)
0.5
0.0
0.5
1.00
18
12
Upravljanje instrumentima
12.1
Uvod
ta je cilj:
Potrebni moduli:
12.2
Pyserial
12.2.1
null-modem
ili
straight-through.
Stan-
timeout,
mrtvoj petlji.
19
!
!
import serial
instr = serial.Serial(1)
instr.timeout = 5
import serial
par = serial.Serial(0, timeout = 2)
12.2.2
# moze i ovako
pyserial,
CHannel<n>:SCAle value .
CHannel<n>:SCAle?,
Terminator je
line feed
a za podeavanje
(<LF>,
\n).
12.2.3
Zatvaranje porta
instr.close()
12.3
USB
Identikatori instrumenta su
Nije potreban terminator.
Metoda
ask
i, opciono,
Serial Number.
zatvaranja objekta.
import usbtmc
fg = usbtmc.Instrument(0x0957, 0x1755)
fg.ask('*idn?')
20
Nema eksplicitnog
12.4
Ethernet LAN
Identikator instrumenta je njegova IP adresa. Potrebno je na instrumentu i, eventualno raunaru podesiti kompatibilne maske podmree i adrese mrenog prolaza.
Ukoliko se instrument prikljuuje direktno na raunar, koristi se
suprotnom
straight-through.
ask
import vxi11
sa = vxi11.Instrument('147.91.10.54')
sa.ask('*idn?')
sa.close()
# zatvaranje objekta
21
crossover
kabl, u
!
!
13
Neka je
niz s
rezultata merenja.
13.1
Deskriptivna statistika
Funkcija
Opis
min(X)
max(X)
mean(X)
median(X)
var(X)
var(X, ddof = 1)
std(X)
std(X, ddof = 1)
histogram(X, bins = k)
13.2
minimalna vrednost
maksimalna vrednost
matematiko oekivanje
medijana
varijansa, u imeniocu
varijansa, u imeniocu
N
N 1
N
N 1
stubia
Vizuelizacija raspodele
Funkcija
boxplot(X)
hist(X, bins = k)
13.3
Opis
boks-dijagram
histogram s
stubia
Polinomska regresija
X niz s vrednostima nezavisne i Y niz s vrednostima zavisne promenljive. Koecijenti polinoma p(x) = p[0] * x**deg + ...
+ p[deg], koji u smislu minimalne
srednje kvadratne greke opisuje zavisnost Y = p(X) raunaju se kao
Neka je
p = polyfit(X, Y, deg)
Za potrebe grakog prikaza, regresioni polinom moemo jednostavno tabelirati na
sledei nain:
fit_fn = poly1d(p)
Y_fit = fit_fn(X)
22
14
scipy.signal:
Funkcija
stem.
Opis
convolve(x, y)
correlate(x, y)
hilbert(x)
xiy
xiy
decimate(x, q)
resample(x, n)
14.1
decimiranje signala
interpoliranje signala
za faktor
do
uzoraka
Spektralna analiza
pylab.
U modulu
scipy.signal
periodogram
fft
iz
14.2
Projektovanje ltara
scipy.signal:
etvrti ar-
h;
w, gd = group_delay((b, a), w=None, whole=False) izraunavanje grupnog kanjenja digitalnog ltra. Znaenja argumenata: b, a - koecijenti polinoma u brojniku
i nazivniku funkcije prenosa; w - opcioni argument, ako je None, frekvencije se uzimaju
23
frequz.
Izlazi:
14.2.1
whole
- opcioni
gd.
(u
FIR ltri
Njen
prvi argument je broj koecijenata ltra (red ltra uvean za jedan), a drugi su normalizovane frekvencije koje odgovaraju granicama propusnih/nepropusnih opsega. Funkcija
vraa koecijente ltra. Ako je red ltra paran, ltar je tipa I; u suprotnom je tipa II.
Funkcija
firwin(N,
firwin(N,
firwin(N,
firwin(N,
firwin(N,
Opis
f)
f, window = 'blackman')
f, pass_zero = False)
[f1, f2], pass_zero = False)
[f1, f2], window = 'bartlett')
Funkcijom
remez
Primer:
Generisaemo
n = 320
uzoraka signala
1.5
0.45
0.40
1.0
0.35
0.30
0.25
|X(jf)|
x(t)
0.5
0.0
0.20
0.5
0.15
0.10
1.0
1.5
0.000
0.05
0.001
0.002
0.003
t [s]
0.004
0.005
0.006
0.000
0.007
25
10000
20000
f [Hz]
30000
40000
50000
1.0
0.5
10000
15000
20000
25000
y(t)
5000
0
5
arg{H(jf)}
1.5
|H(jf)|
1.2
1.0
0.8
0.6
0.4
0.2
0.00
0.0
0.5
10
15
1.0
20
250
14.2.2
5000
10000
f [Hz]
15000
20000
1.5
0.000
25000
0.001
0.002
0.003
t [s]
0.004
0.005
0.006
0.007
IIR ltri
iirdesign
iz modula
scipy.signal:
granine krune uestanosti propusnih (wp) i nepropusnih opsega (ws), normalizovane na Nyquistovu krunu uestanost;
= True),
vrsta izlaza brojnik i nazivnik ('ba'), nule, polovi i dobitak ('zpk') ili sekcije
drugog reda ('sos').
Na drugi nain, IIR ltri se projektuju u dva koraka, tako to se u prvom odredi
red ltra kojim se postie eljeni gabarit, dok se u drugom koraku odreuje funkcija
prenosa:
1.
2.
buttord butter
cheb1ord cheby1
cheb2ord cheby2
ellipord ellip
Tip ltra
Butterworthov
ebievljev I vrste
ebievljev II vrste
Cauerov (eliptiki)
bessel.
26
15
Moduo
socket
Osnovna funkcija je
novi
socket
kojom se pravi
vrsta
socketa
15.1
socketom
socket.close()
Zatvara se
socket.
na speci-
socket.listen(backlog)
backlog
socket.recv(bufsize[, flags])
gom. Argumentom bufsize zadaje
Prima se podatak sa
socketa
i predstavlja strin-
odjednom proitati. Preporuka je da to bude relativno mali broj stepena 2, npr. 4096.
Argument
flags
socketa
socket.send(string[, flags])
biti povezan na udaljeni
flags
socket,
alje se podatak na
socket,
recv().
27
15.2
Primeri
15.2.1
Raw Ethernet
15.2.2
UDP
Klijentski program:
28
15.2.3
TCP
Klijent:
29
Sadraj
1 Uvod
3 Korienje modula
4 Liste
5 Kontrola toka
6 Funkcije
10
7 Stringovi
11
14
9 Rad s datotekama
15
10 Izvravanje programa
16
11 Matematike funkcije
17
12 Upravljanje instrumentima
19
22
23
27
dr Milan Bjelica,
Univerzitet u Beogradu Elektrotehniki fakultet
email: milan@etf.rs
PROGRAMSKI JEZIK PYTHON:
SKRIPTA ZA STUDENTE TELEKOMUNIKACIJA
Recenzenti:
prof. dr Aleksandra Smiljani,
doc. dr Mirjana Simi-Pejovi
Izdava:
Univerzitet u Beogradu
Elektrotehniki fakultet
ISBN: 978-86-7225-058-9