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>}. Muutamia esimerkkejä:

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

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.3145 # J/(mol K)
p = n * R * T / V # J/m^3
print("Kun n = {:3.2f} mol, V = {:7.5f} m^3, T = {} K, on paine p = {:6.0f} J/m^3".format(n, V, T, p))

tulostaa

Kun n = 0.25 mol, V = 0.00456 m^3, T = 298.15 K, on paine p = 135908 J/m^3

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 aina kun mahdollista.

str.format-funktion 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 argumentteja 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.