Föreläsning 8
Problemlösning, programuppdelning, projektspecifikation, prototyper och versionshantering samt repetition av sammansatta datatyper
Dagens agenda
Installera och importera openpyxl
Installera openpyxl med pip3
För att installera en modul med pip skriver du:
pip3 install modulnamn
Kan vara lite krångligt för det beror på var Python är installerat…
Om det inte funkar: testa att skriva:
sudo pip3 install modulnamn
Jaha, och var tog openpyxl vägen? 🤯
Importera openpyxl
Problem…
Många får problem eftersom openpyxl inte är installerat på samma ställe som python i VS Code.
Lösning: kör programfilen (filen där du importerar openpyxl) från terminalen på din dator (inte terminalen i VS Code och inte genom att använda run-knappen).
Importera modulen som vanligt genom att skriva:
import openpyxl
Så här kan det se ut
Jag har delat min vy mellan min ”vanliga” terminal och VS Code
Större program
Problemlösning
Telefonboken
Uppgift
Skriv ett program som representerar en telefonbok där användaren kan göra följande:
Kontaktuppgifter
Anteckningar
2. Dela upp problemet
3. Gör upp en plan och skissa på en lösning
Hur ska vi strukturera upp all data?
Uppgift
Skriv ett program som representerar en telefonbok där användaren kan göra följande:
Kontaktuppgifter
Anteckningar
Skapa kontakt-objekt som sparas i ett dictionary
Skapa sedan antecknings-objekt som sparas i ett listattribut (anteckningar) i kontakt-objekten.
Påminnelse: skapa klasser
Varför har jag en __repr__-metod i Anteckningar?
3. Spara kontakt-objekt i ett dictionary
Nyckel: Kalle
-------------------
Värde: Kalle-objekt med attribut:
förnamn = ”Kalle”
efternamn = ”Anka”
telefon = ”123 456 78”
anteckningar = []
Nyckel: Ior
-------------------
Värde: Ior-objekt med attribut:
förnamn = ”Ior”
efternamn = ””
telefon = ” 122 098 83”
anteckningar = []
Nyckel: Mimmi
-------------------
Värde: Mimmi-objekt med attribut:
förnamn = ”Mimmi”
efternamn = ”Pigg”
telefon = ” 123 456 98”
anteckningar = []
3. Spara antecknings-objekt i listor �(i antecknings-attributen)
Nyckel: Mimmi
-------------------
Värde: Mimmi-objekt med attribut:
förnamn = ”Mimmi”
efternamn = ”Pigg”
telefon = ” 123 456 98”
anteckningar = [önskelista, recept]
Anteckning-objekt med attribut:
titel = ”önskelista”
datum = ”10-11-2023”
Anteckning = ”blå rosett & hundvalp”
Anteckning-objekt med attribut:
titel = ”recept”
datum = ”01-03-2010”
Anteckning = ”Maränger: socker + ägg”
3. Lösningsskiss – del 1
Main-funktionen
Programuppdelning:
Observera – main är ofta inte lång. Den ska abstrahera bort så mycket som möjligt.
3. Lösningsskiss – del 2
Meny-loop
Funktion: Ta indata från användaren och skapa ett kontakt-objekt som läggs i kontakt-dictionaryt.
Funktion: Ta indata från användaren och ta bort motsvarande kontakt-objekt ur kontakt-dictionaryt.
Funktion: Ta indata från användaren och uppdatera motsvarande kontakt-objekt ur kontakt-dictionaryt.
Funktion: Fråga användaren vilken kontaktgrupp som ska visas och loopa igenom alla kontakter (med keys-metoden) och visa alla kontakter med rätt kontaktgrupp i kontakt-dictionaryt.
Funktion: Skriv över alla kontakter från kontakt-dictionaryt till filen.
Programuppdelning
3. Lösningsskiss – del 2
Meny-loop
Funktion:
Bra att ha en repr-metod för anteckningarna
Problemlösning
Fundera över hur du skulle implementera lösningen ett tag, men vänta inte för länge. Ibland är det lättast att starta och se vad som händer.
Om du inser att du krånglat till något, tveka inte att testa en alternativ metod. Se bara till att du sparat orginalet!
Att strukturera kod
När du får kod eller har skrivit kod som är svår att följa:
Vad ska vi mer tänka på:
Projektspecifikation
Projektspecifikationen ska innehålla beskrivningar av:
Exempel på ifylld spec
Hur kan vi strukturera vår fil/filer?
Kontaktuppgifter
Anteckningar
Hur många filer tycker du att vi ska använda?
Hur ska vi strukturera datan i filen/filerna?
Det finns flera sätt att strukturera textfilen – exempel 1
Kontaktuppgifter
Anteckningar
kontakter_och_anteckningar.txt
Det finns flera sätt att strukturera textfilen – exempel 2
Kontaktuppgifter
Anteckningar
kontakter.txt
anteckningar.txt
Projektet
Labb 4
Deadline: Onsdagen 13/12
Välj projekt
Att tänka på när du väljer uppgift:
�Om du har en egen uppgiftsidé som du vill arbeta med istället så kan du prata med mig (Camilla). Det är troligtvis lättare att välja en av de givna uppgifterna eftersom du annars måste lyckas komma på en uppgift med likande svårighetsnivå som våra uppgifter (din uppgift får varken vara lättare eller svårare*)
* Vi vill att du blir klar med kursen också…
Projektspecifikationen
Om du lämnar in en projektspec senast den 5/12 så får du återkoppling på den till den 8/12 (eller tidigare).
Återkopplingen kan hjälpa dig att inte hamna på villovägar i onödan, men det är inte obligatoriskt att lämna in specen.
Prototyper
Prototypen – labb 4
En prototyp är en körbar, men inte färdig, version av programmet.
Prototypen i labb 4
Här finns en del funktionalitet. Programmet ska:
Komihåg: detta är bara en prototyp, du kan ändra saker senare (tex. Ta bort eller lägga till funktioner).
Versionshantering
Google-docs
Om du ångrar dig så kan du gå tillbaka till en tidigare version av ditt dokument.
Github
Github är programmerares google-docs. Det är ett väldigt smidigt sätt att få versionshistorik på kod!
Git är en lokal variant av versionshantering som funkar bra i programmeringssamanhang. Då finns versionerna på din dator.
Versionshistorik i denna kurs
Spara filerna smart…
Håll koll på vilken version du arbetar på genom att lägga in versionsnummret i filnamnet.
Tex: telefonbok_v1.py
Att testa något som kanske förstör filen
🡪 Spara en kopia av den och indikera att detta är ett försök till en ändring i filnamnet.
Tex: telefonbok_v1_uppdatera_kontaktinformation.py
Om testet var lyckat kan du döpa om filen till: telefonbok_v1_1.py
Om det är en stor ändring kanske det till och med blir version 2.
Labb 3
Katt- och hunddata
Deadline: Fredag 1/12