Muotoiltu tulostaminen str.format-funktiolla

Tähän asti olemme käyttäneet print-funktiota tulostamiseen varsin suoraviivaisesti:

alkuaine = "C"
atomipaino = 12.011
print("Alkuaineen", alkuaine, "atomipaino on", atomipaino)

tulostaa

Alkuaineen C atomipaino on 12.011

Pythonissa on kuitenkin käytettävissä myös erittäin monipuolinen str.format-funktio, jolla voi muotoilla merkkijonon:

alkuaine = "C"
atomipaino = 12.011
print("Alkuaineen {} atomipaino on {}".format(alkuaine, atomipaino))

tulostaa

Alkuaineen C atomipaino on 12.011

Merkkijonon "Alkuaineen {} atomipaino on {}" kaarisulut korvautuivat siis format-funktion parametreilla alkuaine ja atomipaino.

{}-kentän muotoilu

str.format-funktion {}-kenttää voi muotoilla lukuisilla eri tavoilla. Sen tyypillisin käyttötapa on {:<leveys>.<tarkkuus><tyyppi>}

Kentän tyyppiä merkitään kirjaimella. Tällä kurssilla tärkeimpiä kentän tyyppejä ovat

  • liukuluku f
  • kokonaisluku d
  • merkkijono s

Esimerkkejä:

  • liukuluku pyöristettynä kolmen desimaalin tarkkuuteen, automaattinen kentän leveys: {:.3f}
  • liukuluku, 6 merkkiä leveä kenttä, pyöristettynä nollan desimaalin tarkkuuteen: {:6.0f}
  • kokonaisluku, automaattinen kentän leveys: {:d}
  • kokonaisluku, 5 merkkiä leveä kenttä: {:5d}
  • Merkkijono, automaattinen kentän leveys {:s}
Esimerkki 1:

T = 300 # K
p = 1.12345 # atm
print("Olosuhteet ovat: {:d} K, {:.3f} atm".format(T, p))

tulostaa

Olosuhteet ovat: 300 K, 1.123 atm

Esimerkki 2:
n = 0.25          # mol
V = 0.00456       # m^3
T = 298.15        # K
R = 8.314462618   # J/(mol K)
p = n * R * T / V # Pa
print("Kun n = {:7.3f} mol, V = {:7.5f} m^3, T = {:7.2f} K, on paine p = {:7.0f} Pa".format(n, V, T, p))

tulostaa (numerojonot 1234567 havainnollistavat kentän leveyttä)

Kun n =   0.250 mol, V = 0.00456 m^3, T =  298.15 K, on paine p =  135908 Pa
        1234567          1234567          1234567                 1234567

Huomaa, miten kaikki kentät ovat nyt 7 merkkiä leveitä.

Vaikka str.format-funktion kokoaminen voi ensi alkuun vaikuttaa työläältä, on se todella paljon kätevämpää kuin tulostuksen hoitaminen print- ja round-funktioiden avulla.

Käytä lukuarvojen tulostamiseen tästä lähtien str.format-funktiota.

str.format-funktion laajempi dokumentaatio löytyy osoitteesta https://docs.python.org/3/library/string.html#formatstrings. Dokumentaatio on hieman abstrakti, mutta sisältää myös esimerkkejä.

Muita str.format-funktion käyttötapoja

Ennen kaarisulkujen sisältämän muotoilukentän kaksoispistettä voi käyttää tunnistetta, joka yhdistää kentän str.format-funktion parametriin:

print("Olosuhteet ovat: {T_K:d} K, {p_atm:.3f} atm".format(T_K=300, p_atm=1.12345))

tulostaa

Olosuhteet ovat: 300 K, 1.123 atm

str.format-funktion parametreja voi toistaa helposti käyttämällä kaarisulkujen sisällä tunnisteita:

alkuaine = "C"
atomipaino = 12.011
naapuri = "N"
print("Alkuaineen {aine} atomipaino on {paino:.3f}. " 
      "Alkuaineen {aine} naapuri on {aine2}".format(aine=alkuaine, paino=atomipaino, aine2=naapuri))

tulostaa

Alkuaineen C atomipaino on 12.011. Alkuaineen C naapuri on N

Huomaa myös esimerkistä, miten pitkää merkkijonoa voi jatkaa koodissa toiselle riville yksinkertaisesti sulkemalla lainausmerkit ja aloittamalla uudet seuraavalla rivillä.


Tehtävä 2.3.1.