Текстуалне вредности¶
Поред целих и реалних бројева, један од основних типова података у програмирању је текст. Текстуални подаци се називају ниске или стрингови. У њима поред слова могу да се нађу и сви остали знаци који се користе у тексту: интерпукција, заграде, цифре, знаци математичких операција, разни специјални знаци попут %, $, ^, & итд. Сви ови знаци који могу да се појаве у тексту називају се карактери.
Текстуалне вредности се пишу између наводника. Текст под наводницима зовемо текстуална константа или литерал. У пајтону могу равноправно да се користе једноструки '...' и двоструки "..." наводници (важно је само да су на почетку и на крају стринга наводници исте врсте). На пример:
s1 = 'Један текст'
s2 = "Други текст"
У даљем тексту реч стринг ћемо користити за текстуални тип података, као и за сваки израз чија је вредност тог типа. Најважнији примери израза типа стринг су текстуалне константе (литерали) и променљиве које садрже текст.
Исписивање текста¶
Стрингови се приказују на екрану на исти начин као и бројчани подаци. Стринг који желимо да испишемо једноставно наводимо као аргумент функције print().
Када функција print() има више аргумената, ти агрументи могу да буду различитог типа:
Када наводимо више аргумената, пишемо их раздвојене зарезима (као код сваке функције). Вредности свих наведених аргумената ће бити приказане једна за другом, и биће раздвојене по једним размаком.
Још о исписивању бројева¶
Понекад исписани резултат изгледа непрегледно:
Најчешће нам није важно да видимо све ове децимале. Прегледнији приказ реалних вредности можемо да добијемо користећи функцију format. Помоћу ове функције можемо на пример да задамо колико децимала желимо да буде приказано:
Да бисмо задали број децимала које ћемо да прикажемо, функцију format смо позвали овако: први агрумент функције је вредност коју исписујемо, а други аргумент је опис приказа. У овом опису део ’.2’ значи да желимо два децимална места, а део ’f’, скраћено од float, значи да дајемо опис за приказивање реаланог броја (тип реалних бројева се зове float). Функција враћа стринг у коме је број x записан на тражени начин.
Истакнимо да ово подешавање приказа не утиче на вредност променљиве x, која и даље има све своје децимале.
Пример смо разложили на кораке да би био јаснији, мада је могао да буде написан и у једној линији кода, на пример за испис са 4 децимале:
Када приказујемо више реалних бројева један испод другог, да би приказ био прегледнији пожељно је да децималне тачке буду поравнате. На пример, овакав приказ није нарочито прегледан:
Да бисмо добили прегледнији приказ, можемо функцију format да употребимо овако:
У опису ’8.2f’ број 8 значи да желимо да приказ броја заузме укупно 8 места. У тих 8 места се броје цифре, децимална тачка, евентуални знак броја и размаци испред броја. Делови описа ’.2’ и ’f’ имају исто значење као и раније.
Функција format има и многе друге могућности, од којих ћемо још неке упознати успут.
Операције са стринговима¶
Надовезивање стрингова¶
Стрингови се могу надовезивати један на други операцијом надовезивања стрингова, која позната и под именом конкатенација стрингова. Ова операција се означава знаком +, исто као и операција сабирања бројева, па се у програмирању она често неформално назива и сабирање стрингова.
Повремено се дешава да у стрингу имамо запис целог или реалног броја, па је важно је да разумемо када се у програмима знак + односи на сабирање бројева, а када на надовезивање стрингова. На пример, у следећем програму прво a + b је сабирање бројева, а друго је сабирање (надовезивање) стрингова. У складу са тиме се разликују и исписани резултати (испробајте).
Вероватно ће се повремено догађати да касније при извршавању неког свог проргама будете збуњени резултатом. Резултат може да буде различит од очекиваног из много разлога, а једна могућност је и да сте случајно сабирали стрингове уместо бројева.
Знак + може да стоји између два бројчана израза или између два стринга, али не и између стринга и броја. Овакве комбинације доводе до грешке типа (TypeError), било да се сабира број са стрингом, или стринг са бројем (испробајте).
Умножавање стрингова¶
Стрингови се могу и умножавати (мултиплицирати). То значи да је дозвољено помножити стринг целим бројем (било слева или сдесна), а резултат је нови стринг, који се добија понављањем датог стринга задати број пута.
У следећем примеру, црта којом подвлачимо сабирке је добијена множењем стринга ’-’ са 12.
Питања и задаци¶
-
Q-9: Упарите позиве функције *format* са резултатима. Размаци су представљени знаком '_' пошто иначе не би били видљиви.
Покушајте поново!
- '12.34'
- format(12.34, '.2f')
- '__12.34'
- format(12.34, '7.2f')
- '_12.34'
- format(12.34, '6.2f')
- '__12.3'
- format(12.34, '6.1f')
- '12.3'
- format(12.34, '.1f')
- s = 'a' + "b"
- Покушајте поново
- s = 'ab"
- Тачно
- s = 'ab'
- Покушајте поново
Q-10: Која од наредби je неисправна?
- print('тра' + 2 * '-ла')
- print('тра-' + 2 * 'ла-')
- print('тра-' + 'ла-' + 'ла')
- print('тра-' + 'ла-ла')
- print('тра-ла-' + '-ла')
Q-11: Која наредба исписује тра-ла-ла? (Означите све тачне одговоре)
-
Q-12: Упарите изразе са њиховим вредностима.
Покушајте поново!
- 'NA' * 3
- 'NANANA'
- 'N' + 3 * 'A'
- 'NAAA'
- 'N' * 3 + 'A'
- 'NNNA'
- 'N' * 3 + 3 * 'A'
- 'NNNAAA'
Шта исписује наредба print(('N' + 'A') * 2)?
Задатак - Дељење зараде
Три пријатеља су се договорила да зараду од заједничког посла поделе тако да првом припадне 2/7 зараде, другом 1/3, а трећем преостала свота. Укупна зарада је била 40000. Довршите програм, који ће на две децимале приказати зараду сваког од тројице пријатеља.