Електротехничка школа „Никола Тесла“ Панчево
Предмет
Програмирање мрежних сервиса
Смер
Техничар за администрирање рачунарских мрежа
Разред
III
Наставник
Никола Ђорђевић
Лекција

Стрингови у Пајтону

Интерактивна лекција за све који нису били на часу или желе да утврде градиво: шта је стринг, позиције карактера, сечење, спајање, дужина, методе find, split, strip и четири задатка са часа. Код пишеш и покрећеш директно на овој страници.

Пајтон још није учитан Решено 0/0
Како да користиш ову страницу

Свака вежба има поље за код. Дугме Покрени (или Ctrl + Enter) извршава твој код и приказује шта програм исписује. Дугме Провери тестира твоје решење, и то не само на примеру који видиш, већ и на још једном скривеном, па решење мора да ради за било који унос. Помоћ даје наговештај, а Решење показује тачан код. Пробај прво сам.

Пајтон се учитава у прегледачу при отварању странице (потребан је интернет, први пут траје неколико секунди). Напредак се чува у овом прегледачу.

01

Шта је стринг

Стринг (енг. string) је низ карактера. Карактер може бити слово, цифра, размак или било који знак. Стринг у коду почиње и завршава се наводником ":

ime = "Nikola Tesla"

Пајтон прихвата и једноструке наводнике 'Nikola Tesla'. Важно је само да стринг почне и заврши се истим знаком. Касније ћемо видети када су нам потребни једноструки.

Сваки карактер у стрингу има своју позицију (индекс). Позиције почињу од 0, а не од 1. Размак је такође карактер и има своју позицију.

Истражи позиције

Промени текст, кликни на неки карактер или пређи на „Сечење“ и помери клизаче.

Пробај сам: покрени код испод, па промени текст у наводницима и покрени поново.

02

Коментари

Коментар је текст у коду који Пајтон прескаче. Служи људима: да објасни шта код ради или, код нас, да на почетку фајла стоји текст задатка.

Коментар у једном реду

Почиње знаком # и траје до краја реда. Може да стоји у засебном реду или иза кода.

# Ovo je komentar u jednom redu
print(ime[0])  # i ovo je komentar, iza koda

Коментар у више редова

Пише се између три пара наводника """ на почетку и """ на крају. Све између се прескаче.

"""
Zadatak 1.
Korisnik treba da unese svoje ime. Prikazati prvo slovo imena,
spojeno trece i cetvrto slovo imena i duzinu imena.
"""
Правило за наше задаткеСваки фајл почиње текстом задатка у коментару. Тако се и после месец дана зна шта програм ради.
03

Издвајање једног карактера

Карактер на одређеној позицији добијамо тако што иза имена променљиве у угластим заградама напишемо позицију:

ime = "Nikola Tesla"
print(ime[0])   # N
print(ime[2])   # k
print(ime[7])   # T
Пази на бројањеПето слово је на позицији 4, јер бројање почиње од 0. Стринг "Nikola Tesla" има 12 карактера, па је последња позиција 11. Ако тражиш ime[12], Пајтон пријављује грешку IndexError, јер та позиција не постоји.
04

Сечење стринга: више карактера одједном

Део стринга (низ карактера) издвајамо записом [почетак:крај]:

  • карактер на позицији почетак је укључен,
  • карактер на позицији крај није укључен, сечење се зауставља пре њега,
  • број издвојених карактера је крај − почетак.

Ако изоставиш почетак, креће се од почетка стринга. Ако изоставиш крај, иде се до краја стринга.

ЗаписРезултатОбјашњење
ime[2:4]"ko"позиције 2 и 3 (4 није укључена)
ime[0:6] или ime[:6]"Nikola"од почетка до позиције 5
ime[6:]" Tesla"од позиције 6 до краја; на позицији 6 је размак, па и он улази у резултат
ime[7:]"Tesla"од позиције 7 до краја, без размака

