2. Styrstrukturer
Programmeringsteknik
Innehåll |
Villkor
Problem: Mamma ska resa till mormor över helgen. Hon är orolig för att lille Lasse, som ska vara alldeles ensam hemma, kommer att klä sig för tunt och vill därför ha ett program som hjälper honom med klädseln.
För att kunna skriva ett sådant program behöver vi lära oss två saker: hur man läser inmatning från tangentbordet och hur man jämför tal.
Inläsning
För att läsa från tangentbordet använder man en input-sats, t ex
temperatur = input()
Efter denna sats kommer variablen temperatur att innehålla det som den som körde programmet skrev på tangentbordet (och avslutade med returtangenten). Tyvärr är det svårt för den som kör programmet att fatta att det är just temperatur som ska matas in eftersom programmet inte frågar efter något. Det fixar man lätt med en print-sats:
print "Ge utetemperatur: " temperatur = input()
Den här konstruktionen (skriv ut fråga och läs in svar) är så vanlig att man ordnat ett förkortat skrivsätt för den:
temperatur = input("Ge utetemperatur: ")
Viktigt att förstå är att input-satser läser inmatningen i den ordning den kommer. Det går inte att hoppa över någon del av inmatningen. Om någon skriver t ex 17[retur]42[retur] och du endast vill läsa det andra talet (42) måste man först läsa det första (17).
Villkor
När vi väl vet temperaturen kan vi kolla om den är för låg genom att skriva:
temperatur = input("Ge utetemperatur: ") if temperatur<5: print "Ta på dej en halsduk, lille vän!"
Detta program kommer att se ut så här på skärmen:
Ge utetemperatur: 1 Ta på dej en halsduk, lille vän!
eller
Ge utetemperatur: 17
Detta program kommer alltså att skriva ut texten "Ta på dig en halsduk, lille vän" endast om (svaret på frågan om) utetemperaturen är mindre än 5. Strukturen på en if-sats är:
if < BOOLESKT UTTRYCK> : < EN ELLER FLERA SATSER SOM SKA EXEKVERAS>
En if-sats startar med reserverade ordet if, efter ordet if ska ett uttryck som resulterar ett booleskt värde (True eller False) komma. Efter uttrycket kommer tecknet kolon (:). Efter kolon kommer de satser som ska exekveras om värdet blir True. Dessa satser ska indenteras med mellanslags- eller tabulator-tangenten. För att undvika problem bör du inte blanda indentering gjord med mellanslag och tabbar i samma fil.
Konstanter
Programmerare och andra nördar är kända för sin torra humor. Ett sätt att införa det i programmet är att införa en konstant. En konstant i Python är precis som en variabel, men som en konvention skriver man variabelnamnet med versaler, t ex:
MAMMAS_FRYSPUNKT=5 temperatur = input("Ge utetemperatur: ") if temperatur < MAMMAS_FRYSPUNKT: print "Ta på dej en halsduk, lille vän!"
En konstant ändrar inte funktionen i ett program från användarens sida, men det gör programmet lättare att modifiera för programmeraren (ffa om programmet är stort) och rätt använd kan den också göra programmet tydligare.
Else-del i if-sats
Om villkoret temperatur < MAMMAS_FRYSPUNKT är False händer ingenting alls när man kör programmet. Det är trist programmering. Mamma vill gärna ha en uppmuntrande utskrift då och bygger ut if-satsen så här:
MAMMAS_FRYSPUNKT=5 temperatur = input("Ge utetemperatur: ") if temperatur < MAMMAS_FRYSPUNKT: print "Ta på dej en halsduk, lille vän!" else: print "Mammas gullgubbe slipper halsduk!"
Detta program kommer att se ut så här på skärmen:
Ge utetemperatur: 2 Ta på dej en halsduk, lille vän!
eller
Ge utetemperatur: 17 Mammas gullgubbe slipper halsduk!
Satserna efter else kommer alltså att utföras när villkoret i if-satsen är False.
Flera villkor
Plötsligt kommer mamma på att det kan bli ännu kallare och vill ha en tredje utskrift om temperaturen är under noll.
MAMMAS_FRYSPUNKT = 5 CELSIUS_FRYSPUNKT = 0 temperatur = input("Ge utetemperatur: ") if temperatur < CELSIUS_FRYSPUNKT: print "Ta på dej halsduk och mössa!" elif temperatur < MAMMAS_FRYSPUNKT: print "Ta på dej en halsduk!" else: print "Mammas gullgubbe slipper halsduk!"
Detta program kommer att se ut så här på skärmen:
Ge utetemperatur: 3 Ta på dej en halsduk!
eller
Ge utetemperatur: 17 Mammas gullgubbe slipper halsduk!
eller
Ge utetemperatur: -2 Ta på dej halsduk och mössa!
Hur många villkor som helst kan kombineras med hjälp av elif. Villkoren kontrolleras i tur och ordning, uppifrån och ned. Det första villkor som blir True får programmet att fortsätta exekveringen på de närmast följande indenterade satserna efter kolon fram till nästa icke-indenterade sats. Därefter hoppas resten av if-satsen över. Om inget villkor blir True (och endast då) utförs de indenterade satserna efter else.