Strings#

En string er en datatype som samler symboler i en rekkefølge.

I denne delen skal vi fikse og trikse på strings.

Legge til og repetere#

Vi kan legge sammen strings ved a plusse +.

a = "💜"
b = "🐍"

print(a + b)
💜🐍

Vi kan repetere strings ved å gange.

print("🐍" * 30)
🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍

Indeksering og løkker#

Vi kan indeksere i en string akkurat som i en liste.

tekst = "😌🙂😍"

print(tekst[0])
print(tekst[2])
😌
😍

Vi kan også kjøre gjennom strings med for-løkker.

tekst = "😌🙂😍"

for n in range(len(tekst)):
    print(n, tekst[n])
0 😌
1 🙂
2 😍

Hvis vi ikke er interessert i indeksene kan vi bruke følgende for-løkke.

tekst = "😌🙂😍"

for x in tekst:
    print(x)
😌
🙂
😍

Her vil x være hvert enkelt symbol i teksten.

string.upper() og string.lower()#

Vi kan få en ny string som bare har store eller små bokstaver med upper()- eller lower()-metoden.

tekst = "Jeg elsker Python 🐍"
print(tekst.upper())
print(tekst.lower())
JEG ELSKER PYTHON 🐍
jeg elsker python 🐍

Dette er nyttig når man håndterer tekst, for eksempel fra en input() eller en fil.

svar = input("Svar:")
if svar.lower() == "ja":
    print("👍")
else:
    print("👎")

Programmet vil skrive ut "👍" uansett om svaret er "ja", "Ja", "JA" eller "jA".

string.replace()#

Vi kan få en ny string hvor tegn eller deler av en string er fjernet eller erstattet ved å bruke replace()-metoden for strings.

tekst = "Jeg elsker Python! 🐍"

print(tekst, "->", tekst.replace(" ", ""))     # Erstatter mellomrom " " med "" (ingenting).
print(tekst, "->", tekst.replace("Jeg", "Du")) # Erstatter "Jeg" med "Du" 
print(tekst, "->", tekst.replace("!", "?"))     # Erstatter "!" med "" (ingenting)
Jeg elsker Python! 🐍 -> JegelskerPython!🐍
Jeg elsker Python! 🐍 -> Du elsker Python! 🐍
Jeg elsker Python! 🐍 -> Jeg elsker Python? 🐍

string.split()#

Med split()-metoden kan vi dele opp en string på et eller flere tegn. Da får vi en liste over hver del.

tekst1 = "Hei, jeg heter Tobias og elsker Python!"
tekst2 = "Hydrogen,H,[1],Gass"

print(tekst1.split(" ")) # Splitter på mellomrom
print(tekst2.split(",")) # Splitter på komma
['Hei,', 'jeg', 'heter', 'Tobias', 'og', 'elsker', 'Python!']
['Hydrogen', 'H', '[1]', 'Gass']

På denne måten kan vi finne ord i en tekst eller dele opp data fra en datafil.

string.strip()#

Noen ganger ønsker vi å fjerne spesifikke tegn fra starten og slutten av en string.

Uten argumenter fjerner strip() mellomrom og \n-tegn fra starten og slutten av en string.

tekst = "    Hei på deg    "

print(tekst)
print(tekst.strip())
    Hei på deg    
Hei på deg

Tekst fra filer har ofte \n-tegn for å markere en ny linje. Disse ønsker vi ofte å fjerne.

linjer = ["Hei! \n", 
          "Jeg heter Arnhild og dette er min blogg om sopp 🍄 \n",
          "Kontakt meg på arnhild@soppbloggen.no \n"]

for x in linjer:
    print(x.strip()) # Fjerner \n og mellomrom fra hver string i listen
Hei!
Jeg heter Arnhild og dette er min blogg om sopp 🍄
Kontakt meg på arnhild@soppbloggen.no

Vi kan også velge hvilke tegn vi ønsker å fjerne fra starten og slutten av en string ved å sette det i et argument til metoden.

tekst = "    ...Python, et vakkert språk...    "

print(tekst.strip(" ."))
Python, et vakkert språk

Argumentet til strip

Legg merke til at argumentet " ." ikke fjerner substrings " .", men spesifiserer hvilke tegn som skal fjernes. Det vil si mellomrom " "og punktum ".".

Ønsker vi å fjerne "a", "b" og "c" kan vi skrive strip("abc").

tekst = "aababacacacacababaca🐍acacacacbcbabcbacbabc"
print(tekst.strip("abc"))

Gir oss bare "🐍".

Metode-chaining 🔗

Vi kan gjøre flere string-metoder etter hverandre ved å skrive de etter hverandre.

tekst = "Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn"

print(tekst.replace("'", "").upper())

Her fjernes alle tegn ' før hele teksten konverteres til uppercase.

Vi får ut PHNGLUI MGLWNAFH CTHULHU RLYEH WGAHNAGL FHTAGN

Hvordan ser stringen faktisk ut?

