Vous êtes sur la page 1sur 38

Programiranje 1

Liste, Stringovi, Torke

Univerzitet u Beogradu
Elektrotehnički fakultet
Sadržaj
 Liste
⚫ Ispisivanje liste i sortiranje liste
⚫ Ugrađene funkcije za rad sa listama
⚫ Kreiranje liste prema zadatom pravilu
 Stringovi
⚫ Operacije sa stringovima
⚫ Formatiranje stringova
⚫ ASCII
 Torke
⚫ Pakovanje i raspakivanje torki
ETF Beograd::Programiranje 1 2/38
Ispisivanje liste
 Lista se može ispisati:
⚫ Kao sama lista, okružena zagradama []
⚫ Konvertovana u string
⚫ Element po element, korišćenjem petlje
⚫ Korišćenjem operatora * za raspakivanje
lista = [1, 2, 3, 4, 5]

print(lista) # [1, 2, 3, 4, 5]
print(str(lista)[1:-1]) # 1, 2, 3, 4, 5

for x in lista:
print(x, end=" ") # 1 2 3 4 5
print()

print(*lista) # 1 2 3 4 5
print(*lista, sep=", ") # 1, 2, 3, 4, 5

ETF Beograd::Programiranje 1 3/38


Sortiranje liste
 Lista se može sortirati korišćenjem:
⚫ Nekog od algoritama za sortiranje (npr. selection sort)
⚫ Metode sort() za rad sa listama
lista = [3, 4, 5, 2, 1]
for i in range(len(lista)):
for j in range(i + 1, len(lista)):
if lista[i] > lista[j]:
lista[i], lista[j] = lista[j], lista[i]
print(lista) # [1, 2, 3, 4, 5]

def fun(elem):
return elem % 5

lista = [3, 4, 5, 2, 1]
lista.sort(); # [1, 2, 3, 4, 5]
lista.sort(reverse=True); # [5, 4, 3, 2, 1]
lista.sort(key=fun); # [5, 1, 2, 3, 4]
lista.sort(key=lambda x : x % 5, reverse=True) # [4, 3, 2, 1, 5]

ETF Beograd::Programiranje 1 4/38


Ugrađene funkcije za rad sa listama
 Mogu se koristiti kao pomoć:
⚫ prilikom provere uslova
⚫ za prolazak kroz elemente u petlji
lista = [3, 4, 5, 2, 1]
if lista != sorted(lista):
lista.sort() # 1 2 3 4 5

lista = [3, 4, 5, 2, 1]
print(*reversed(lista)) # 1 2 5 4 3

for i, x in enumerate(lista):
print("lista[{}] = {}".format(i, x))

prva = [3, 4, 5, 2, 1]
druga = [1, 2, 3, 4, 5]
for p, d in zip(prva, druga):
print(p + d, end=" ") # 4 6 8 6 6

ETF Beograd::Programiranje 1 5/38


Kreiranje liste prema zadatom pravilu (1)
 Jednostavan način za kreiranje nove liste

nova = [] nova = []
for x in stara: for x in stara:
nova.append(x**2) if x % 2 == 1:
nova.append(x**2)

nova = [
x**2
for x in stara nova = [
] x**2
for x in stara
if x % 2 == 1
nova = [x**2 for x in stara] ]

ETF Beograd::Programiranje 1 6/38


Kreiranje liste prema zadatom pravilu (2)
 Lista se kreira korišćenjem elemenata neke druge
sekvence (liste, stringa, opsega brojeva, ...)
a = [slovo for slovo in "string"] # ['s', 't', 'r', 'i', 'n', 'g']
b = [broj for broj in range(1, 6)] # [1, 2, 3, 4, 5]

 Pravilo po kojem se kreira lista je proizvoljan izraz


lista = input().split() # ['-3', '4', '5', '-2', '1']
lista = [int(x) for x in lista] # [-3, 4, 5, -2, 1]
c = [x**3 for x in lista] # [-27, 64, 125, -8, 1]
d = [y/x for x, y in zip(lista, c)] # [9.0, 16.0, 25.0, 4.0, 1.0]

 Moguće je filtriranje korišćenjem uslovnih izraza


