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.”
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.”
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.”
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
Redo.
Tills-mönstret
Redo.
Menymönstret
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.”
Redo.
Filtret
“Bygg en ny lista med bara de element som uppfyller ett krav.”
Redo.
Sökmönstret
“Hitta det första elementet som stämmer med ett krav.”
Redo.
Transformationen
“Skapa en ny lista där varje element är en bearbetad version av originalet.”
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.”
Redo.
Samlaren
“Räkna ihop ett totalt värde steg för steg.”
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.”
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.”
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.”
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.”
Redo.
Valideringsfunktionen
“Kontrollera om något är giltigt, returnera True eller False.”
Redo.
Formatiseraren
“Ta ett eller flera värden och returnera en färdig sträng.”
Redo.
Vakten
“Kontrollera ett krav tidigt. Om det inte uppfylls, avsluta. Normal kod följer orörd.”
Redo.
Valideraren
“Fråga om och om igen tills ett giltigt svar ges.”
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.