Når man bruker print() så skrives ikke stringen ut sånn som den er.

tekst = "Hei! \n Jeg heter Arnhild og dette er min blogg om sopp 🍄 \n Kontakt meg på arnhild@soppbloggen.no"
print(tekst)

Koden over vil skrive ut følgende:

Hei! 
Jeg heter Arnhild og dette er min blogg om sopp 🍄 
Kontakt meg på arnhild@soppbloggen.no

Dersom vi ønsker å se stringen sånn den faktisk er kan vi bruke repr()-funksjonen.

tekst = "Hei! \n Jeg heter Arnhild og dette er min blogg om sopp 🍄 \n Kontakt meg på arnhild@soppbloggen.no"
print(repr(tekst))

Som gir:

Hei! \n Jeg heter Arnhild og dette er min blogg om sopp 🍄 \n Kontakt meg på arnhild@soppbloggen.no

Formatering med f-strings#

Du er sikkert kjent med at man kan sette inn Pythonske uttrykk i strings ved å bruke f-string-formatering.

a = 3
b = 2

print(f"{a} ganger {b} blir {a + b}")
3 ganger 2 blir 5

Her kommer det en del ekstra triks med f-strings som gjør at du kan lage helt sykt kule utskrifter i terminalen.

Avrunding#

Vi kan runde av tall ved å bruke : etterfulgt av .2f, der tallet står for antall desimaler.

from math import pi

r = 2

print(f"Areal (to desimaler): {pi * r**2:.2f}")
print(f"Areal (fem desimaler): {pi * r**2:.5f}")
Areal (to desimaler): 12.57
Areal (fem desimaler): 12.56637

Store og små tall#

For store tall kan man spesifisere , som et skille for tusen-plassene.

lønn = 1234567.891011

print(f"Med , som skille: {lønn:,} kr")
print(f"Med , som skille og to desimaler: {lønn:,.2f} kr")
Med , som skille: 1,234,567.891011 kr
Med , som skille og to desimaler: 1,234,567.89 kr

Man kan også bruke skrive ut med e-notasjon, som gir svaret på standardform.

AU = 149_597_870_700

print(f"En astronomisk enhet er definert som {AU} meter.")
print(f"Standardform: {AU:e} meter")
print(f"Standardform med to desimaler: {AU:.2e} meter.")
En astronomisk enhet er definert som 149597870700 meter.
Standardform: 1.495979e+11 meter
Standardform med to desimaler: 1.50e+11 meter.

Plassering#

Vi kan sette av ekstra plass til uttrykket som skal settes inn ved å bruke : etterfulgt av et tall.

print(f"---{'Python🐍':20}---")
---Python🐍             ---

Vi kan også sette stringen vår…

  • … til venstre med <

  • … til høyre med >

  • … eller sentrert med ^

print(f"---{'Python🐍':<20}---")
print(f"---{'Python🐍':>20}---")
print(f"---{'Python🐍':^20}---")
---Python🐍             ---
---             Python🐍---
---      Python🐍       ---

Oppgaver#

Oppgave 1 🧑‍💻

Å nei! Noen har hacket PC’n min og endret på masse tekst! 😱

Gjør om hver string slik at den matcher output-kolonnen ved å bruke string-metoder.

String

Output

"  ..p.y.th.on..🐍  "

"PYTHON🐍"

"Jeg hater Python! 😡 \n"

"Jeg elsker Python! 😍"

",.,l.l,,.passord:lmao123,.,l,.l,.l"

"passord:*******"

Du får ikke bruke replace()-metoden til å skrive om hele stringen til riktig output.

Oppgave 2 🎮

I gamledager byttet gamere ut noen av bokstavene i navnene sine med tall for å se kule ut.

Lag en funksjon gamerifiser(s) som skal ta inn en string s og returnere en string som er gamerifisert.

Her er noen testcases som funksjonen din må oppfylle.

gamerifiser("linus") -> "xxl1nu5xx"
gamerifiser("beate") -> "xxb34t3xx"

Oppgave 3 🅰️

Lag en funksjon antall_a() som tar inn en string s og returnerer hvor mange ganger bokstaven "a" er skrevet.

Tell både stor og liten bokstav.

Her er noen testcases som funksjonen din må oppfylle.

antall_a("Banan")  -> 2
antall_a("Ananas") -> 3
antall_a("Kiwi")   -> 0

Oppgave 4 ⚒️

Bygg en pyramide.

                   #                    
                 ######                 
              ###########               
            ################            
         #####################          
       ##########################       
    ###############################     
  ####################################  

Oppgave 5 🖥️

Fortnite-Fillip skal spare til å kjøpe seg en 4K OLED gaming-skjerm med 240 Hz til \(7\,000\) kr.

Han får \(400\) i starten av hver måned for å gjøre husarbeid. I tillegg får han \(5\%\) månedlig rente på pengene sine.

Skriv ut en spareplan som en fin tabell. Den skal dekke hver måned helt til han har nok penger.