Start | if then else
 

if -satser (villkor)



Vi behöver ofta styra vad som ska hända utifrån om något är på det ena eller andra sättet.

if

Med if(sant/falskt) kan vi ställa frågan om något är sant och utifrån det välja att köra kod A eller kod B.

x = int(input("Skriv ett tal 1-10")) if x >= 5: print("över eller lika med fem") if x < 5: print("under fem")

OBS att det härifrån och fram är viktigt att du indenterar koden rätt med tab. Prova vad som händer om du inte indenterar, försök sedan rätta till felet igen så att du blir kompis med felmeddelandet.

if ... else

Om det är ett villkor av typen att om det ena inte gäller, så gäller det andra, då kan vi använda else.
x = int(input("Skriv ett tal 1-10")) if x >= 5: print("över eller lika med fem") else: print("under fem")
Vi kan förstås använda if -satser även med strängar.
x = input("Skriv ett namn") if x == "kalle": print("Heter Kalle!") else: print("Heter något annat")

if ... elif ... else

x = int(input("Skriv ett tal 1-10")) if x > 5: print("över fem") elif x < 5: print("under fem") else: print("exakt fem")

tjena if x else hej


Det finns en 1-raders if -version som kan vara smidig ibland.
x = False print("tjena" if x else "hej") x = True print("tjena" if x else "hej")
Det kan tex vara en tilldelning av ett värde som beror på någon omständighet.
temperatur = 9 klader = "varma kläder" if temperatur < 15 else "vad som helst" print("Ta på dig",klader,", det är",temperatur,"grader ute")

match ... case

matcha nummer


a = 2 match a: case 1: print("Ett") case 2: print("Två") case 3: print("Tre") case _: print("Ej 1,2 eller 3")

matcha tecken


keydown = 'w' match (keydown): case "w": print("Upp") case "a": print("Vänster") case "s": print("Ners") case "d": print("Höger") case _: print("Ingenting")

matcha med | (eller)


x = 3 match x: case 1 | 2: print("Ett eller två") case 3 | 4: print("tree eller fyra") case 5 | 6: print("fem eller sex") case 7 | 8: print("sju eller åtta") case _: print("Över 8 eller mindre än 1")

match + if-satser


x = 3 match x: case x if x >= 3: print("Godkänt!") case x if x < 3: print("Tyvär, underkänt") case _: print("Fel inträffat")

mönstermatchning lista


Mönstermatchning på en lista.
def match(lst): match lst: case ["a"]: print("a") case ["a", *resten]: print(f"a och {resten}") case [*borjan, "z"] | (*borjan, "z"): print(f"{borjan} och z") case _: print("Inget") match(["q", "g", "e"]) match(["q", "g", "z"]) match(["a", "g", "z"])

mönstermatchning dictionary


Mönstermatchning mot en dictionary.
def matcha(dictionary): match dictionary: case {"djur": d, "antal_ben": n}: print(f"En {d} har {n} ben") case {"djur": d, "lever_i": s}: print(f"En {d} lever i {s}") case {"bilmarke": d, "maxfart": s}: print(f"En {d} kan köra i {s} km/h") case _ : print("Vet ej vad detta är") matcha({"djur": "Häst", "antal_ben": 4}) matcha({"djur": "Tupp", "antal_ben": 2}) matcha({"djur": "Aborre", "lever_i": "havet"}) matcha({"djur": "Blåmes", "lever_i": "luften"}) matcha({"djur": "Blåmes", "lever_i": "luften"}) matcha({"djur": "Mask", "lever_i": "jorden"}) matcha({"bilmarke": "BMW", "maxfart": 240}) matcha({"bilmarke": "Lada", "maxfart": 130}) matcha({"djur": "Haj", "typ":"Farligt"}) matcha({})


Inom fysiken - eller närmare bestämt elektroniken - så finns det en komponent som heter motstånd. Värdet på dess resistans bestäms av färgkoden på utsidan. Strunta i själva funktionen nedan (vi går igenom det snart), se istället hur vi matchar färgerna.
def farg(*farger): res = 0 i = 0 v = 0 ant_band=len(farger) for farg in farger: i = i + 1 match farg: case "brun": v = 1 case "röd": v = 2 case "orange": v = 3 case "gul": v = 4 case "grön": v = 5 case "blå": v = 6 case "lila"|"violett": v = 7 case "grå": v = 8 case "silver": v = -2 case "guld": v = -1 if(ant_band == 3): if(i==1): res = res + v*10 if(i==2): res = res + v*1 if(i==3): res = res*10**v if(ant_band == 4): if(i==1): res = res + v*100 if(i==2): res = res + v*10 if(i==3): res = res + v if(i==4): res = res*10**v return(res) R1 = farg("orange","orange","brun") print("R1=",R1,'Ω') R2 = farg("röd","röd","brun") print("R2=",R2,'Ω')


Lite frågor

a = 3 if a > 2 print("större än 2")
Varför fungerar inte ovan kod?
  Saknas parentes
  Saknas kolon och indentering
  Saknas indentering
Vad blir print("Hejsan" if True else "Tjena")
  Tjena
  Hejsan
  Error
Vad blir print("Hejsan" if False else "Tjena")
  Hejsan
  Error
  Tjena
a = 2 match a: case 1: print("a") case 2: print("b") case 3: print("c") case _: print("d")
I ovan kod, om vi sätter a=10 vad blir utskriften.
  print("a")
  print("b")
  print("c")
  print("d")
def match(lst): match lst: case ["a"]: print("a") case ["a", *resten]: print("b") case [*borjan, "z"]: print("c") case _: print("d")
I ovan kod, om vi kör match(["a"]) vad får vi för svar?
  print("a")
  print("b")
  print("c")
  print("d")
I ovan kod, om vi kör match(["a", "g", "z"]) vad får vi för svar?
  print("a")
  print("b")
  print("c")
  print("d")
I ovan kod, om vi kör match(["q", "g", "z"]) vad får vi för svar?
  print("a")
  print("b")
  print("c")
  print("d")


15.661954879761 ms