Врати се на „Истражи позиције“ у првој целини и у режиму Сечење провери сваки ред табеле.

05

Спајање стрингова и дужина стринга

Оператор +

Када се + користи између два стринга, он их спаја у један. Редослед је важан: оно што је лево долази прво. Пајтон сам не додаје размак, па га, ако нам треба, морамо додати као стринг " ".

print("Nikola" + "Tesla")        # NikolaTesla
print("Tesla" + "Nikola")        # TeslaNikola
print("Nikola" + " " + "Tesla")  # Nikola Tesla
print(ime[2] + ime[3])           # ko

Функција len()

Дужина стринга је број карактера у њему (рачунају се и размаци). Добија се функцијом len(), коју смо већ радили:

print(len("Nikola Tesla"))   # 12
print(len("Nikola"))         # 6
Веза дужине и позицијаАко стринг има len(ime) карактера, последњи је на позицији len(ime) - 1.
Подсетник: f-стрингУ решењима користимо f-стринг: слово f пре наводника, а вредности пишемо у витичастим заградама, нпр. print(f"Duzina imena je {len(ime)}").
06

Задатак 1: име

07

Методе: find() и split()

До сада смо користили функцију len(ime): име функције, па стринг у загради. Метода се пише другачије: прво стринг, па тачка, па име методе и заграде. Метода „припада“ стрингу и ради нешто са њим.

mejlстринг над којим радимо
.тачка
findиме методе
(
"@"вредност коју методи дајемо (аргумент)
)

Вредност у загради зове се аргумент: то је податак који методи кажемо шта тачно да тражи или по чему да ради. Заграде се пишу увек, чак и кад су празне, нпр. tekst.strip().

find() тражи позицију

tekst.find("x") враћа позицију првог појављивања траженог текста. Ако тражени текст не постоји, враћа -1.

mejl = "petar@etstesla.rs"
print(mejl.find("@"))   # 5
print(mejl.find("."))   # 13
print(mejl.find("x"))   # -1, nema ga

Позицију коју врати find() можемо сачувати у променљиву и користити при сечењу. Пошто крај није укључен, mejl[0:et] даје све пре знака @, а mejl[et+1:] све после њега (додајемо 1 да прескочимо сам знак @).

split() дели стринг на делове

tekst.split("x") сече стринг на сваком месту где се појављује x и враћа листу делова. Сам знак по коме се дели се избацује. Деловима приступамо по позицији, исто као карактерима, и опет се броји од 0.

mejl = "petar@etstesla.rs"
podaci = mejl.split("@")
print(podaci)      # ['petar', 'etstesla.rs']
print(podaci[0])   # petar
print(podaci[1])   # etstesla.rs

datum = "2026-09-26"
print(datum.split("-"))   # ['2026', '09', '26']
08

Задатак 2: мејл

09

strip(), lstrip(), rstrip() и наводници

Граматички исправан датум је 9. 5., а не 09. 05. Зато нам треба начин да уклонимо нуле са почетка. За то служе три методе:

МетодаШта уклања
strip()са обе стране (лево и десно)
lstrip()само са леве стране, тј. почетка (l = left)
rstrip()само са десне стране, тј. краја (r = right)

Ако заграде оставиш празне, уклањају се размаци. Ако у заграду напишеш знак, уклања се тај знак, и то све док се не наиђе на неки други знак. Карактери у средини стринга се никад не дирају.

КодРезултатЗашто
" mreza ".strip()"mreza"размаци уклоњени са обе стране
"09".lstrip('0')"9"нула са почетка уклоњена
"0009".lstrip('0')"9"уклања се свака нула док не дође друга цифра
"10".lstrip('0')"10"на почетку нема нуле, нула на крају остаје
"100".rstrip('0')"1"опрез: rstrip брише нуле са краја
Зато за датум користимо lstrip, а не stripСа "10".strip('0') добијамо "1", јер strip брише нулу и са краја. Са lstrip('0') месец 10 остаје 10, а 09 постаје 9.

