Escape Sequences - specijalni znakovi u stringu - ★★ Fog Developer ★★

Novo

6/recent/ticker-posts

Escape Sequences - specijalni znakovi u stringu

6.9.7 Escape Sequences – specijalni znakovi u stringu 

Ostao sam ti dužan za par objašnjenja....
U delu u kom sam govorio o definisanju stringova između trostrukih navodnika ili apostrofa, su se iznenada pojavile neke nepoznate oznake u našem stringu, a da ih mi nismo uopšte nigde ni otkucali! Šta je to? Šta ti znakovi znače ili šta predstavljaju?
Na ovom mestu želim da ti objasnim to.
Prvo, ajde jednostavno da ponovimo onaj primer u kome se pojavljuju „čudni“ znaci...
>>> ''' 
... "Šta oš'" - pitao me je. 
... "A koj' si ti da me to pitaš?" - bio sam oštar. 
... ''' 
'\n"Šta oš\'" - pitao me je.\n"A koj\' si ti da me to pitaš?" - bio sam oštar.\n' 
>>> 
Hmmm.... Ajde da proverimo kako to izgleda kada pošaljemo u print funkciju:
>>> print('\n"Šta oš\'" - pitao me je.\n"A koj\' si ti da me to pitaš?" - bio sam oštar. \n') 

"Šta oš'" - pitao me je. 
"A koj' si ti da me to pitaš?" - bio sam oštar. 

