Tekstinė reikšmė (strings)

Iš wiki.angis.net.
Jump to navigation Jump to search


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  '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  '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