Mönsterkortet

Det här är ett referensdokument, kom hit när du behöver minnas hur ett mönster ser ut. Kör exemplen direkt på sidan, ändra värdena och se vad som händer. Mönstren är ordnade efter när de introduceras i kursen, så första besöket är en rundtur, inte en läsläxa: förstår du bara det första mönstret är allt som det ska. Kortet växer i takt med dig, och varje del skickar dig hit när ett nytt mönster är ditt.

Hur du läser en uppgift

Innan du skriver kod, ställ dig tre frågor:

1. Behöver jag spara något? Tillståndsvariabler
2. Behöver jag upprepa något? Loopar
3. Behöver jag välja något? Villkor

De flesta program kombinerar flera av dessa för att nå sitt mål. När du ser ett mönster i en uppgift, gå hit och hitta det. Det är troligen redan namngivet och beskrivet.

1. Inläsning

Inläsaren

“Fråga användaren om ett värde och lagra det med rätt datatyp.”

Editor

Redo.

input() returnerar alltid str. Glömmer du konvertera kraschar matematiken.

2. Villkor

Klassificeraren

“Tilldela en kategori utifrån var ett värde ligger i ett intervall.”

Editor

Redo.

Ordningen spelar roll, kontrollera alltid det strängaste villkoret först.

Kombinationsvillkoret

“Kontrollera att flera krav uppfylls samtidigt, eller att minst ett gör det.”

if ålder >= 18 and har_biljett:
    print("Välkommen.")

if är_student or är_pensionär:
    print("Rabatt beviljad.")

if ålder >= 18 and (är_student or är_anställd):
    print("Åtkomst beviljad.")

Med and måste båda villkoren stämma, med or räcker det att ett gör det. Parenteserna i sista exemplet gör kombinationen tydlig att läsa.

Standardvärdet

“Använd ett normalvärde om inget särskilt villkor stämmer.”

Editor

Redo.

3. Loopar

Vet du hur många gånger?         -> for i in range(n)
Har du en samling att gå igenom? -> for item in lista
Vet du när det ska sluta?        -> while villkor
Är det användaren som bestämmer? -> while True + break
Upprepar du tills det lyckas?    -> while True + try/except + return

N gånger-mönstret

Editor

Redo.

Tills-mönstret

Editor

Redo.

Menymönstret

Editor

Redo.

Samlings-mönstret

Se Sökmönstret och Filtret under Listor nedan, båda itererar över en samling med for item in lista:.

Ackumuleringsmönstret

Se Räknaren och Samlaren under Tillståndsvariabler nedan: en tillståndsvariabel utanför loopen som uppdateras varje varv. Det är loopens vanligaste jobb.

4. Listor

Samlingsbyggaren

“Bygg upp en lista dynamiskt under programkörning.”

Editor

Redo.

Filtret

“Bygg en ny lista med bara de element som uppfyller ett krav.”

Editor

Redo.

Sökmönstret

“Hitta det första elementet som stämmer med ett krav.”

Editor

Redo.

Transformationen

“Skapa en ny lista där varje element är en bearbetad version av originalet.”

Editor

Redo.

5. Tillståndsvariabler

Variabler som sätts upp utanför en loop och uppdateras inuti.

Räknaren

“Håll koll på hur många gånger något har hänt.”

Editor

Redo.

Samlaren

“Räkna ihop ett totalt värde steg för steg.”

Editor

Redo.

Om startvärdet sätts inuti loopen nollställs det varje varv.

Flaggan

“Kom ihåg om något har hänt, för att kolla svaret efteråt.”

Editor

Redo.

Jämför med Sökmönstret under Listor ovan: koden är nästan identisk, men Flaggan minns bara att något hände, Sökmönstret minns vad som hittades.

Toppnoteraren

“Håll koll på det högsta eller lägsta värdet hittills.”

Editor

Redo.

Starta med lista[0], inte 0: om listan innehåller negativa tal är 0 fel startvärde.

6. Funktioner

Introduceras i Din första funktion.

Beräknaren

“Ta emot värden, beräkna något, returnera svaret.”

Editor

Redo.

Kör exemplet: mittenanropet ger 0, inte -10. max(0, ...) garanterar att skadan aldrig blir negativ.

Presentatören

“Samla utskriftslogik på ett ställe, skriver ut, returnerar inget.”

Editor

Redo.

Valideringsfunktionen

“Kontrollera om något är giltigt, returnera True eller False.”

Editor

Redo.

Formatiseraren

“Ta ett eller flera värden och returnera en färdig sträng.”

Editor

Redo.

Vakten

“Kontrollera ett krav tidigt. Om det inte uppfylls, avsluta. Normal kod följer orörd.”

Editor

Redo.

Valideraren

“Fråga om och om igen tills ett giltigt svar ges.”

Editor

Redo.

Kopiera den fritt in i alla projekt. Den byggs i Kraschsäkring.

7. Filer & persistent lagring

Introduceras i Filen som minns.

Persistent lagring

“Spara data till disk och ladda det vid nästa start.”

FILNAMN = "data.txt"

def ladda():
    try:
        with open(FILNAMN, "r", encoding="utf-8") as fil:
            return fil.read().splitlines()
    except FileNotFoundError:
        return []

def spara(data):
    with open(FILNAMN, "w", encoding="utf-8") as fil:
        for rad in data:
            fil.write(rad + "
")

Anropa ladda() vid start, spara() precis innan avslut. Kräver filsystem, kan inte köras i sandlådan.

8. GUI & tillstånd

Introduceras i Fönsterhanteraren.

GUI-tillståndsmönstret

“Håll tillstånd globalt, uppdatera i funktioner, synka GUI i en separat funktion.”

# --- Tillstånd ---
spelare_hp = 100
fiende_hp = 80

# --- Logik ---
def attack():
    global spelare_hp, fiende_hp
    # ... beräkna skada ...
    uppdatera_gui()

# --- Visning ---
def uppdatera_gui():
    spelare_etikett.config(text=f"HP: {spelare_hp}")
    fiende_etikett.config(text=f"Fiende HP: {fiende_hp}")

Kräver tkinter, kan inte köras i sandlådan.

Hur mönster kombineras

De flesta program kombinerar flera mönster. Brawl kombinerar:

Tills-mönstret          -> while spelare_hp > 0 and fiende_hp > 0
  Samlaren              -> total_skada ackumuleras varje tur
  Klassificeraren       -> if hp <= 0 avgör vinnare
  Inläsaren             -> input() för spelarens val
Valideraren             -> läs_int() för säker inmatning

Inventoryt får minne lägger till:

Persistent lagring      -> ladda/spara inventoryt mellan körningar
Vakten                  -> try/except vid den första körningen

Ser du ett mönster inuti ett annat, det stämmer. Namnge båda.