You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Merkkijonot toimivat tekstiä säilyttävinä muuttujina. Joissain ohjelmointi kielissä on erikseen muuttuja, joka kuvaa yksittäistä merkkiä, mutta Pythonissa näin ei ole. Merkkijonojen toimintoja voi kätevästi kokeilla interaktiivisessa ohjelmoinnissa.

Ensinnäkin, kuten aiemmin puhuttiin, merkkijono tehdään kirjoittamalla teksti lainausmerkkien sisään, mutta siinä on muutamia selvitystä vaativia yksityiskohtia. Ensinnäkin lainausmerkkiä ei voi kirjoittaa merkkijonon sisään sellaisenaan, koska se käsiteltäisiin merkkijonon lopettavana merkkinä jolloin aiheutuu virhe.

>>> "merkki " aiheuttaa ongelmia"
SyntaxError: invalid  syntax
>>>

Tätä ja muita ertyiskohtelua vaativa merkkejä varten merkkijonoja kirjoitettaessa kenoviivalla, jonka avulla kyseiset merkit saadaan merkittyä. Esimerkiksi lainausmerkki saadaan kirjoittamalla peräkkäin kenoviiva ja lainausmerkki.

>>> "merkki \" ei enaan aiheuta ongelmia"
'merkki " ei  enaan aiheuta ongelmia'
>>>

Kenoviivan avulla saadaan myös kirjoitettua ns. näkymättömät merkit kuten sarkainmerkki merkkiyhdistelmällä \t ja rivinvaihto \n. Välilyönti myös kuuluu näkymättömiin merkkeihin, mutta sitä varten ei tarvita erikoismerkintöjä. Kenoviiva merkitään taas kirjoittamalla merkkijonoon kaksi kenoviivaa peräkkäin.

Lainausmerkkien lisäksi merkkijonon alussa ja lopussa voi käyttää heittomerkkejä. Heittomerkillä tehdyissä merkkijonoissa täytyy tosin käyttää kenoviivaa taas ennen jokaista heittomerkkiä. Tässä on se erikoinen ominaisuus, että heittomerkillä tehtyjen merkkijonojen sisään voi kirjoittaa lainausmerkkejä sellaisenaan ja sama toimii myös päin vastoin.

>>> "Lainausmerkit ja ' "
"Lainausmerkit ja ' "
>>>
>>> 'Heittomerkit ja " '
'Heittomerkit ja " '
>>>

On vielä kolmas tapa tehdä merkkijonoja. Kirjoittamalla merkkijonon aluksi ja lopuksi kolme lainaus-tai heittomerkkiä, merkkijonoa voi jatkaa usealle riville. Lisäksi tabulaattoria ja rivinvaihtoakaan ei tarvi ilmaista kenoviivan avulla.

Merkkijonoja voi muokata yhdistämällä, samoinkuin esimerkki ohjelmassa tehtiin. Tämä onnistuu plus merkillä. Plusmerkit kirjoitetaan yhdistettävien merkkijonojen väliin ja yhdistettäviä merkkijonoja voi olla ueampiakin.

>>> "Kaksi " + "merkkijonoa."
'Kaksi merkkijonoa.'
>>>
>>> "Yhdistetaan " + "kolme " +  "merkkijonoa."
'Yhdistetaan kolme merkkijonoa.'
>>>

Merkkijonoja voi myös monistaa kertomerkillä. Tällöin monistettava merkkijono tulee kertomerkin vasemmalle puolelle ja oikealle puolelle tulee kokonaisluku, joka kertoo kuinka paljon merkkijonoa monistetaan. Merkkijonojen yhdistäminen ja monistaminen onnistuu myös samalla rivillä - plus- ja kertomerkit suoritetaan samassa järjestyksessä kuin matematiikassa.

>>> "mita " * 7
'mita mita mita mita mita mita mita '
>>>
>>> "mita" + "?" * 10
'mita??????????'
>>>

Merkkijonoon voi myös sijoittaa muiden merkkijonoja (ja muidenkin muuttujien arvoja) ns. muotoilu operaattorilla, jona toimii prosenttimerkki. Tällöin merkkijonon kohdassa, johon arvo halutaan sijoittaa, tulee lukea %s. Merkkijono tulee muotoilu operaattorin vasemmalle puolelle ja sijoitettava arvo oikealle.

>>> "Sijoitus %s toiminnassa" % "merkki"
'Sijoitus  merkki toiminnassa'
>>>

Merkkijonosta voi myös erotella pienempiä osia indeksoinnin ja leikkauksen avulla - molempien merkitsemisessä käytetään hakasulkuja. Indeksoinnissa hakasulut kirjoitetaan merkkijonon jälkeen ja hakasulkujen sisään kirjoitetaan sen merkin indeksi, joka merkkijonosta halutaan (indeksi nolla on merkkijonon ensimmäinen merkki). Negatiivinen luku taas kertoo monesko merkki merkkijonon lopusta laskettuna valitaan (-1 on viimeinen merkki).

>>> "abcdefg"[3]
'd'
>>>
>>> "abcdefg"[-3]
'e'
>>>

Leikkauksella merkkijonosta otetaan useampi merkki kirjoittamalla hakasulkeisiin kaksoispiste ja sen molemmin puolin rajat kokonaisluvuin (positiivisin tai negatiivisin), joiden välistä merkit valitaan. Viimeisen indeksin osoittama merkkä ei lukeudu leikattavaan pätkään. Lisäksi jättämällä leikkauksen alkupään määrittämättä leikkaus kohdistuu automaattisesti merkkijonon alkuun ja jättämällä loppupään määrittämättä leikkaus kohdistuu automaattisesti merkkijonon loppuun - näin pelkkä kaksoispiste palauttaa koko alkuperäisen merkkijonon.

>>> "abcdefg"[0:3]
'abc'
>>>  "abcdefg"[3:-3]
'd'
>>> "abcdefg"[2:-2]
'cde'
>>> "abcdefg"[:-2]
'abcde'
>>> "abcdefg"[2:]
'cdefg'
>>>  "abcdefg"[:]
'abcdefg'
>>>

Jos tarvitaan vielä tarkempaa merkkijonojen käsittelyä, niin voi käyttää kahta kaksoispistettä, jolloin voi määrittää välin, joka jää valittavien merkkien väliin. Tässä leikkauksen alku kirjoitetaan ennen ensimmäistä kaksoispistettä, loppu kirjoitetaan kaksoispisteiden väliin ja leikkausväli toisen kaksoispisteen jälkeen.

>>> "abcdefg"[1:-1:2]
'bdf'
>>>

Lisäksi merkkijonon (ja muidenkin arvojen) tallentaminen muuttujaan onnistuu yhtäsuuruusmerkillä =. Vasemmalle tulee muuttujaa merkitsevä tunnistin ja oikealle arvo, joka siihen halutaan sijoittaa. Operaatiot toimivat samalla lailla tehtiin ne sitten suoraan merkkijono ilmaisulle tai muuttujaan talennetulle merkkijonolle.

>>> "abcdefg"[2]
'c'
>>> s = "abcdefg"
>>> s[2]
'c'
>>>
  • No labels
You must log in to comment.