e = [x for x in lista if x >= 0] # [4, 5, 1]
f = [x if x >= 0 else -x for x in lista] # [3, 4, 5, 2, 1]

ETF Beograd::Programiranje 1 7/38


Kreiranje liste prema zadatom pravilu (3)
 Dozvoljeno je ugnježdavanje
matrica = [[1, 2], [3, 4], [5, 6]] matrica = []
for i in range(3):
red = []
for j in range(2):
lista = []
red.append(i*2 + j + 1)
for red in matrica:
matrica.append(red)
for x in red:
lista.append(x)

matrica = []
for i in range(3):
lista = [ red = [i*2 + j + 1 for j in range(2)]
x matrica.append(red)
for red in matrica
for x in red
]
matrica = [
[i*2 + j + 1 for j in range(2)]
for i in range(3)
# [1, 2, 3, 4, 5, 6]
]

ETF Beograd::Programiranje 1 8/38


1. zadatak
 Na programskom jeziku Python sastaviti funkciju
koja računa skalarni proizvod vektora.
p: 1, 2, 3
q: 4, 5, 6
[1.0, 2.0, 3.0] * [4.0, 5.0, 6.0] = 32.0

def skalarni_proizvod(p, q):


s = [p_koor * q_koor for p_koor, q_koor in zip(p, q)]
return sum(s)

p = [float(x) for x in input("p: ").split(", ")]


q = [float(x) for x in input("q: ").split(", ")]
print("{} * {} = {}".format(p, q, skalarni_proizvod(p, q)))

ETF Beograd::Programiranje 1 9/38


2. zadatak
 Na programskom jeziku Python sastaviti program
koji tabelira polinom.
 Primer: 𝑃 𝑥 = 3𝑥 2 + 𝑥 + 4

stepen = int(input())
koeficijenti = [float(k) for k in input().split()]
xmin, xmax, dx = [float(x) for x in input().split(", ")]
x = xmin
while x <= xmax:
p = 0
for i, k in enumerate(koeficijenti):
p += k * x**(stepen - i)
print("x = {} -> P(x) = {}".format(x, p))
x += dx

ETF Beograd::Programiranje 1 10/38


3. zadatak
 Na programskom jeziku Python sastaviti funkcije
koje za prosleđenu listu i količnik 𝑘 proveravaju:
⚫ a) Da li je bar jedan element liste deljiv količnikom 𝑘
⚫ b) Da li su svi elementi liste deljivi količnikom 𝑘
 Koristiti ugrađene funkcije any() i all().

def bar_jedan_deljiv(lista, k):


deljivost = [not x % k for x in lista]
return any(deljivost)

def svi_deljivi(lista, k):


deljivost = [not x % k for x in lista]
return all(deljivost)
ETF Beograd::Programiranje 1 11/38
Stringovi
 String literali se okružuju znacima navoda:
⚫ Jednostrukim ('…') ili dvostrukim ("…")
print('Tekst između jednostrukih znaka navoda.')
print("Tekst između dvostrukih znaka navoda.")

 Ako se string piše u više redova, okružuje se sa


tri para znaka navoda:
⚫ Jednostrukih ('''…''') ili dvostrukih ("""…""")
print("""Tekst
napisan u više
redova mora se
okružiti sa
tri para znaka
navoda""")

ETF Beograd::Programiranje 1 12/38


Operacije sa stringovima
 Dodela vrednosti promenljivoj tipa string obavlja
se korišćenjem operatora =
 Konkatenacija (nadovezivanje) dva stringa se
obavlja korišćenjem operatora +
 Elementima stringa se pristupa korišćenjem []
 Za proveru da li se neki string nalazi u drugom
stringu koriste se operatori in i not in
a = "Ovo je "
b = "kraj rečenice."
c = a + b # c = "Ovo je kraj rečenice."
d = c[7:11] # d = "kraj"
e = d in c # e = True

ETF Beograd::Programiranje 1 13/38


Formatiranje stringova
 Uparivanje:
print("{} reč".format("jedna")) # jedna reč
print("{} i {}".format("prva", "druga")) # prva i druga
print("{1} i {0}".format("prva", "druga")) # druga i prva
print("{macak} i {mis}".format(mis = "Jerry", macak = "Tom")) # Tom i Jerry

 Formatiranje brojeva:
