Tekstinė reikšmė (strings)
Programavime tekstinę reikšmę sudaro įvairių simbolių sekos, kurios angliškai vadinamos strings
. Jos gali būti bet kokio ilgio ir sudarytos iš bet kokių simbolių. Tekstinę reikšmę Python programavimo kalboje lengva atskirti pagal kabutes esančias iš šonų - 'Labas'
ar "Labas"
. O atspausdinti tekstinę reikšmę galima pasinaudotojus print()
arba angyje rašyk()
funkcija:
pasisveikinimas = 'Labas'
rašyk(pasisveikinimas)
Tekstinės reikšmės priskyrimas kintamąjam
Tekstinę reikšmę priskirti kintamąjam paparasta. Reikia tik sugalvoti kintamojo pavadinimą, parašyti lygybės ženklą ir norimą reikšmę įrašyti į viengubas arba dvigubas kabutes, kartais, bet labai retai - trigubas:
vardas = 'Rokas'
amžius = "13"
megstamiausias_simbolis = '#'
#trigubos kabutės leidžia tekstinę reikšmę perkelti į kelias eilutes
eilerastis = """Kaip bangos ant marių, kaip mintys žmogaus,
Taip mainos pasaulio darbai!
Kur Sardės? Atėnai? Ar Rymo garsaus
Kur vyrai ar jų veikalai?"""
Pabėgimo simboliai (Escape characters)
O ką daryti jeigu tekstine reikšme noriu parašyti citatą, kaip Jis pasakė: "Angis!"
? Panaudojus viengubas arba dvigubas kabutes gausime sintaksės klaidą SyntaxError
, nes programa nuskaitys pirmas kabutes (tesktinės reikšmės pradžia) ir tada kitas, kurios yra ne tekstinės reikšmės pabaiga, bet citatos pradžia.
rašyk("Jis pasakė: "What's up!"")
Vienas iš galimų būdų yra naudoti trigubas kabutes arba pabėgimo simbolius (escape characters)\
. Be to labai svarbu atkreipti dėmesį, kokiomis kabutėmis pradedame rašyti tekstinę reikšmę ir kokios kabutės panaudotos cituojant, kad žinotume, prieš kurias kabutes naudoti pabėgimo simbolį.
# nuadojamos trigubos kabutės
rašyk('''Jis pasakė: "What's up!"''')
# citatoje pabėgimo simbolis naudojamas prieš veingubas kabutes
rašyk('Jis pasakė: "What\'s up!"')
# citatoje pabėgimo simbolis naudojamas prieš dvigubas kabutes
rašyk("Jis pasakė: \"What's up!\"")
Tekstinė reikšmė - masyvas
Kiekviena tekstinė reikšmė Python programavimo kalboje yra baitų masyvas, kuris atvaizduoja simbolius. Todėl, net vieno simbolio tekstinę reikšmę galėtume pavadinti masyvu, kurio ilgis vienas.
Tekstinės reikšmės elemento gavimas
Kadangi kiekviena tekstinė reikšmė yra masyvas, o masyvų elementai yra skaičiuojami ne taip kaip įprasta realiame pasaulyje nuo 1 ir aukščiau, bet nuo 0. Tad jeigu norime gauti pirmą tekstinės reikšmės elementą arba paprasčiau tariant pirmąją žodžio raidę, mes turime parašyti kintamajį ir šalia esančiuose laužtiniuose skliaustuose nurodyti 0 (nes skaičiavimą pradedame nuo 0!!!).
miestas = 'Vilnius'
rašyk(miestas[0]) # V
rašyk(miestas[1]) # i
rašyk(miestas[2]) # l
rašyk(miestas[3]) # n
rašyk(miestas[4]) # i
rašyk(miestas[5]) # u
rašyk(miestas[6]) # s
Arba galima įsivaizduoti ir taip:
Raidė: | V | i | l | n | i | u | s |
---|---|---|---|---|---|---|---|
Pozicija: | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
Tekstinės reikšmės ilgis - len()
Tekstinės reikšmės ilgiui gauti naudojame Python funkciją len()
:
miestas = "Vilnius"
print(len(miestas)) # 7
fraze = "Labas, Pasauli!"
print(len(fraze)) # 15
Elemento tikrinimas, ieškojimas, radimas tekstinėje reikšmėje
Jeigu norime aptikti ar elementas ar frazė yra tekstinėje reikšmėje, tai galime pasinaudoti raktažodžiu in
:
knyga = 'Haris Poteris ir Ugnies taurė"
print("taurė" in knyga) # True
print("Taurė" in knyga) # False
# kaip matai gauta reikšmė yra bollean (teigiama arba neigiama). Kodėl pirmuoju atveju gauname, kad yra, o antruoju, kad nėra? Atsakymas paprastas - tikrinant reikšmę svarbu atkreipti dėmesį į dižiąsias ir mažąsias raides
Kaip patikrinti ar elemento tekstinėje reikšmėje nėra
Jeigu norime patikrinti ar nėra elemento/frazės tekstinėje reikšmėje, tai galime pasinaudoti raktažodžiu not in
:
knyga = 'Haris Poteris ir Ugnies taurė"
print("taurė" not in knyga) # False
print("Taurė" not in knyga) # True
Ciklo kartok (for loop) panaudojimas tekstinėje reikšmėje
Kadangi tekstinė reikšmė yra masyvas, tai kiekvieną elementą galime atspausdinti pasinaudodami ciklu kartok (for loop)
:
for x in 'Vilnius':
print(x)
#Angyje
kiekvienam x iš 'Vilnius':
rašyk(x)
# Prasisukus ciklui yra atspausdinamas kiekvienas tekstinės reikšmės simbolis. Rezultatas:
# V
# i
# l
# n
# i
# u
# s
Pavyzdys kaip rasti kiek tam tikrų elementų tekstinėje reikšmėje pasinaudojant ciklu kartok (for loop)
. Šiuo atveju kiek yra a
raidžių frazėje:
count = 0
for letter in 'Labas, Pasauli!':
if(letter == 'a'):
count += 1
print(count,'letters found') # 2 letters found
# Angyje
atskaitos_taškas = 0 # rastų raidžių atskaitos taškas
kiekvienam simboliui iš 'Labas, Pasauli!':
jeigu(simboliui == 'a'):
atskaitos_taškas += 1 # jeigu raidė rasta, tai prie atskaitos taško pridėsime +1
rašyk(atskaitos_taškas,'raidės rastos') # 2 raidės rastos
Tekstinės reikšmės skaidymas(?)(Slicing strings)
Apie teksto skaidymą jau užsiminėme ir pavyzdyje, kuriame rodėme kaip gauti elementą iš tekstinės reikšmės. Norint rasti simbolio vietą kintamajame rašome print(kintamasis[pozicija])
. Štai šiame pavydzyje pateikta tekstinė reikšmė Petras
, kurios raidžių padėtį skaičiuojame taip:
Raidė: | P | e | t | r | a | s |
---|---|---|---|---|---|---|
Pozicija: | 0 | 1 | 2 | 3 | 4 | 5 |
Pozicija skaičiuojant nuo galo: | -6 | -5 | -4 | -3 | -2 | -1 |
Atsimink, kad skaidant tekstinę reikšmę, galime nurodyti ir dvi pocizijas: pradžios ir pabaigos.Užrašymas turėtų atrodyti taip: kintamasis[pradžia:pabaiga]
. Atsimink, kad pradžios pozicija nurodoma imtinai, o pabaigos pozicija, yra ta vieta, prieš kurią programa sustos ir to simbolio nebeskaičiuos. Įvairius tekstinės reikšmės skaidymo būdus gali pamatyti čia:
Atsimink! | Kintamasis | Pavyzdys | Rezultatas |
---|---|---|---|
Pirmo simbolio pozicija prasideda ne nuo 1, bet nuo 0! | vardas = 'Petras' | print(vardas[0])
|
P |
Paskutinio simbolio pozicija yra -1 | vardas = 'Petras' | print(vardas[-1])
|
s |
Galima pradėti nuo pasirinktos pozicijos imtinai ir sustoti prieš pasirinktą poziciją | vardas = 'Petras' | print(vardas[1:4])
|
etr |
Galima pradėti nuo pasirinktos pozicijos iki kažkelintos nuo galo | vardas = 'Petras' | print(vardas[2:-2])
|
tr |
Galima pradėti skaičiuoti pozicijas nuo galo | vardas = 'Petras' | print(vardas[-4:-1])
|
tra |
Galima pradėti nuo pasirinktos pozicijos iki galo | vardas = 'Petras' | print(vardas[2:])
|
tras |
Galima pradėti nuo pradžios iki pasirinktos pozicijos | vardas = 'Petras' | print(vardas[:5])
|
Petra |
Taip pat galima spausdinti ir kas antrą, kas trečia, kas ketvirtą ir t.t. simbolį. Tą galime padaryti prie pradžios ir pabaigos parametrų pridėję žingsnio parametrą: kintamasis[pradžia:pabaiga:žingsnis]
ilgiausias_lietuviskas_zodis = 'Nebeprisivaizdotinklaraštininkaujantiesiems'
print(ilgiausias_lietuviskas_zodis[4:20:2]) #piiazoik
#jeigu pradedame nuo pat pradžių iki 20-tos raidės ir spausdiname kas trečią raidę
ilgiausias_lietuviskas_zodis = 'Nebeprisivaizdotinklaraštininkaujantiesiems'
print(ilgiausias_lietuviskas_zodis[:20:3]) #Neivztk
#pradedame nuo pradžios iki pabaigos ir spausdinam, kas antrą raidę
ilgiausias_lietuviskas_zodis = 'Nebeprisivaizdotinklaraštininkaujantiesiems'
print(ilgiausias_lietuviskas_zodis[::2]) #Nbpiiazoikaatnnajnises
Tekstinių reikšmių sujungimas (Concatenation)
Sujungti dvi tekstine reikšmes galima paprastai - pasinaudojant +
simboliu:
vardas = 'Petras'
pavarde = 'Petraitis'
vardas_pavarde = vardas + pavarde
print(vardas_pavarde) #PetrasPetraitis
#Kad viskas atrodytų tvarkingai reikėtų pridėti ir tarpą
pilnas_vardas = vardas + " " + pavarde
print(pilnas_vardas) #Petras Petraitis
Tekstinės reikšmės formatavimas
Šiame poskyryje sužinosi kaip naudotis Python f-string
, kuris leidžia, į tekstą į kelti bet kurią kintamojo reikšmę. Trumpai parodysime, kokios buvo ankstesnės formatavimo opcijos, nes vis dar dažnai galima jas sutikti, bet nuo Python 3.6 versijos rekomenduojama naudoti f-strings
teksto formatavimo būdą.
Seni tekstininės reikšmės formatavimo būdai
1 senas būdas: %-formating
Nuo pat Python sukūrimo buvęs formatavimo būdas, kuris, beje, nėra rekomenduojamas pagal Python'o dokumentaciją
Kaip naudoti %- formatavimą?
vardas = 'Petras'
print("Mano vardas %s." %vardas) # Mano vardas Petras
#jeigu norime įterpti daugiau nei vieną kintamąjį, tai reikia sukurti kintamųjų [[Tuples (Tuple)|tuple]]
vardas = 'Petras'
amzius = 30
print("Mano vardas %s. Man yra %s metų." %(vardas, amzius) # Mano vardas Petras. Man yra 30 metų.
Tačiau %-formating nėra naudojamas, nes turint daugiau parametrų ir ilgesnes tekstines reikšmes kodas tampa sunkiai skaitomas ir pasitaiko daug nenumatytš klaidų.
2 senas būdas. str.format()
Vis dar pakankamai dažnai sutinkamas tekstinių reikšmių formatavimo būdas, kuris buvo sukurtas siekiant supaprastinti %-formating
. Naudojantis šiuo būdu tekstinėje reikšmėje formatuojamas vietas žymime {}
ir tekstinės reikšmės gale prirašome .format(kintamasis)
:
vardas = 'Petras'
amzius = 30
print("Mano vardas {}. Man yra {} metų.).format(vardas, amzius) # Mano vardas Petras. Man yra 30 metų.
#Taip pat kintamuosius galima nurodyti pagal jų indeksą:
print("Man yra {1} metų. Mano vardas {0}.".format(vardas, amzius) # Man yra 30 metų. Mano vardas Petras.
Taip pat galima nurodyti kintamųjų pavadinimus ir perduoti objektus ir tada nurodyti parametrus ir metodus sklaiustuose. Pavyzdys, kuriame naudojamas žodynas:
vartotojas = {'vardas': 'Petras', 'amzius': 30}
print(Mano vardas {vardas}. Man yra {amzius} metų.".format(vardas=vartotojas['vardas'], amzius=vartotojas['amzius']
# Mano vardas Petras. Man yra 30 metų.
Nors šis būdas ir geresnis už pirmtaką, bet jeigu naudojama ilgesnė tekstinė reikšmė ir daug įvairių parametrų, tai jis tampa griozdiškas ir sunkiai skaitomas.
Naujas teksto formatavimo būdas: f-strings
Atnaujinimas atsiradęs 2015 metais su 3.6 Python versija. Turintis supaprastintą sintaksę ir lengvai naudojamas - priš tekstinę reikšmę reikia parašyti f
ir laužtiniuose skliausteliuose nurodyti kintamųjų kuriuos įterpiame pavadinimą {kintamasis}
:
vardas = 'Petras'
amzius = '30'
print(f"Mano vardas {vardas}. Man yra {amzius} metų.") # Mano vardas Petras. Man yra 30 metų.
# Galima naudoti ir F didžiąją
print(F"Mano vardas {vardas}. Man yra {amzius} metų.") # Mano vardas Petras. Man yra 30 metų.
Kelių eilučių f-strings
Kai naudojamas kelių eilučių f-strings
būdas, reikia atkreipti dėmesį, kad f
reikia naudoti prieš kiekvieną eilutę:
vardas = 'Petras'
amzius = 30
hobis = 'Python programavimas'
pranesimas =(
f"Mano vardas {vardas}. "
f"Man yra {amzius} metų. "
f"Mano hobis {hobis}."
)
print(pranesimas) # Mano vardas Petras. Man yra 30 metų. Mano hobis Python programavimas.
Žodynai ir f-strings
Dirbant su žodynais svarbu atsiminti, kad įterpiant žodyno elementus būtų naudojamos kitos kabutės nei pradedant f-string
:
vartotojas = {'vardas': 'Petras', 'amzius': 30}
print(f"Mano vardas {vartotojas['vardas']}. Man yra {vartotojas['amzius']} metų.")
Tekstinės reikšmės modifikavimas
Dabar parodysime kelis dažnai naudojamus jau įdiegtus Python programavimo kalbos metodus. Vienas iš jų, jau anksčiau aprašytas format()
, todėl jau turėtų būt aišku, kad metodas užrašomas taip: kintamasis.metodas()
. O štai ir keli populiariausi metodai:
# Viso teksto pavertimas didžiosiomis raidėmis
vartotojas = "Petras Petraitis"
print(vartotojas.upper()) # PETRAS PETRAITIS
# Viso teksto pavertinmas mažosiomis raidėmis
vartotojas = "Petras Petraitis"
print(vartotojas.lower())# petras petraitis
# Pirmą tekstinės reikšmės raidę paverčia didžiąja
vartotojas = "petras petraitis"
print(vartotojas.capitalize()) # Petras petraitis
# Visas pirmas žodžių raides padaro didžiosiomis
vartotojas = "petras petraitis"
print(vartotojas.title()) # Petras Petraitis
# Metodas, kuris grąžina nurodytos reikšmės vietą tekstinėje reikšmėje
vartotojas = "Petras Petraitis"
print(vartotojas.index('t')) # 2, nes t pirma sutikta raidė yra antroje pozijoje - skaičiuojam nuo 0!
# Metodas pašalinantis visus nereikalingus tarpus pradžioje ar pabaigoje
vartotojas = " Petras Petraitis "
print(vartotojas.strip()) # Petras Petraitis
# Metodas pakeičiantis tekstinę reikšmę kita tekstine reikšme
vartotojas = "Petras Petraitis"
print(vartotojas.replace('P', 'K')) # Ketras Ketraitis
# Metodas suskaičiuojantis kiek kartų tekstinėj reikšmėje pasirodo nurodytas parametras
vartotojas = "Petras Petraitis"
print(vartotojas.count('P')) # 2, nes du kartus rasta P didžioji raidė
Tekstinių reikšmių metodai
Metodas | Ką daro? |
---|---|
capitalize() | Pirmą raidę paverčia didžiąja |
casefold() | Paverčia visas raides mažosiomis |
center() | Grąžina išcentruotą tekstinę reikšmę |
count() | Grąžina kiek kartų nurodyta reikšmė aptikta tekstinėje reikšmėje |
encode() | Koduoja nurodytą tekstinę reikšmę pagal nurodytą kodavimą |
endswitch() | Grąžina True, jeigu tekstinė reikšmė baigiasi nurodyta reikšme |
expandtabs() | Nustato tarpo dydį iki nurodyto tarpo skaičiaus |
find() | Ieško nurodytos reikšmės duotoje tekstinėje reikšmėje ir grąžina poziciją, kur rasta |
format() | Formatuoja nurodytas reikšmes tekstinėje reikšmėje |
format_map() | Formatuoja nurodytas reikšmes tekstinėje reikšmėje |
index() | Ieško nurodytos reikšmės duotoje tekstinėje reikšmėje ir grąžina poziciją, kur rasta |
isalnum() | Grąžina True, jeigu tekstinė reikšmė yra sudaryta ir iš skaičiaus ir iš raidžių |
isalpha() | Grąžina True, jeigu visa tekstinė reikšmė yra sudaryta iš abėcėlės raidžių |
isascii() | Grąžina True, jeigu visa tekstinė reikšmė yra sudaryta iš ascii simbolių |
isdecimal() | Grąžina True, jeigu visa tekstinė reikšmė yra sudaryta iš dešimtainių simbolių |
isdigit() | Grąžina True, jeigu visa tekstinė reikšmė yra sudaryta iš skaičių |
isdentifier() | Grąžina True, jeigu tekstinė reikšmę yra identifikatorius |
islower() | Grąžina True, jeigu visa tekstinė reikšmė yra iš mažųjų raidžių |
isnumeric() | Grąžina True, jeigu visa tekstinė reikšmė yra skaitinė |
isprintable() | Grąžina True, jeigu visa tekstinė reikšmė yra užrašoma |
isspace() | Grąžina True, jeigu visa tekstinė reikšmė yra iš tarpų |
istitle() | Grąžina True, jeigu visi tekstinės reikšmės žodžiai prasideda iš didžiųjų |
isupper() | Grąžina True, jeigu visi tekstinės reikšmės žodžiai parašyti didžiosiomis raidėmis |
join() | Sujungia visas atskiras tekstines reikšmes į vieną tekstinę reikšmę |
ljust() | Returns a left justified version of the string |
lower() | Paverčia visas raides mažosiomis |
lstrip() | Returns a left trim version of the string |
maketrans() | Grąžina vertimų lentelę, kuri bus naudojama vertimuose |
partition() | Grąžina tuple, kuriame tekstinė reikšmė padalinta į tris dalis |
replace() | Grąžina tekstinę reikšmę, kurioje nurodyta vertė pakeičiama nurodyta verte |
rfind() | Ieško tekstinės reikšmės nurodytos vertės ir grąžina paskutinę vietą, kurioje ji buvo rasta |
rindex() | Ieško tekstinės reikšmės nurodytos vertės ir grąžina paskutinę vietą, kurioje ji buvo rasta |
rjust() | Returns a right justified version of the string |
rpartition() | Grąžina tuple, kuriame tekstinė reikšmė padalinta į tris dalis |
rsplit() | Padalija tekstinę reikšmę prie nurodyto skyriklio ir grąžina sąrašą(list) |
rstrip() | Returns a right trim version of the string |
split() | Padalija tekstinę reikšmę prie nurodyto skyriklio ir grąžina nurodytą reikšmę |
splitnes() | Skaldo tekstinę reikšmę ties /n ir grąžina sąrašą (list) |
startswitch() | Grąžina True, jeigu tekstinė reikšmė prasideda nurodyta reikšme |
strip() | Grąžina apkarpytą eilutės versiją |
swapcase() | Mažosios raidės virsta didžiosiomis, o didžiosios mažosiomis |
title() | Kiekvieno žodžio raidę padaro didžiąja |
translate() | Grąžina išverstą tekstinę reikšmė |
upper() | Visą tekstinę reikšmę paverčia didžiosiomis raidėmis |
zfill() | Užpildo tekstinę reikšmė nuliais pradžioje, kol pasiekiamas norimas tekstinės reikšmės ilgis |
Tekstinių reikšmių užduotys
Greitu metu bus papildyta