Göm menyn

Styrstrukturer

Booleanska värden och villkor

Nedan kommer du få lära dig hur du kan lägga till styrstrukturer i din kod för att skapa program som inte enbart går i en och samma sekvens varje gång.

Men innan vi kan tackla det problemet behöver du lära dig att det finns sanningsvärden i Python. Dessa är True och False. Datatypen som de tillhör kallas för en boolean som förkortas bool i Python. Alla värden kan konverteras till en bool med funktionen bool(). En bra tumregel är att alla värden eller databehållare som inte är noll eller tomma är sanna och visa versa.

Testa följande:


>>> bool(0)
>>> bool(1)
>>> bool("")
>>> bool("hej")

Detta är i många fall praktiskt, men för det mesta skapar man sanningsväden genom att göra jämförelser. Exakt vad som gäller för jämförelser i Python kan du läsa om i denna del av dokumentationen (framförallt under punkten 6.10). Men kortfattat kan man säga att en jämförelse har 2 värden till vänster och höger om en operator. Vilken jämförelse som utförs beror på operatorn.

Flera jämförelser kan kopplas ihop med operatorerna and och or.

Testa följande:


>>> 5 > 4
>>> 4 < 5
>>> 5 == 5
>>> 5 != 5      
>>> "hej" in "hejsan"
>>> 5 > 4 and 4 > 5
>>> 5 > 4 or 4 > 5
Villkors/if-satser

Ni kan läsa mer om villkorssatser och sanningstest i kursboken Learning Python, kapitel 12.

En villkorssats evaluerar olika kodstycken beroende på ifall uttrycket är sant eller falskt. Vanligtvis används villkorssatser för att förändra kontrollflödet i ett program eller applikation beroende på yttre parametrar så som indata från användaren.

Antag att vi har ett heltal i variabeln x. Vi vill dela ett annat tal, y, med x, men det går ju inte om x skulle vara 0.

Testa följande.


 if x != 0:
     print(y/x)
 else:
     print("Kan inte dela med 0!")

Tänk nu att vi vill utöka föregående exempel och endast dela y med x om y är positivt. Vi kan då utöka till följande:


if x != 0:
    if y > 0:
        print(y/x)
else:
    print("X är noll!")

Vad händer nu om y är negativt? Hur utökar man koden vidare för att skriva ut ett meddelande om y är negativt?

Föregående exempel kan även skrivas enligt nedan:


if x != 0 and y > 0:
    print(y/x)
elif x == 0:
    print("X är noll")

Här ser vi exempel på användning av elif. En elif-gren evalueras endast om föregående villkor var falskt. Vi ser också and för att slå ihop två logiska uttryck. and ger True omm både vänster- och högerledet är True. Vi har även tillgång till or som ger true om något av leden är sanna.

Som avslutning vill vi endast göra divisionen om kvoten är positiv:


if x != 0 and y/x > 0:
  print(y/x)

Det är väldigt viktigt i vilken ordning man skriver sina villkor här. and-operatorn är en så kallad kortslutande operator vilket betyder att högerledet endast evalueras om det behövs, dvs om vänsterledet är True. Det betyder i vårt fall att divisionen endast utförs om x inte är 0. Hade vi bytt ordning på villkoren hade divisionen alltid utförts, även om x vore 0.

Upprepningar

Ni kan läsa mer om upprepningar och tekniker där de bör användas i kursboken Learning Python, kapitel 13.

Något ni ofta kommer att använda er av inom programmering är upprepningar, vilket ni kommer göra med loopar. Den allra enklaste loop-konstruktionen i Python är while-loopen. while är närbesläktad med if-satsen, men istället för att köra kodblocket en gång när villkoret är sant så körs kodblocket upprepade gånger så länge villkoret är sant.

Prova följande:


counter = 10
while counter > 0:
   print(counter, 'är större än noll')
   counter = counter - 1

data = ''
while data != 'q':
   data = input("Skriv något ('q' för att avsluta): ")
   print('Du skrev "{}".'.format(data))

Iteration

Ni kan läsa mer om iteration i form av for-loopen och tekniker där den bör användas i kursboken Learning Python, kapitel 13. Kortfattat kan man säga att for-loopen skall användas i alla fall där det är möjligt att lösa problemet med den och endast använda while-loopen där man måste.

Eftersom sekvenser (listor, strängar m.m.) är en så vanligt förekommande datatyp finns det givetvis smidiga sätt för att iterera genom och behandla dessa. Att gå igenom en lista med hjälp av en whileloop är både osmidigt och en källa till fel, såvida ni inte har en klar förståelse varför ni gör det bör därför while-loopen undvikas för att gå igenom sekvenser. for-loopen är ett smidigt sätt att iterera genom sekvenser, ni som programmerare slipper tänka på gränser och dylikt, allt sköts via Python.

Prova följande:


example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
index = 0
while index < len(example):
   element = example[index]
   print(element)
   index += 1

for index in range(len(example)):
   element = example[index]
   print(element)
	      
for element in example:
   print(element)

Om ni vill iterera över tal i ett givet intervall finns funktionen range. Prova följande:


for number in range(10):
   print(number)

for number in range(5, 11):
   print(number)

print(help(range))

Sidansvarig: Pontus Haglund
Senast uppdaterad: 2024-08-14