>>> 
Hej! Pa ovo izgleda - „normalno“?!?
Da. Izgleda „normalno“ za ljude. Šta je problem? Opet, problem je u pogledu na stvar. Većina ljudi ne zna (a i, pitanje je, što bi morala da zna – ako su korisnici nečega, a ne kreatori toga) da je gotovo sav tekst koji vide na računaru, na neki način formatiran. Na internetu, za formatiranje prikaza, koriste se HTML oznake, ako koristite dokumente pravljene u word-u, excel-u – opet se koriste neke oznake formatiranja, baze podataka imaju svoj način formatiranja, i svo to formatiranje je, na neki način, „nevidljivo“ krajnjim korisnicima. Iako su navedeni primeri malo napredniji od ovih što koristimo na ovom mestu, dobar su uvod za shvatanje da ono što vidimo dok gledamo u nešto, nije ono što je suštinski to – nešto. Jedino ako želimo da znamo više o tom nečemu, možemo da dođemo do zaključka da smo svo vreme imali pogrešnu predstavu, i da shvatimo šta je to nešto, i kako stvarno izgleda. Zato sam ti, za vežbu, rekao da razmisliš – kako računar vidi taster enter? A Page Up? Šta ti tasteri predstavljaju?
Na ovom mestu ću se dotaći te teme.
Iz prethodnog primera vidimo da, ukoliko prosledimo funkciji print, neki string definisan sa trostrukim navodnicima, će isto biti prikazan ako smo taj string definisali uz pomoć „običnih“ (jednostrukih) navodnika ili apostrofa, ali sa dodatkom nekih „specijalnih“ oznaka. Čak šta više, Python je u memoriji automatski konvertovao naš string između trostrukih navodnika, u string između apostrofa! Pa šta će nam onda trostruki navodnici, kada možemo isto postići i sa stringom između jednog apostrofa?
Ajde da zađemo dublje u tematiku...
Pretpostaviću da želiš da definišeš string koji treba da sadrži apostrof ( ' ). Kako ćeš definisati takav string? Na primer, džibersku rečenicu: „Š'a 'oćeš?“. Ne možeš napisati 'Š'a 'oćeš?' , jer će Python biti zbunjeni - gde tvoj string počinje, a gde se završava (za njega, ako je ovako napisano, to znači string 'Š' promenljiva astring 'oćeš?'. Gde nam je promenljiva a? Aha, nije definisana, znači – GREŠKA!). Dakle, ti moraš da na neki način, Pythonu pokažeš da znak apostrofa u rečenici ne znači i kraj stringa. Takve stvari se rade uz pomoć specijalnih znakova koji se zovu escape sequence. Kako im i ime na engleskom govori, takvo im je i značenje: ovaj znak treba meni, kao korisniku – ljudskom biću kojem taj znak ima neko specifično značenje, a ti – Pythonu, preskoči ovaj znak, nije namenjen da ga ti „analiziraš“ ni na koji način, jednostavno, briši od njega. 
Pažljivo pogledaj prethodni primer. Vidiš li koji znak je escape sekvenca u Python stringu?
Nisi primetio? Pogledaj još jednom...
Koji znak je ubačen ispred apostrofa u stringu? Pa – obrnuta kosa crta (\). Ako je Python to tako označio, onda i ti treba da označavaš apostrof u svom stringu na isti način - \' . Sada možeš da napišeš ovu džibersku rečenicu kao 'Š\'a \'оćeš?'. Da proverimo da li smo u pravu, i da li radi....
>>> džiber = 'Š'a 'oćeš?' 
  File "", line 1 
    džiber = 'Š'a 'oćeš?' 
                  ^ 
SyntaxError: invalid syntax 
>>> džiber = 'Š\'a \'oćeš?' 
>>> džiber 
"Š'a 'oćeš?" 
>>> 
Hah... Radi! Ali vidimo da sad Python to čuva u svojoj memoriji kao string pod navodnicima. Što nam govori ono što smo već i znali, a to je da je drugi način definisanja ovakvih specifičnih stringova "Š'a 'oćeš?", odnosno jednostavno korišćenje navodnika. Obrnutom filozofijom dolazimo do prve glavolomke koje sam ti zadao u ovom tutorijalu
>>> "Pišem ti pismo: "Kako si?" draga moja" 
  File "", line 1 
    "Pišem ti pismo: "Kako si?" draga moja" 
                          ^ 
SyntaxError: invalid syntax 
>>> 
Sada znaš da Python to vidi kao: string – 'Pišem ti pismo: ', nešto bezveze – Kako si?, string - ' draga moja'. Ups, ovde ima nešto što ne znam kako da obradim, bolje da prekinem izvršavanje ove gluposti – GREŠKA!!!!
Sada kada znamo escape sekvencu, rešavanje ovog problema je prosto:
>>> "Pišem ti pismo: \"Kako si?\" draga moja" 
'Pišem ti pismo: "Kako si?" draga moja' 
>>> 
Vidi, vidi – sada Python u memoriji ovaj string čuva pod – apostrofima!
Uh, a šta ako u našoj rečenici moramo da imamo obrnutu kosu crtu?
>>> "\o/" 
'\\o/' 
>>> 
Da, koristićemo duplu obrnutu kosu crtu za prikaz jedne kose crte. 
Šta ako želimo da nam string bude u dve linije (kao da smo koristili enter na tastaturi)? Jedan od načina je da koristimo trostruke navodnike ili apostrofe, kao što smo radili do sada.  A drugi način je da koristimo escape sequencu za novi red  - \n koja zamenjuje taster enter!. Evo ga primer:
>>> string = "Sada ti mogu pisati poruku\nčak i kad imam tastaturu\nna kojoj je iščupan taster Enter!" 
>>> string 
'Sada ti mogu pisati poruku\nčak i kad imam tastaturu\nna kojoj je iščupan taster Enter!' 
>>> print(string) 
Sada ti mogu pisati poruku 
čak i kad imam tastaturu 
na kojoj je iščupan taster Enter! 
>>> 
Zar nije super?
Još jedna korisna escape sequenca je poznatija kao tab (uvlačenje teksta) i oznaka mu je - \t .
>>> string = "Sada ti mogu pisati poruku\nčak i kad imam tastaturu\nna kojoj je iščupan taster Enter!\n\t1.\tNema Entera...\n\t2.\tNema Tab-a\nAli, nema veze... Furamo mi dalje..." 
>>> string 
'Sada ti mogu pisati poruku\nčak i kad imam tastaturu\nna kojoj je iščupan taster Enter!\n\t1.\tNema Entera...\n\t2.\tNema Tab-a\nAli, nema veze... Furamo mi dalje...' 
>>> print(string) 
Sada ti mogu pisati poruku 
čak i kad imam tastaturu 
na kojoj je iščupan taster Enter! 
 1. Nema Entera... 
 2. Nema Tab-a 
Ali, nema veze... Furamo mi dalje... 
>>> 
Postoji mnogo više oznaka escape sequenci, ali sam ovde naveo samo one koje se najčešće koriste prilikom pisanja programa. 
Još jedna stvar koju vredi napomenuti na ovom mestu je da je unutar stringa, a na kraju linije, jedna obrnuta kosa crta označava da se string nastavlja u sledećem redu, ali ne i da postoji znak za novi red. Na primer: 
>>> print("Ja volim mnogo da brbljam, zato su moje rečenice\ 
... previše dugačke, pa se ponekad u njima pogubim.\ 
... Ne znam zašto...") 
Ja volim mnogo da brbljam, zato su moje rečenicepreviše dugačke, pa se ponekad u njima pogubim.Ne znam zašto... 
>>> 
Ovo smo već videli na mestu gde sam objašnjavao razlike između logičke i fizičke linije.

6.9.6 Metoda formatiranja Indeks 6.9.8 RAW stringovi

Постави коментар

0 Коментари