Professional Documents
Culture Documents
P1 11 Python Skupovi Rečnici Datoteke
P1 11 Python Skupovi Rečnici Datoteke
Skupovi, Rečnici,
Ulaz i izlaz
Univerzitet u Beogradu
Elektrotehnički fakultet
Sadržaj
Skupovi:
⚫ Kreiranje skupa prema zadatom pravilu
Rečnici:
⚫ Iteracije kroz rečnik
⚫ Pakovanje i raspakivanje rečnika
Ulaz i izlaz:
⚫ Datoteke
⚫ Direktorijumi
⚫ CSV format
a) {8, 3, 7}
b) {3}
c) {9, 2, 6, 1}
def isHeterogram(sentence):
letters = [char for char in sentence if char.isalpha()]
return len(set(letters)) == len(letters)
def isPangram(sentence):
alphabet = {chr(i) for i in range(ord("a"), ord("z")+1)}
letters = {l.lower() for l in sentence if char.isalpha()}
return len(letters) == len(alphabet)
for k in opstine:
print(k, opstine[k]) # Voždovac 149...
for k in opstine.keys():
print(k, opstine[k]) # Voždovac 149...
for v in opstine.values():
print(v) # 149...
for k, v in opstine.items():
print(k, v) # Voždovac 149...
v05z05d01.txt v05z05d02.txt
Prva recenica. Druga. Prva recenica. Druga.
Treca recenica u novom redu. Treca recenica u novom redu.
Cetvrta. Peta recenica. Cetvrta. Peta recenica.
Sesta recenica na kraju. Sesta recenica na kraju.
tekstualna_u_binarnu("v05z05d01.txt", "v05z05d02.bin")
binarna_u_tekstualnu("v05z05d02.bin", "v05z05d01.txt")
obrada("v05z06d01.txt", "v05z06d02.txt")
ETF Beograd::Programiranje 1 18/35
Direktorijumi
Korisne funkcije iz modula os i os.path:
⚫ Za datoteke: remove(), isfile()
⚫ Za direktorijume: chdir(), listdir(), mkdir(), rmdir()
⚫ Za datoteke i direktorijume: rename(), exists()
import os
if not os.path.exists("direktorijum"):
os.mkdir("direktorijum")
os.chdir("direktorijum")
if os.path.exists("novi.txt") and os.path.isfile("novi.txt"):
os.rename("novi.txt", "stari{}.txt".format(len(os.listdir())))
with open("novi.txt", "w") as f: f.write(input())
import os
for f in os.listdir("direktorijum"):
os.remove("direktorijum/" + f)
os.rmdir("direktorijum")
rf190028d.txt
K1: 100.00
K2: 54.7
K3: 60.90
UKUPNO: 72.8925
pj190413d.txt
K2: 74.10
UKUPNO: 25.93
def obrada(ulazna):
direktorijum = "rezultati"
if not os.path.exists(direktorijum):
os.mkdir(direktorijum)
os.chdir(direktorijum)
rezultati = {}
vrednosti = {"-1": -3.75, "0": 0, "1": 15}
with open("../" + ulazna) as ulaz:
for linija in ulaz:
linija = [p.strip() for p in linija.split(",")]
indeks, ip, kolokvijum, *pitalice, zadatak = linija
broj, godina = indeks.split("/")
ime, prezime = ip.split()
poeni = sum([vrednosti[p] for p in pitalice])
poeni = min(poeni, 45) + float(zadatak) * 0.55
ETF Beograd::Programiranje 1 22/35
7. zadatak (4/4)
i, p = ime[0].lower(), prezime[0].lower()
g, b = godina[2:], "{:0>4}".format(broj)
izlazni = p + i + g + b + "d"
if izlazni not in rezultati:
rezultati[izlazni] = [kolokvijum], [poeni]
else:
rezultati[izlazni][0].append(kolokvijum)
rezultati[izlazni][1].append(poeni)
for k, v in rezultati.items():
with open(k, "w") as izlaz:
s = 0
for kol, p in zip(v[0], v[1]):
izlaz.write("{}: {:0.2f}\n".format(kol, p))
s += p * 0.3 if kol == "K1" else p * 0.35
izlaz.write("UKUPNO: {:0.2f}\n".format(s))
obrada("v05z07.csv")
ETF Beograd::Programiranje 1 23/35
8. zadatak (1/4)
Na programskom jeziku Python sastaviti program
koji pronalazi ukupno vreme potrebno za obliazak
svih tvrđava na ruti unetoj sa standardnog ulaza:
⚫ Ulazna CSV datoteka sadrži informaciju o vremenu
potrebnom da se stigne od jedne do druge tvrđave za
svaki postojeći par tvrđava
⚫ Vreme je izraženo u minutima i isto je za oba smera
⚫ Ruta se unosi sa standardnog ulaza, po jedan naziv
tvrđave u svakom redu i završava se praznim redom
⚫ Ukupno vreme izraziti u satima i minutima
⚫ Ignorisati mala i velika slova i suvišne blanko znakove
ETF Beograd::Programiranje 1 24/35
8. zadatak (2/4)
v05z08.csv
Petrovaradinska tvrđava, Maglič, 185
Beogradska tvrđava, Petrovaradinska tvrđava, 82
Golubački grad, beogradska tvrđava, 121
Petrovaradinska tvrđava, Golubački Grad, 172
Maglič, Beogradska tvrđava, 156
Maglič, Golubački grad, 191
def ucitaj_datoteku(ulazna):
with open(ulazna, encoding="UTF-8") as ulaz:
vremena = dict()
for linija in ulaz:
prva, druga, vreme = linija.split(",")
par = sortiraj_tvrdjave(prva, druga)
vremena[par] = int(vreme)
return vremena
ETF Beograd::Programiranje 1 26/35
8. zadatak (4/4)
def konvertuj_vreme(minuti):
sati = minuti // 60
minuti %= 60
return "{:02}:{:02}".format(sati, minuti)
vremena = ucitaj_datoteku("v05z08.csv")
trenutna = prethodna = ""
i, ukupno_vreme = 1, 0
while True:
prethodna = trenutna
trenutna = input("{}. tvrđava: ".format(i)).lower()
if not trenutna: break
par = sortiraj_tvrdjave(prethodna, trenutna)
if par in vremena:
ukupno_vreme += vremena[par]
i += 1
print("Ukupno vreme: {}".format(konvertuj_vreme(ukupno_vreme)))
ETF Beograd::Programiranje 1 27/35
Pregled