Iki šiol tekstą naudojome labai paprastai - tiesiog atspausdindavome. Šioje pamokoje išmoksime jį analizuoti ir pertvarkyti.
Kas yra tekstas?
Angliškai tekstiniai duomenys vadinami "string" - eilutėmis, todėl, kad kompiutriuose tekstas yra raidžių/simbolių eilutė. Pvz, "Hello, World!" yra eilutė iš 13 simbolių. Jo duomenų tipas žymimas str
.
Visa kompiuteryje išsaugota informacija yra nuliukai ir vienetukai (dvejetainėje sistemoje galima užkoduot bet kokį skaičių). O kaip saugoma tekstinė informacija? Yra specialios simbolių lentelės - anksčiau ASCII, dabar Unicode ar pan. - kuriose iš eilės išvardinti visi galimi simboliai. Pvz, "H" numeris jose yra 40. Tad užtenka saugoti skaičius - simbolių numerius, o atvaizdavimo metu paimti atitinkamus simbolius (vaizdelius).
PS: dėl to, kartais, supainiojus koduotę arba šriftą, vietoj lietuviškų raidžių matosi "kringeliai".
Teksto tvarkymas, imant po simbolį: Tekstas[..]
Tekstas yra simbolių sąrašas. Jame simboliai sunumeruoti iš eilės. Visos "Hello, World!" teksto reikšmės būtų sunumeruotos taip:
Numeris : 0 1 2 3 4 5 6 7 8 9 10 11 12 Reikšmės.: H e l l o , W o r l d !Kaip paimti teksto simbolį?
Tekstas[ nr ]grąžina simbolį iš eilutės
Tekstas
, esantį nr
vietoje. Daug kam neįprasta, bet programuotojams patogiau numeruoti nuo nulio, tad pradinis simbolis bus Tekstas[0]
!
Kitose programavimo kalbose būna specialus simbolio duomenų tipas. Pitone, tai tiesiog vieno simbolio ilgio tekstas, taigi jų tipas yra str . |
Teksto ilgis: len
Norėdami sužinoti teksto ilgį, naudokite len
funkciją. Pavyzdžiui, len("Hello, World!")
grąžina 13.
T
raidę?len(T)
grąžina visos tekstinės eilutės ilgį, bet kadangi tekstinė eilutė numeruojama nu 0, paskutinės raidės numeris yra vienu mažesnis negu eilutės ilgis: len(T)-1
.Štai len
ir numeracijos
naudojimo pavyzdys.
Teksto atkarpos: S[:]
Pagal simbolių numerius galima paimti teksto dalį/atkarpą (angl. substring/slice). Pavyzdžiui, "eat" ir "ted" yra "repeated" dalys. Atkarpos nurodymo pvz.:
Tekstas[ pradžiosNr : pabaigosNr ]paims tekstą nuo pradžiosNr (imtinai) iki pabaigosNr (neimtinai - realiai paima iki pabaigosNr-1). Pabandykite atspėti rezultatą prieš paleisdami kodą.
Turbūt keista, kad pabaigosNr naudojamas neimtinai. Dėl šios priežasties dažnai pasitaiko klaidų - kaip ir dėl numeravimu nuo nulio. Tačiau, tai yra patogu sudėtingesniuose skaičiavimuose. Pavyzdžiui, teksto atkarpoje T[i:j] visada yra j-i simbolių. Arba jei reikia tekstą padalint į 2 dalis ties k-tąja raide, galima rašyt T[0:k] , T[k: len(T)-1] -- pirmoje dalyje k bus neimtinai, o antroje imtinai. |
Teksto sudėtis: +
Žinome, kad 1+2=3. Tekstui sudėties ženklas veikia kitaip - tiesiog sujungia (angl. "concatenate") 2 tekstus į vieną:
Jei norėsite prie teksto prijungti skaičių, pirmiau reikės jį konvertuoti į tekstą, naudojant str. Kitaip gausite vieną iš dviejų klaidų, priklausomai nuo reikšmių eiliškumo.
Štai teisingas pavyzdys: str() funkcija paverčia skaičių į tekstą.
|
Ketvirtoje pamokoje minėjome, kad įmanoma dauginti tekstines eilutes iš skaičiaus: S * n
reiškia S + S + ... + S
.
Simbolių kodai: ord
, chr
Kaip minėjome pamokos pradžioje, mūsų kompiuteriai kiekvieną raidę koduoja skaičiumi. Koks kiekvieno simbolio numeris? Bendrai, viskas priklauso nuo to, kokią koduotę naudoja Jūsų kompiuteris. Tačiau beveik visi šiandieniniai kompiuteriiai pagrinidniams rašmenims naudoja skaičius tarp 32 ir 255. Štai, susipažinkime su simboliais, kurių vertės yra tarp 32 ir 127:
ord: 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 chr: ! " # $ % & ' ( ) * + , - . / ord: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 chr: 0 1 2 3 4 5 6 7 8 9 : ; < = > ? ord: 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 chr: @ A B C D E F G H I J K L M N O ord: 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 chr: P Q R S T U V W X Y Z [ \ ] ^ _ ord: 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 chr: ` a b c d e f g h i j k l m n o ord: 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 chr: p q r s t u v w x y z { | } ~Vėliau, aštuntoje pamokoje, rašysime programą, kuri atkartos aukščiau esančią lentelę.
Atmintinai išmokti šios lentelės tikrai nereikia. Tačiau verta prisiminti keletą detalių.
- mažosios raidės a, b, c, ..., z turi iš eilės didėjančius kodus
- didžiosios raidės A, B, C, ..., Z irgi turi iš eilės didėjančius kodus
- ir skaičiai 0, 1, 2, ..., 9 turi iš eilės didėjančius kodus
Simbolis 32 yra tarpas, o 127 yra vienas iš specialių simbolių. Svarbūs tekstui spec. simboliai yra 9 - tab (tabuliacija) bei 10 ir 13 - peršokimas į naują eilutę (angl "newline").
Pitone galime sužinoti simbolio numerį su ord
funkcija (nuo angl. "order" - "eilės tvarka"). Ir atvirkšičai - chr
funkcija pagal skaičių grąžina atitinkamą simbolį (angl "character").
Yra sistemų, kuriose teksto simboliai yra tik tarp 32 ir 127; kitose sistemose yra daug daugiau spausdinamų simbolių, iki 255 ar net 65535; Unicode sistemoje yra šimtai tūkstančių raidžių. Daugiau apie tai galite pasiskaityti (angliškai) čia bei čia. |
Pamoką baigsime dviem uždaviniais.
Paieška ir pakeitimas
Dažnai norime patikrinti, ar tekste yra kažkoks žodis/fragmentas
Yra specialios funkcijos, tiesiogiai susietos su tekstu - jos vadinamos "metodais", pvz "Labas.upper()" duos reikšmę "LABAS".
Teksto formatavimas
Dažnai pranešimuose naudotojui tekstas turi būti pateiktas su įterptom kintamųjų reikšmėm. Tam galima naudot teksto sudėtį, bet patogiau naudoti formatavimo galimybes - nurodant, kur turi būt įterpiama ir išvardinant reikšmes vėliau.