Se lecture 1
Följ Conditionals och pausa för att förutsäga vilken gren som körs.
Öppna Harvard vecka 1 ↗Lektion 1 · Cirka 45 min genomgång
Ett villkor är en fråga som blir True eller False. Svaret avgör vilken kodgren — en av programmets möjliga vägar — som körs.
Kontrollflöde är ordningen och vägen genom programmet. Här får en första if-sats välja väg; varje del förklaras strax.
alder = 20
if alder >= 18:
print("Du är myndig.")Du är myndig.Före genomgången
Harvards lecture 1 är cirka 56 minuter. Se den före lektionen och använd sidan som svensk genomgång, repetition och uppslagsverk. Vi bygger vidare på variabler, input, int, strängmetoder och egna funktioner från lektion 0.
Följ Conditionals och pausa för att förutsäga vilken gren som körs.
Öppna Harvard vecka 1 ↗Skapa lektion_01 i kursmappen och öppna den i VS Code.
Skriv villkoren själv. Träna särskilt kolon, indrag och i vilken ordning grenarna prövas.
Ett villkor är inte en gissning utan ett uttryck som Python räknar ut till exakt ett av två booleska värden: True eller False. Det värdet styr vilken kodgren som körs.
Dagens karta
Varje nytt begrepp introduceras innan det används i ett större exempel.
7 min
8 min
8 min
8 min
7 min
7 min
Sant eller falskt
Ett uttryck är kod som Python räknar ut till ett värde. Ett booleskt uttryck ger datatypen bool, vars två möjliga värden skrivs True och False med stor begynnelsebokstav.
En jämförelseoperator jämför två värden. Uttrycket alder >= 18 frågar ”är värdet i alder större än eller lika med 18?”. Python svarar med ett bool-värde.
= och == betyder olika sakerEtt likhetstecken = är tilldelning: ett namn får ett värde. Två likhetstecken == är en jämförelse: Python undersöker om två värden är lika.
True och False.>=.alder = 17
print(alder >= 18)
print(alder != 18)FalseTrue<mindre än>större än<=mindre än eller lika med>=större än eller lika med==lika med!=inte lika medDen första förgreningen
if kör kod när villkoret är santif betyder ”om”. Python utvärderar villkoret efter nyckelordet och kör det indragna kodblocket endast om resultatet är True.
temperatur = 27
if temperatur > 25:
print("Ta med vatten.")
print("Programmet är klart.")Ta med vatten.if inleder villkorssatsen.temperatur > 25 är det booleska uttrycket.: markerar att ett indraget kodblock följer.En eller flera rader med samma indrag bildar ett kodblock. Den sista print-raden saknar indrag och ligger därför utanför villkoret; den körs oavsett om villkoret är sant eller falskt.
I Python är indrag inte dekorativ formatering. Fel indrag kan ge IndentationError eller göra att en rad hamnar i fel gren. Låt VS Code infoga blankstegen efter kolonet och blanda inte tabbar och blanksteg.
Flera möjliga vägar
elif och else skapar en kedjaelif betyder ”annars om” och har ett eget villkor. else betyder ”annars” och har inget villkor: den fångar alla fall som inte redan har valts.
Python prövar kedjan uppifrån och ned. När ett villkor blir True körs dess block och resten av samma if–elif–else-kedja hoppas över. Grenarna är därför ömsesidigt uteslutande: exakt en av dem körs när kedjan avslutas med else.
Ordningen är en del av logiken. Börja med det mest specifika eller högsta gränsvärdet. Om poang >= 60 stod först skulle även 95 välja grenen för E.
Tar emot: ett eller flera villkor. Gör: testar dem uppifrån. Resultat: kör den första sanna grenen, eller else om ingen tidigare gren passar.
poang = 85
if poang >= 90:
betyg = "A"
elif poang >= 80:
betyg = "B"
elif poang >= 70:
betyg = "C"
elif poang >= 60:
betyg = "E"
else:
betyg = "F"
print(betyg)Bif x > 0:
print("positivt")
if x % 2 == 0:
print("jämnt")Frågorna är oberoende. Talet 4 är både positivt och jämnt, så båda blocken körs.
if x > 0:
print("positivt")
elif x < 0:
print("negativt")
else:
print("noll")Alternativen beskriver samma fråga och utesluter varandra.
Kombinera villkor
and, or och notDe logiska operatorerna arbetar med booleska värden. and kräver att båda delarna är sanna, or att minst en del är sann och not vänder på ett bool-värde.
FalseFalseFalseFalseFalseTrueFalseTrueTrueFalseFalseTrueTrueTrueTrueTruetemperatur = 24
if temperatur >= 20 and temperatur <= 30:
print("Behaglig temperatur")
# Samma intervall, tydligare i Python:
if 20 <= temperatur <= 30:
print("Behaglig temperatur")Behaglig temperaturPython tillåter kedjade jämförelser. 20 <= temperatur <= 30 betyder att båda gränserna ingår. Operatorn <= gör intervallet inklusivt; med < skulle ändpunkten inte ingå.
not är användbart när ett negativt tillstånd är tydligast: if not inloggad:. Om inloggad är False blir hela uttrycket True.
Python utvärderar logiska uttryck från vänster. I A and B behöver B inte kontrolleras om A redan är falskt. I A or B behöver B inte kontrolleras om A redan är sant. Detta kallas kortslutning.
strip() tar bort blanktecken i början och slutet och lämnar en ny sträng. lower() lämnar en ny sträng med gemener. Metoderna startswith(prefix) och endswith(suffix) undersöker början respektive slutet och lämnar ett bool-värde.
När metoder kedjas arbetar varje metod med föregående returvärde. svar.strip().lower() normaliserar därför både omgivande blanksteg och skiftläge innan jämförelsen görs.
halsning = input("Hälsning: ").strip().lower()
if halsning.startswith("hello"):
print("$0")$0Resten blir ett test
Modulooperatorn % lämnar resten efter division. För heltal kan resten användas för att formulera ett villkor, exempelvis om ett tal är jämnt.
8 % 2 ger 0, eftersom 8 kan delas i hela tvågrupper. 9 % 2 ger 1. Ett jämnt heltal uppfyller därför villkoret tal % 2 == 0; annars är talet udda.
En funktion som besvarar en ja/nej-fråga genom att returnera True eller False kan kallas en boolesk funktion. Namnet börjar ofta med is_ eller has_.
Jämförelsen är redan ett bool-värde. Funktionen behöver därför inte skapa True och False med en extra if-kedja.
def is_even(tal):
return tal % 2 == 0
tal = 8
if is_even(tal):
print(f"{tal} är jämnt")
else:
print(f"{tal} är udda")8 är jämntPython kan även tolka vissa andra värden som sanna eller falska — exempelvis är noll och tomma strängar falsy, medan många andra värden är truthy. I början är en uttrycklig jämförelse ofta lättare att läsa när avsikten annars är oklar. Använd if namn: när du medvetet menar ”strängen är inte tom”, inte som en genväg du inte kan förklara.
Ett värde, flera mönster
match passar för tydliga alternativmatch jämför ett värde med olika case-mönster. Den första matchande grenen körs. Operatorn | samlar flera alternativ och case _ är en reservgren som matchar allt annat.
namn = input("Namn: ").strip()
match namn:
case "Harry" | "Hermione" | "Ron":
print("Gryffindor")
case "Draco":
print("Slytherin")
case _:
print("Okänt hus")Gryffindormatch?Använd match när ett och samma värde ska jämföras med flera tydliga alternativ eller mönster. Använd oftast if/elif för intervall, olika variabler eller mer sammansatta booleska uttryck.
Tecknet | betyder ”något av dessa mönster” inne i en case-rad. Det är inte samma syntax som den logiska operatorn or. Understrecket i case _ är en wildcard, en reserv som fångar alla återstående värden.
En guard lägger ett extra villkor på ett mönster: case tal if tal > 0:. För nybörjarkod är en vanlig if-kedja ofta tydligare när det främst är villkoret, inte mönstret, som är viktigt.
import math
summa = 0.1 + 0.2
print(summa == 0.3)
print(math.isclose(summa, 0.3))FalseTrueMånga decimaltal kan inte representeras exakt binärt. math.isclose(a, b) testar om två flyttal är tillräckligt nära varandra.
def main():
print("Programmet körs")
if __name__ == "__main__":
main()Python sätter specialvariabeln __name__ till "__main__" när filen körs direkt. Villkoret anropar då main, men inte när filen importeras av en annan fil.
Efter genomgången
Läs Harvards aktuella specifikation. Planera beslutsgrenarna och testa gränsfall; fullständiga lösningar visas inte här.
Normalisera text och använd or eller en tydlig uppsättning accepterade svar.
Använd strip, lower och startswith. Pröva det mest specifika fallet först.
Undersök filändelsen utan hänsyn till skiftläge och använd en tydlig standard för okända typer.
Öppna uppgiften ↗Testa .jpg, .jpeg, .pdf, blandade versaler och en okänd ändelse.split() utan argument delar vid blanktecken och lämnar en lista. Packa upp tre delar och välj rätt beräkning.
Skriv convert, använd inklusiva intervall och koppla ihop funktionen med huvudprogrammet.
Bestäm hur blanksteg och skiftläge ska hanteras.
Skriv pseudokod för varje möjligt resultat.
Placera specifika fall före bredare fall.
Prova precis under, på och över varje gräns.
Säg varför just den grenen valdes.
Kursmappens äldre exempel är användbara för resonemang, men Harvards aktuella uppgiftssida anger vad programmet ska göra. Använd därför alltid länken till respektive uppgift som kravspecifikation.
Kontrollera förståelsen
Gå tillbaka till motsvarande avsnitt om du inte kan svara utan att köra programmet.
= från === tilldelar ett värde. == jämför två värden och ger True eller False.
Kolonet inleder ett block; rader med samma indrag hör till samma gren.
Fristående if prövas oberoende. En kedja väljer den första sanna grenen.
and kräver båda, or minst en och not inverterar bool-värdet.
start <= x <= slut inkluderar båda gränserna.
tal % 2 == 0 är sant när division med 2 ger rest noll.
match passar ett värde mot tydliga alternativ; komplexa villkor uttrycks ofta tydligare med if.
Jag provar varje gren och gränsfall precis under, på och över en gräns.
Fördjupning och original
Genomgången kombinerar kursens notebook, övningar och presentation med Harvards aktuella lecture 1. Harvards sidor är på engelska.