Osa 4

Tulostuksen muotoilu

Olemme tähän mennessä yhdistelleet tulostettavaa tietoa print-komennossa kahdella tavalla.

Ensimmäinen tapa on käyttää merkkijonojen +-operaattoria ja muodostaa näin yksittäinen merkkijono, jonka print saa parametrikseen:

nimi = "Erkki"
ika = 39
print("Hei " + nimi + " ikäsi on " + str(ika) + " vuotta" )

Tämä tapa edellyttää, että kaikki yhdistettävät osat ovat merkkijonoja. Koska muuttuja ika on tyypiltään kokonaisluku, se on muutettu yhdistämistä varten merkkijonoksi funktiolla str.

Toinen käyttämämme tapa on eritellä tulostuksen osat pilkulla:

print("Hei", nimi, "ikäsi on", ika, "vuotta" )

Tämän koodin lopputulos on sama kuin edellisen esimerkin. Näin käytettynä print tulostaa kaikki parametrinsa välilyönnillä eroteltuna. Etuna tässä tavassa on, että tulostettavat osat voivat olla eri tyyppisiä eli tyyppimuunnosta merkkijonoksi ei tarvita.

Automaattisesta välilyönnistä pilkulla eriteltyjen osien välillä on mahdollista päästä eroon antamalla funktiolle parametri sep:

print("Hei", nimi, "ikäsi on", ika, "vuotta", sep="")

Tulostus on nyt seuraava:

Esimerkkitulostus

HeiErkkiikäsi on39vuotta

Parametri sep="" on nimetty parametri, joka määrittelee, että pilkulla eroteltujen osien väliin laitetaan ainoastaan tyhjä merkkijono. Voisimme myös saada jokaisen osan tulostumaan omalle rivilleen määrittelemällä erottimeksi "\n" eli rivinvaihtoa kuvaavan merkin:

print("Hei", nimi, "ikäsi on", ika, "vuotta", sep="\n")
Esimerkkitulostus

Hei Erkki ikäsi on 39 vuotta

Oletusarvoisesti print-komento päättyy rivinvaihtoon, mutta tätä voidaan muokata parametrin end avulla. Esim. jos end saa arvoksi tyhjän merkkijonon, print-komento ei aiheuta automaattista rivinvaihtoa:

print("Moi ", end="")
print("kaikki!")
Esimerkkitulostus

Moi kaikki!

f-merkkijonot

Niin sanotut f-merkkijonot tarjoavat kolmannen ja edellisiä joustavamman ja jopa helppokäyttöisemmän tavan tulostuksen muotoiluun.

Aiempi nimen ja iän tulostava esimerkki tehtäisiin f-merkkijonojen avulla seuraavasti:

nimi = "Erkki"
ika = 39
print(f"Hei {nimi} ikäsi on {ika} vuotta")

Tässä merkkijonon alussa on kirjain f, mikä tarkoittaa että merkkijono on f-merkkijono. Merkkijonon sisälle on sijoitettu aaltosuluissa muuttujia, joiden arvot tulevat merkkijonon osaksi. Tulostus on täsmälleen sama kuin aiemmissa esimerkeissä.

Voimme muotoilla monin tavoin f-merkkijonojen avulla tapahtuvaa tulostusta. Yksi tavallinen käyttötapa on antaa liukuluvun tulostuksessa näytettävien desimaalien määrä. Oletusarvoisesti tulostuu jokin määrä desimaaleja:

luku = 1/3
print("Luku on", luku)
Esimerkkitulostus

Luku on 0.333333333333333

Saamme määriteltyä tulostuvien desimaalien määrän f-merkkijonon avulla. Tulostuksen muoto määritellään lisäämällä aaltosulkeiden sisään tulostettavan muuttujan jälkeen kaksoispiste ja muotoiluohje:

luku = 1/3
print(f"Luku on {luku:.2f}")
Luku on 0.33

Muotoiluohje .2f siis määrittelee, että desimaaliluku tulostetaan kahden desimaalin tarkkuudella. Huom: kirjain f kakkosen jälkeen tarkoittaa että muotoiluohje koskee desimaalilukua eli float-tyyppistä arvoa!

Tässä on vielä toisenlainen esimerkki, jossa tulostetaan nimiä 15 merkin levyiseen tekstialueeseen, ensin vasemmalle sisennettynä ja sen jälkeen oikealle sisennettynä:

nimet =  [ "Antti", "Emilia", "Juha-Pekka", "Maya" ]
for nimi in nimet:
  print(f"{nimi:15} keskellä {nimi:>15}")
Antti           keskellä           Antti
Emilia          keskellä          Emilia
Juha-Pekka      keskellä      Juha-Pekka
Maya            keskellä            Maya
Loading
Loading
:
Loading...
:
Loading...

Kirjaudu sisään nähdäksesi tehtävän.