print("{:10d}".format(42)) # 42
print("{:010b}".format(42)) # 0000101010
print("{:10.2f}".format(-3.141592653589793)) # -3.14
print('{:=+10.5f}'.format(3.141592653589793)) # + 3.14159

 Formatiranje teksta:
print("{:<20.5s}".format("levo?")) # levo?
print("{:.>9s}".format("desno!")) # ...desno!
print("{:-^9.3s}".format("sredina")) # ---sre---

ETF Beograd::Programiranje 1 14/38


3. zadatak (1/2)
 Na programskom jeziku Python sastaviti program
koji sa standardnog ulaza učitava studentski mejl
formata piggbbbbt@student.fax.rs, a zatim iz
njega dobija podatke o fakultetu, tipu studija
(osnovne ili master) i broju indeksa studenta i
ispisuje ih na standardnom izlazu.
Unesite vaš studentstki mejl: db190189d@student.etf.rs
Vi ste student osnovnih studija.
Studirate na ETF-u.
Vaš broj indeksa je 2019/0189.

ETF Beograd::Programiranje 1 15/38


3. zadatak (2/2)
p i g g b b b b t @
0 1 2 3 4 5 6 7 8 9

s t u d e n t . f a x . r s
-14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

email = input("Unesite vaš studentstki mejl: ")


year = email[2:4]
number = email[4:8]
type = email[8]
school = email[-6:-3]
full_year = ("20" if int(year) <= 19 else "19") + year
full_type = "osnovnih" if type == "d" else "master"
print("Vi ste student {} studija.".format(full_type))
print("Studirate na {}-u.".format(school.upper()))
print("Vaš broj indeksa je {}/{}.".format(full_year, number))

ETF Beograd::Programiranje 1 16/38


4. zadatak (1/2)
 Na programskom jeziku Python sastaviti program
koji pronalazi palindrome.
Unesite rečenicu: Maja sa Nedom ode na sajam
"Maja sa Nedom ode na sajam" JESTE palindrom.

def prepareSentence(s):
return s.lower().strip().replace(" ", "")

