Увод у процесирање низова података у Пајтону¶
У овој лекцији ћемо:
поновити како се записују низови података,
поновити како се дефинишу функције,
написаћемо своју функцију која рачуна најмањи број у датом низу бројева,
поновити неколико функција које су уграђене у Пајтон, и
поновити како се листа може учитати од корисника (са стандардног улаза).
Записивање низова података¶
Да се подсетимо, низови података се у Пајтону записују унутар угластих заграда, у облику листе. На пример, оцене неког ученика из једног предмета могу да се запишу као низ овако:
Dejanove_ocene = [2, 4, 5, 3, 5]
Ово је пример нумеричког низа података, где су сви подаци бројеви. Низ података, наравно, не мора бити нумерички. На пример:
predmeti = ["matematika", "srpski", "likovno", "istorija", "fizičko"]
или овако:
Ocene = ["Dejan", 2, 4, 5, 5, 3]
Раније смо видели да подаци у низу могу бити и други низови података:
Ocene_VIII3 = [
["Dejan", 2, 4, 5, 5, 3],
["Milica", 4, 5, 5, 4, 5],
["Milan", 3, 4, 5, 5, 5]
]
О низу података можемо да размишљамо као о улици у којој свака кућица има свој кућни број. Тај број називамо индексом. Специфичност Пајтона је у томе да кућни бројеви, тј. индекси, увек почињу од 0, рецимо овако:
Број елемената низа се добија позивом уграђене функције len
(од енглеског length што значи „дужина“):
Ако желимо да приступимо појединачној кућици, довољно је да наведемо њену „адресу“ која се, као и поштанска адреса, састоји од имена улице иза кога се наводи кућни број, рецимо овако:
Вредности бројева у кућицама се могу мењати веома једноставно. Рецимо, ако је Дејан поправио оцену која је уписана у прву кућицу (чији индекс је 0), то можемо регистровати овако:
Стање у улици Dejanove_ocene сада изгледа овако:
Ако узмемо да низ predmeti садржи имена предмета из којих је Дејан оцењен онда извештај о Дејановим оценама можемо
исписати на следећи начин:
Изврши исти програм и у Пајтон окружењу!
Покрени овај програм на свом рачунару тако што ћеш у пакету фајлова за вежбу, покренути IDLE и из потфолдеру P01 извршити програм Dejanove_ocene.py.
Стандардне функције¶
Како би се писање програма поједноставило, за велики број важних задатака који се веома
често користе у Пајтону већ постоје функције које их обављају. На пример, функција
len рачуна дужину низа, као што смо већ видели.
Одређивање најмањег и највећег елемента низа бројева спадају међу важне задатке,
и зато Пајтон има уграђене функције min и max које могу да одреде најмањи,
односно највећи елемент неколико бројева који су унапред наведени, или целог низа бројева:
Пример 1.¶
Променљива Zikine_ocene садржи Жикине оцене из информатике. Она је сакривена негде на овој страни и ти је не видиш.
У следећем малом програму поправи програмски код тако да добијеш највећу и најмању Жикину оцену из информатике,
као и колико оцена је Жика добио из информатике.
У три наредбе испод уместо 0 упиши одговарајуће ИЗРАЗЕ који ће
на основу низа оцена у променљивој Zikine_ocene (који је сакривен од тебе!)
ИЗРАЧУНАТИ најмању и највећу Жикину оцену из информатике, као и број оцена које
је Жика добио из информатике
Пример 2.¶
Функција sum рачуна збир елемената низа, рецимо овако:
Средња оцена се рачуна као
У следећем малом програму поправи означени ред тако да добијеш израз који рачуна средњу вредност
Жикиних оцена из информатике. Као и раније, Жикине оцене из информатике су смештене у променљиву
Zikine_ocene, која је сакривена од тебе, али је програм види.
У наредби испод уместо 0 упиши ИЗРАЗ који ће на основу низа оцена
у променљивој Zikine_ocene (који је сакривен од тебе!)
ИЗРАЧУНАТИ Жикину средњу оцену из информатике. Немој заокруживати ову вредност!
Дефинисање функција и минимум низа¶
Када неки компликован процес треба поновити више пута, а не постоји већ дефинисана функција која то може да уради за нас, постоји могућност да дефинишемо своју функцију. Функција је мала целина која мора бити именована како бисмо касније могли да је брзо и лако позовемо кад год нам затреба. На пример, ево функције која исписује извештај о оценама неког ученика:
def izvestaj_o_ocenama(ime_ucenika, spisak_predmeta, ocene):
print("Učenik:", ime_ucenika)
n = len(spisak_predmeta)
for i in range(n):
print("-", spisak_predmeta[i], ocene[i])
Извештај о Дејановим оценама сада лако можемо добити позивом ове функције:
Изврши исти програм и у Пајтон окружењу!
Покрени овај програм на свом рачунару тако што ћеш у пакету фајлова за вежбу, покренути IDLE и из потфолдеру P06 извршити програм Ocene_izvestaj.py.
Функције се најчешће користе за аутоматизацију релативно компликованих рачунских процеса.
Пример 3.¶
Написати функцију min_niza(A) која одређује најмањи елемент низа A
и враћа га као резултат свог рада, али без коришћења уграђене функције min.
Решење. Погледајмо, прво, како бисмо овај проблем решили када тражимо мањи од два броја, А0 и А1:
def manji_od_dva(A0, A1):
if A0 < A1: return A0
else: return A1
Дакле, ако је А0 мањи, то је резултат рада. У супротном је А1 резултат рада.
Ова идеја ради у случају два броја, али није погодна за уопштавања.
Зато ћемо написати нову верзију функције manji_od_dva која на први поглед делује чудно,
али ће ускоро постати јасно зашто је погодна.
def manji_od_dva_ponovo(A0, A1):
manji = A0
if A1 < manji: manji = A1
return manji
Идеја се састоји у томе да гледамо елементе један по један, као да нам долазе на траци. Када стигне први елемент, то је најмањи елемент који смо до сада уочили. Када стигне други елемент, проверимо како се он односи према до сада најмањем уоченом елементу и ако је мањи од најмањег до сада, он постаје нови најмањи елемент.
Ево како се идеја коју смо управо описали проширује на три елемента:
def najmanji_od_tri(A0, A1, A2):
najmanji = A0
if A1 < najmanji: najmanji = A1
if A2 < najmanji: najmanji = A2
return najmanji
и на ситуацију са пет елемената:
def najmanji_od_pet(A0, A1, A2, A3, A4):
najmanji = A0
if A1 < najmanji: najmanji = A1
if A2 < najmanji: najmanji = A2
if A3 < najmanji: najmanji = A3
if A4 < najmanji: najmanji = A4
return najmanji
Видимо да се корак који садржи if понавља за сваки елемент посебно.
Тако се ова идеја лако уопштава на произвољне низове:
def min_niza(A):
najmanji = A[0]
for i in range(len(A)):
if A[i] < najmanji: najmanji = A[i]
return najmanji
Да проверимо како ова функција ради:
Изврши исти програм и у Пајтон окружењу!
Покрени овај програм на свом рачунару тако што ћеш у пакету фајлова за вежбу, покренути IDLE и из потфолдеру P01 извршити програм Min_niza.py.
Учитавање низова¶
Постоје ситуације када је потребно од корисника учитати низ података и обрадити га. У следећем примеру ћемо се подсетити како се низови бројева учитавају од корисника, односно уносе помоћу тастатуре.
Пример.¶
Написати програм који од корисника учитава оцене из неколико предмета, а онда исписује из којих предмета има најлошију оцену, а из којих има најбољу оцену.
У овом програму имамо два низа: низ у коме памтимо имена предмета и низ у коме памтимо оцене. Оба низа су на почетку празна, а током рада for циклуса се на крај сваког од њих дода по један податак: име новог предмета и оцена из тог предмета. Да се подсетимо, наредба
L.append(x)
додаје податак x на крај листе L.
Након тога позивом стандардних функција min и max одредимо најлошију и најбољу оцену коју је ученик добио, па у последњем делу програма
(у „трећој фази“) испишемо имена предмета из којих је ученик најбоље оцењен и имена предмета из којих је ученик најлошије оцењен.
Да би видео како програм ради, покрени IDLE окружење из фолдера P01, учитај програм Naj_predmeti.py и изврши га.
Ево и кратке видео-демонстрације:
Овде не треба ништа да радиш! Слободно пређи на следећу лекцију!