Göm menyn

Selektion

När ett program körs görs generellt ett flertal "val" som bestämmer vilken väg genom koden programmet ska ta. Varje sådant val kallas för en selektion. I Python ser vi främst selektion i form av if-satser som evaluerar ett villkor.

Upprepning: Vad är sant och falskt?

Vad är sant Vad är falskt
True False
Alla tal som inte är noll (ex. 1, -44.2) Alla tal som är noll (ex. 0, 0.0)
Alla icke-tomma strukturer (ex. [1, 2, 3], "hej") Alla tomma strukturer (ex. [], "", {})
Det speciella objektet None
  • Konstanterna True och False är egentligen konstanter med värdet 1 och 0.
  • Jämförelseoperatorer (t.ex. < och >) liksom många inbyggda testfunktioner (t.ex. isinstance) returnerar True eller False.
  • Använd True eller False så långt som möjligt! Varje gång man använder icke-explicita sanningsvärden minskar läsbarheten.

Hur kan villkorsuttryck utformas?

Dokumentation

Villkorsuttryck:

  • Literal: tal, sträng eller annat dataobjekt som tolkas som sant eller falskt.
  • Funktions- eller metodanrop: t.ex. isinstance(seq, list) eller < > !=.
  • Operator som kombinerar två eller fler deluttryck: ofta en jämförelse, t.ex. a < b.
  • Boolesk operator som kombinerar ett eller fler deluttryck: t.ex. a < b and x == 7.

Booleska operatorer

  • Boolesk algebra handlar om hur man räknar med sanningsvärden.
  • De tre vanligaste operatorerna är not and och or. Definitionen av dessa kan ses nedan.
a b not a a and b a or b
False False True False False
False True True False True
True False False False True
True True False True True

Dokumentation

Hur beräknas operationer i Python?

  • not a: Uttrycket a beräknas. Om detta är sant returneras False, annars True.
  • a and b: Uttrycket a beräknas. Om det är falskt returneras resultatet av a, annars beräknas b och dess resultat returneras
  • a or b: Uttrycket a beräknas. Om det är sant returneras resultatet av a, annars beräknas b och dess resultat returneras.
  • Både and och or använder sig av kortslutande beräkningar som enbart beräknar så mycket som behövs för att kunna säga något om hela resultatet.

Hur prioriteras booleska operationer i Python?

Prioriteringsordningen för de booleska operationerna är:

  1. not
  2. and
  3. or

Vilket innebär att dessa två uttryck blir samma sak:

Trots ordning kan det i många fall vara en bra idé att sätta ut parenteser även om de egentligen inte behövs, då det kan öka läsbarheten.

If som uttryck

Vi har tidigare sett att if-satser kan användas för att styra programexekveringen, det vill säga utföra olika instruktioner baserat på ett villkor. Men om man vill utföra enklare tester inne i ett uttryck kan man använda ett if-uttryck. Det fungerar som en enkel if-sats, men skrivs på en rad och fungerar som ett uttryck, det vill säga det returnerar ett värde.

Formatet för if-uttrycket är:

Exempel på användning:

Observera att if-uttryck inte kan innehålla elif utan finns endast på formen som beskrevs ovan, else måste alltså finnas.

Hur bör man arrangera villkoren i en if-sats?

  • Använd inte en if-sats överhuvudtaget om du kan beräkna eller slå upp resultatet.
  • Arrangera villkoren i en logisk ordning så att man lätt kan se att alla falls täcks upp (t.ex. nummerordning, bokstavsordning, från specifikt till allmänt).
    • Undvik villkor som överlappar varandra.
    • För tester i rekursiva funktioner, börja alltid med basfallet.
  • I sällsynta fall kan man arrangera villkoren så att det mest troliga fallet är först, för att optimera koden.
  • Undvik komplicerade nästlade if-satser i flera nivåer, om det inte gör koden tydligare

Exempel

Den första versionen av quarter är överskådlig, men det är onödigt många villkorsatser. Den andra är bättre då den är mer koncis.

Den första versionen av month överskådlig, men det är onödigt många villkorssatser. Den andra är bättre då den är mer koncis.

Tillhörande quiz

Finnes här


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2016-08-15