Programiranje 1
Liste, Stringovi, Torke
Univerzitet u BeograduElektrotehnič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 5print(*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
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
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
ETF Beograd::Programiranje 1 5/38
Kreiranje liste prema zadatom pravilu (1)
nova = []for x in stara:
nova.append(x**2)
nova = [x**2for x in stara
]
nova = []for x in stara:
if x % 2 == 1:nova.append(x**2)
nova = [x**2for x in staraif x % 2 == 1
]
Jednostavan način za kreiranje nove liste
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, ...)
Moguće je filtriranje korišćenjem uslovnih izraza
Pravilo po kojem se kreira lista je proizvoljan izraz
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]
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]
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]]
lista = []for red in matrica:
for x in red:lista.append(x)
lista = [xfor red in matricafor x in red
]
# [1, 2, 3, 4, 5, 6]
matrica = []for i in range(3):
red = []for j in range(2):
red.append(i*2 + j + 1)matrica.append(red)
matrica = []for i in range(3):
red = [i*2 + j + 1 for j in range(2)]matrica.append(red)
matrica = [[i*2 + j + 1 for j in range(2)]for i in range(3)
]
ETF Beograd::Programiranje 1 8/38
Na programskom jeziku Python sastaviti funkcijukoja računa skalarni proizvod vektora.
1. zadatak
p: 1, 2, 3q: 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
Na programskom jeziku Python sastaviti programkoji tabelira polinom.
Primer:
2. zadatak
stepen = int(input())koeficijenti = [float(k) for k in input().split()]xmin, xmax, dx = [float(x) for x in input().split(", ")]x = xminwhile x
Na programskom jeziku Python sastaviti funkcijekoje 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().
3. zadatak
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 ("…")
Ako se string piše u više redova, okružuje se satri para znaka navoda: Jednostrukih (' ' '…'' ') ili dvostrukih ("""…""")
print('Tekst između jednostrukih znaka navoda.')print("Tekst između dvostrukih znaka navoda.")
print("""Tekstnapisan u višeredova mora seokružiti satri para znakanavoda""")
ETF Beograd::Programiranje 1 12/38
Operacije sa stringovima
Dodela vrednosti promenljivoj tipa string obavljase 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 ina = "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
print("{} reč".format("jedna")) # jedna rečprint("{} i {}".format("prva", "druga")) # prva i drugaprint("{1} i {0}".format("prva", "druga")) # druga i prvaprint("{macak} i {mis}".format(mis = "Jerry", macak = "Tom")) # Tom i Jerry
print("{:10d}".format(42)) # 42print("{:010b}".format(42)) # 0000101010print("{:10.2f}".format(-3.141592653589793)) # -3.14print('{:=+10.5f}'.format(3.141592653589793)) # + 3.14159
Uparivanje:
Formatiranje brojeva:
print("{:9s}".format("desno!")) # ...desno!print("{:-^9.3s}".format("sredina")) # ---sre---
Formatiranje teksta:
ETF Beograd::Programiranje 1 14/38
4. zadatak (1/2)
Na programskom jeziku Python sastaviti programkoji sa standardnog ulaza učitava studentski mejlformata [email protected], a zatim iznjega dobija podatke o fakultetu, tipu studija(osnovne ili master) i broju indeksa studenta iispisuje ih na standardnom izlazu.
Unesite vaš studentstki mejl: [email protected] ste student osnovnih studija.Studirate na ETF-u.Vaš broj indeksa je 2019/0189.
ETF Beograd::Programiranje 1 15/38
4. zadatak (2/2)
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)
5. zadatak (1/2)
Na programskom jeziku Python sastaviti programkoji 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
5. 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
6. zadatak
Na programskom jeziku Python sastaviti programkoji pronalazi i ispisuje najdužu od učitanih reči.Reči se odvajaju razmakom. Ako ima više reči istedužine ispisati prvu. Šta u kodu treba izmeniti da bise 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
7. zadatak (1/4)
Na programskom jeziku Python sastaviti funkcijukoja proverava da li se u prosleđenoj rečenici svakainstanca prvog prosleđenog slova nalazi pre svakeinstance drugog prosleđenog slova. Prosleđenaslova se pojavljuju bar jednom u rečenici.
Unesite rečenicu: ranijih godina se predavao pascalUnesite slova: i pSvako slovo i se nalazi pre svakog slova p.
Unesite rečenicu: profesori predaju python na programiranjuUnesite slova: p oNije svako slovo p pre svakog slova o.
ETF Beograd::Programiranje 1 20/38
7. zadatak (2/4)def isEveryFirstBeforeEvertSecond(sentence, first, second):
f = 0s = len(sentence)found = Falsefor i, letter in enumerate(sentence):
if letter == first:f = i
elif letter == second and not found:s = ifound = True
return f < s
Da li može efikasnije? Da li je bitna pozicija slova urečenici za određivanje uslova?
ETF Beograd::Programiranje 1 21/38
7. zadatak (3/4)
Da li može preko metoda za rad sa stringovima?
def isEveryFirstBeforeEvertSecond(sentence, first, second):f = Falses = Falsefor letter in sentence:
if letter == first:if s:
return Falsef = True
elif letter == second:if not f:
return Falses = True
return True
ETF Beograd::Programiranje 1 22/38
7. zadatak (4/4)
def isEveryFirstBeforeEvertSecond(sentence, first, second):return sentence.rindex(first) < sentence.index(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
8. zadatak (1/2)
Na programskom jeziku Python sastaviti programkoji uneti broj prikazuje u Majanskom brojnomsistemu. 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
8. zadatak (2/2)number = int(input("Unesi broj: "))mayan = []while number:
remainder = number % 20if 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
9. zadatak (1/3)
Na programskom jeziku Python sastaviti programkoji u zadatom tekstu prebrojava mala i velikaslova, cifre i ostale znake. Obrađuje se linija polinija, sve dok se ne unese prazan red. U programuiskoristiti: a) ugrađene funkcije: ord() i chr() b) metode za rad sa stringovima: isupper(), islower(),
isalpha() i isdigit()
ETF Beograd::Programiranje 1 27/38
9. zadatak (2/3)
a):
num_ll = num_ul = num_di = num_ot = 0ll = [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: breakfor char in line:
if char in ll: num_ll += 1elif char in ul: num_ul += 1elif char in di: num_di += 1else: num_ot += 1
print(num_ll, num_ul, num_di, num_ot)
ETF Beograd::Programiranje 1 28/38
9. zadatak (3/3)
b):
num_ll = num_ul = num_di = num_ot = 0while True:
line = input()if len(line) == 0: breakfor char in line:
if char.isalpha() and char.islower(): num_ll += 1elif char.isalpha() and char.isupper(): num_ul += 1elif char.isdigit(): num_di += 1else: 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
10. zadatak
Na programskom jeziku Python sastaviti programkoji 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, aprint("{}: {}, {}".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 sekorišćenjem operatora *
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 4print(*lista) # 1 2 3 4
torka = (1, "tekst", 1, False)a, b, *c = torka # a = 1 b = 'tekst' c = [1, False]
ETF Beograd::Programiranje 1 32/38
Pregled
ETF Beograd::Programiranje 1 33/38
Pregled – Funkcije i metode
Ugrađene funkcije: sorted() reversed()
Metode za rad sa stringovima: upper() lower() strip()
Metode za rad sa listama: sort()
replace() index() rindex()
enumerate() zip()
any() all()
find() rfind() isupper()
islower() isaplha() isdigit()
ETF Beograd::Programiranje 1 34/38
ord() chr()
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 Complex Boolean String List Tuple Set Dict
Numerički tipovi
Logički tip
Kolekcije
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