def isPalindrome1(s):
prepared = prepareSentence(s)
for i in range(len(prepared) // 2):
if prepared[i] != prepared[-i-1]:
return False
return True
ETF Beograd::Programiranje 1 17/38
4. zadatak (2/2)
def isPalindrome2(s):
prepared = prepareSentence(s)
for p, r in zip(prepared, reversed(prepared)):
if p != r:
return False
return True

def isPalindrome3(s):
prepared = prepareSentence(s)
reverse = prepared[::-1]
return prepared == reverse

sentence = input("Unesite rečenicu: ")


if isPalindrome3(sentence):
print("\"{}\" JESTE palindrom.".format(sentence))
else:
print("\"{}\" NIJE palindrom.".format(sentence))
ETF Beograd::Programiranje 1 18/38
5. zadatak
 Na programskom jeziku Python sastaviti program
koji pronalazi i ispisuje najdužu od učitanih reči.
Reči se odvajaju razmakom. Ako ima više reči iste
dužine ispisati prvu. Šta u kodu treba izmeniti da bi
se ispisala poslednja takva reč.

words = input("Unesi reči odvojene razmakom: ").split()


longest = ""
for word in words:
if len(word) > len(longest):
longest = word
print("Najduža reč je {}.".format(longest))
print("Sastoji se od {} karaktera.".format(len(longest)))

ETF Beograd::Programiranje 1 19/38


6. zadatak (1/4)
 Na programskom jeziku Python sastaviti funkciju
koja proverava da li se u prosleđenoj rečenici svaka
instanca prvog prosleđenog slova nalazi pre svake
instance drugog prosleđenog slova. Proleđena
slova se pojavljuju bar jednom u rečenici.
Unesite rečenicu: profesori predaju python na programiranju
Unesite slova: p o
Nije svako slovo p pre svakog slova o.

Unesite rečenicu: ranijih godina se predavao pascal


Unesite slova: i p
Svako slovo i se nalazi pre svakog slova p.

ETF Beograd::Programiranje 1 20/38


6. zadatak (2/4)
def isEveryFirstBeforeEvertSecond(sentence, first, second):
f = 0
s = len(sentence)
found = False
for i, letter in enumerate(sentence):
if letter == first:
f = i
elif letter == second and not found:
s = i
found = True
return f < s

 Da li može efikasnije? Da li je bitna pozicija slova u


rečenici za određivanje uslova?
ETF Beograd::Programiranje 1 21/38
6. zadatak (3/4)
def isEveryFirstBeforeEvertSecond(sentence, first, second):
f = False
s = False
for letter in sentence:
if letter == first:
if s:
return False
f = True
elif letter == second:
if not f:
return False
s = True
return True

 Da li može preko metoda za rad sa stringovima?


ETF Beograd::Programiranje 1 22/38
6. zadatak (4/4)
def isEveryFirstBeforeEvertSecond(sentence, first, second):
return sentence.rindex(first) < sentence.index(second)

def isEveryFirstBeforeEvertSecond(sentence, first, second):


return sentence.rfind(first) < sentence.find(second)

sentence = input("Unesite rečenicu: ")


first, second = input("Unesite slova: ").split()
if isEveryFirstBeforeEvertSecond(sentence, first, second):
print("Svako slovo {} se nalazi pre svakog slova {}."
.format(first, second))
else:
print("Nije svako slovo {} pre svakog slova {}."
.format(first, second))

ETF Beograd::Programiranje 1 23/38


7. zadatak (1/2)
 Na programskom jeziku Python sastaviti program
koji uneti broj prikazuje u Majanskom brojnom
sistemu. U pitanju je brojni sistem sa osnovom 20.
Svaka cifra se prikazuje korišćenjem tačaka i crtica,
dok se cifra 0 prikazuje kao školjka.
 Primeri:
⚫ 33 = 1*201 + 13*200

⚫ 5125 = 12*202 + 16*201 + 5*200

ETF Beograd::Programiranje 1 24/38


7. zadatak (2/2)
number = int(input("Unesi broj: "))
mayan = []
while number:
remainder = number % 20
if remainder:
dots = "{:^5}\n".format("o" * (remainder % 5))
bars = "_____\n" * (remainder // 5)
symbol = dots + bars
else:
symbol = "{:^5}".format("@")
mayan.append(symbol)
number = number // 20;
mayan.reverse()
if not mayan:
mayan.append("{:^5}".format("@"))
for digit in mayan:
print(digit)
ETF Beograd::Programiranje 1 25/38
ASCII
 Upravljački znaci (0-31)
 Znaci koji uvek mogu da se štampaju (32-127)

ETF Beograd::Programiranje 1 26/38


8. zadatak (1/3)
 Na programskom jeziku Python sastaviti program
koji u zadatom tekstu prebrojava mala i velika
slova, cifre i ostale znake. Obrađuje se linija po
linija, sve dok se ne unese prazan red. U programu
iskoristiti:
⚫ a) ugrađene funkcije: ord() i chr()
⚫ b) metode za rad sa stringovima: isupper(), islower(),
isalpha() i isdigit()

ETF Beograd::Programiranje 1 27/38


8. zadatak (2/3)
 a):

num_ll = num_ul = num_di = num_ot = 0


ll = [chr(l) for l in range(ord("a"), ord("z") + 1)]
ul = [chr(l) for l in range(ord("A"), ord("Z") + 1)]
di = [chr(d) for d in range(ord("0"), ord("9") + 1)]
while True:
line = input()
if len(line) == 0: break
for char in line:
if char in ll: num_ll += 1
elif char in ul: num_ul += 1
elif char in di: num_di += 1
else: num_ot += 1
print(num_ll, num_ul, num_di, num_ot)

ETF Beograd::Programiranje 1 28/38


8. zadatak (3/3)
 b):

num_ll = num_ul = num_di = num_ot = 0


while True:
line = input()
if len(line) == 0: break
for char in line:
if char.isalpha() and char.islower(): num_ll += 1
elif char.isalpha() and char.isupper(): num_ul += 1
elif char.isdigit(): num_di += 1
else: num_ot += 1
print(num_ll, num_ul, num_di, num_ot)

 Da li su neophodni svi postavljeni uslovi?


ETF Beograd::Programiranje 1 29/38
Torke
 Kolekcije drugih objekata (kao lista)
 Nepromenljiv tip podataka (za razliku od lista):