Наводници унутар стринга

Стринг који почиње са " завршава се на првом следећем ". Зато овај код не ради, јер Пајтон мисли да се стринг завршио пре речи zdravo:

print("Rekao je "zdravo"")   # SyntaxError

Решење: ако је спољни стринг у двоструким наводницима, унутра користимо једноструке, и обрнуто.

print('Rekao je "zdravo"')          # Rekao je "zdravo"
print(f"Mesec: {mesec.lstrip('0')}")  # unutar f"..." pisemo '0'
Зашто '0', а не "0" унутар f-стринга?Старије верзије Пајтона (пре 3.12) уопште не дозвољавају исте наводнике унутар витичастих заграда f-стринга, а у новијим је то дозвољено, али се тешко чита. Зато унутар f"..." увек пишемо једноструке наводнике: тако код ради у свакој верзији.
10

Задатак 3: датум

Датум у формату yyyy-mm-dd увек има исту дужину: 10 карактера. Зато знамо тачно на којој позицији је који део:

година [0:4]месец [5:7]дан [8:10] или [8:]цртица

Због тога су исправна оба начина: и split("-") и сечење по позицијама. Да дужина није увек иста (нпр. 2026-9-5), радио би само split.

11

Поређење стрингова и if

Оператор == проверава да ли су две вредности једнаке. Код стрингова мора да се поклапа сваки карактер.

Најчешћа замкаinput() увек враћа стринг, чак и кад корисник укуца цифре. Исто тако, jmbg[4] је стринг "0", а не број 0. Стринг и број никад нису једнаки: "0" == 0 је False. Зато поредимо са "0", у наводницима.

Структура ЈМБГ-а

Матични број има 13 цифара. Првих седам су датум рођења: дан, месец и последње три цифре године. Упиши неки ЈМБГ и погледај како се издваја датум.

дан [0:2]месец [2:4]година [4:7]регионпол и редни бројконтролна цифра

Од године имамо само три цифре. Ако је прва од њих (позиција 4) 9, особа је рођена у 1900-им, па испред додајемо "1" (998 → 1998). Ако је 0, рођена је 2000. или касније, па додајемо "2" (005 → 2005). Зато овде мора if.

12

Задатак 4: ЈМБГ

13

Преглед: шта смо научили

ШтаЗаписПример (ime = "Nikola Tesla")Резултат
Коментар у једном реду# tekst# Zadatak 1Пајтон прескаче
Коментар у више редова""" ... """текст задатка на почетку фајлаПајтон прескаче
Један карактерs[i]ime[0]N
Сечењеs[a:b]ime[2:4]ko
Сечење до крајаs[a:]ime[7:]Tesla
Сечење од почеткаs[:b]ime[:6]Nikola
Спајањеs1 + s2ime[0] + ime[7]NT
Дужина (функција)len(s)len(ime)12
Позиција (метода)s.find(x)ime.find(" ")6 (или -1 ако нема)
Подела (метода)s.split(x)ime.split(" ")['Nikola', 'Tesla']
Уклањање са обе странеs.strip()" mreza ".strip()mreza
Уклањање са почеткаs.lstrip(x)"09".lstrip('0')9
Уклањање са крајаs.rstrip(x)"2500".rstrip('0')25
Поређењеs1 == s2ime[0] == "N"True
Пет ствари које треба запамтити 1. Позиције почињу од 0, а последња је len(s) - 1.
2. Код сечења [a:b] почетак је укључен, крај није.
3. Код + редослед је важан, а размак се не додаје сам.
4. Функција се пише len(s), а метода s.find(x).
5. input() и издвојени карактери су увек стрингови, па поредимо са "0", а не са 0.
14

Провера знања

Без покретања кода: шта ће бити резултат?