CHEM-A2600 - Kemiantekniikan ohjelmointikurssi, Luento-opetus, 30.5.2022-28.8.2022
Kurssiasetusten perusteella kurssi on päättynyt 28.08.2022 Etsi kursseja: CHEM-A2600
Python-oppimateriaali (CHEM-A2600)
Muotoiltu tulostaminen f-merkkijonoilla tai 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
f-merkkijonot
Pythonissa on myös edistyneempiä tapoja tulostaa muotoiltuja merkkijonoja. Pythonin versiosta 3.6 lähtien on ollut mahdollista hyödyntää ns. f-merkkijonoja (engl. f-strings), joilla muuttujien arvojen sijoittaminen merkkijonoihin on erittäin helppoa:
alkuaine = "C" atomipaino = 12.011 # Huomaa, miten print-lausekkeen sisällä oleva merkkijono alkaa f-kirjaimella ennen lainausmerkkiä print(f"Alkuaineen {alkuaine} atomipaino on {atomipaino}")
tulostaa
Alkuaineen C atomipaino on 12.011
f-merkkijonoja käytettäessä muuttujat voidaan siis upottaa merkkijonon sisään {muuttuja}-merkinnällä.
str.format-funktio
Ennen f-merkkijonoja muotoiltuun tulostamiseen käytettiin str.format-funktiota:
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. On makuasia, käyttääkö f-merkkijonoja vai str.format-funktiota. f-merkkijonoilla koodista tulee yleensä selkeämpää ja tämän kurssin oppimateriaaleissa käytetään pääasiassa f-merkkijonoja.
{}-kentän muotoilu
f-merkkijonojen {muuttuja}-kenttää voi muotoilla lukuisilla eri tavoilla. Sen tyypillisin käyttötapa on {muuttuja:<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: {muuttuja:.3f}
- liukuluku, 6 merkkiä leveä kenttä, pyöristettynä nollan desimaalin tarkkuuteen: {muuttuja:6.0f}
- kokonaisluku, automaattinen kentän leveys: {muuttuja:d}
- kokonaisluku, 5 merkkiä leveä kenttä: {muuttuja:5d}
- Merkkijono, automaattinen kentän leveys {muuttuja:s}
Esimerkki 1:
T = 300 # K p = 1.12345 # atm print(f"Olosuhteet ovat: {T:d} K, {p:.3f} atm")
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(f"Kun n = {n:7.3f} mol, V = {V:7.5f} m^3, T = {T:7.2f} K, on paine p = {p:7.0f} Pa")
tulostaa seitsemän merkkiä leveitä kenttiä (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
Vaikka f-merkkijonojen muotoilukenttien kokoaminen voi ensi alkuun vaikuttaa työläältä, on se todella paljon kätevämpää kuin monimutkaisten tulostusten hoitaminen
print- ja round-funktioiden avulla.
Käytä lukuarvojen tulostamiseen tästä lähtien f-merkkijonoja.
f-merkkijonojen laajempi dokumentaatio löytyy osoitteista https://docs.python.org/3/reference/lexical_analysis.html#f-strings ja https://docs.python.org/3/library/string.html#format-specification-mini-language.