⚫ Brže iteracije kroz torke nego kroz liste
 Elementi mogu biti različitih tipova (kao kod lista)
 Elementi su uređeni (kao kod lista)
 Dozvoljeni su duplikati (kao kod lista)
torka = tuple([1, "tekst", 1, False]) # (1, 'tekst', 1, False)
torka = (1, "tekst", 1, False) # (1, 'tekst', 1, False)
torka = 1, "tekst", 1, False # (1, 'tekst', 1, False)
torka = (1,) # (1,)
torka = 1, # (1,)

ETF Beograd::Programiranje 1 30/38


9. zadatak
 Na programskom jeziku Python sastaviti program
koji sortira dva prosleđena broja.

def min_max(a, b):


return min(a, b), max(a, b)

a, b = input("A, B: ").split()
a, b = min_max(a, b)
asc_desc = input("R | O: ")
if asc_desc in ("o", "O"):
a, b = b, a
print("{}: {}, {}".format(asc_desc, a, b))

 Gde su sve korišćene torke u zadatku?


ETF Beograd::Programiranje 1 31/38
Pakovanje i raspakivanje torki
 Pakovanje i raspakivanje torki realizuje se
korišćenjem operatora *
torka = (1, "tekst", 1, False)
a, b, *c = torka # a = 1 b = 'tekst' c = [1, False]

def pakovanje(*torka):
for element in torka:
print(element, end=' ')
print()

pakovanje(3, 2, 4, 5, 1) # 3 2 4 5 1

def raspakivanje(a, b, c, d):


print(a, b, c, d)

lista = [1, 2, 3, 4]
raspakivanje(*lista) # 1 2 3 4
print(*lista) # 1 2 3 4

ETF Beograd::Programiranje 1 32/38


Pregled

ETF Beograd::Programiranje 1 33/38


Pregled – Funkcije i metode
 Ugrađene funkcije:
⚫ sorted() ⚫ enumerate() ⚫ any() ⚫ ord()
⚫ reversed() ⚫ zip() ⚫ all() ⚫ chr()
 Metode za rad sa stringovima:
⚫ upper() ⚫ replace() ⚫ find() ⚫ islower()
⚫ lower() ⚫ index() ⚫ rfind() ⚫ isaplha()
⚫ strip() ⚫ rindex() ⚫ isupper() ⚫ isdigit()
 Metode za rad sa listama:
⚫ sort()

ETF Beograd::Programiranje 1 34/38


Pregled – Operatori
 Aritmetički operatori
 Bitski operatori
 Operatori dodele
 Relacioni operatori
 Logički operatori
 Operatori identiteta
 Operatori pripadnosti
⚫ in, not in

ETF Beograd::Programiranje 1 35/38


Pregled – Tipovi podataka
 Int
 Float  Numerički tipovi
 Complex
 Boolean  Logički tip
 String
 List
 Tuple  Kolekcije
 Set
 Dict
ETF Beograd::Programiranje 1 36/38
Literatura – Knjige
 M. Kovačević, Osnove programiranja u Pajtonu,
Akademska misao, Beograd, 2017.
 M. Lutz, Learning python: Powerful object-oriented
programming, 5th edition, O'Reilly Media, Inc., 2013.
 J. Zelle, Python Programming: An Introduction to
Computer Science, 3rd Ed., Franklin, Beedle &
Associates, 2016.
 D. Beazley, B. K. Jones, Python Cookbook, 3rd edition,
O'Reilly Media, 2013.
 A. Downey, J. Elkner, C. Meyers, How To Think Like A
Computer Scientist: Learning With Python, free e-book
ETF Beograd::Programiranje 1 37/38
Literatura – Online izvori
 Python 3 documentation,
https://docs.python.org/3/index.html
 Learn Python, Basic tutorial,
https://www.learnpython.org/
 TutorialsPoint, Python tutorial
https://www.tutorialspoint.com/python/index.htm
 W3Schools, Python tutorial
https://www.w3schools.com/python/
 GeeksforGeeks, Python programming language
https://www.geeksforgeeks.org/python-programming-
language/
ETF Beograd::Programiranje 1 38/38

Vous aimerez peut-être aussi