Laboration 2 - Funktioner och felsökning
I denna laboration kommer ni arbeta med funktioner och procedurer, något som är en förutsättning för att kunna skriva bra och läsbar kod. Ni kommer att lära er felsöka er egen och andras kod, något som är en förutsättning när ni sedan skriver större program eller applikationer där ni inte alltid kan få en bra överblick över all den kod som finns. Ni kommer även introduceras till enhetstestning, vilket är en metod för att förebygga fel och på så vis minimera den tid ni spenderar med att felsöka er kod.
Inlämningsuppgifter
Redovisning av referencer, kopior och omgivning
Lös denna uppgift först och redovisa den för en assistent. Det är ok att börja arbeta med resten av uppgifterna nedan innan ni redovisat men att ni har förståelsen som denna uppgift ska ge och testa är viktigt för uppgiften nedan.
Python tutor är ett webb-baserat verktyg som låter användaren visualisera körningen av ett pythonprogram. Man kan se vilka funktioner och variabler som är definerade och i vilket scope dessa befinner sig. I denna uppgift ska ni producera program som efterliknar de givna bilderna. Ni får skriva koden lokalt eller i pythontutor men behöver visa i pythontutor att det fungerar för assistenten.
Bild 1: Två variabler som är samma lista.

Bild 2: Två variabler som är olika listor. Där den första listan kopieras till den andra variabeln.

Bild 3: Samma lista i två olika omgivningar.

Bild 4: Olika listor i två olika omgivningar genom kopiering.

Uppgift 2a - Funktioner för ASCII art
Strukturera er lösning på nedanstående problem så att de kan dra nytta av gemensamma lösningar för ett gemensamt delproblem.
Skriv en funktion frame som accepterar en textsträng som indata och skriver ut textsträngen inramad med asterisker.
Körexempel:
>>> frame("Välkommen till Python")
*************************
* Välkommen till Python *
*************************
Skriv en funktion triangle som accepterar ett heltal som indata och skriver ut en triangel av asterisker med den höjd som heltalet anger.
Körexempel:
>>> triangle(3)
*
***
*****
Skriv en funktion flag som accepterar ett heltal som indata och skriver ut en flagga av asterisker 21 gånger bredare än den storlek som heltalet anger. Som en utmaning kan man skriva så att ändringarna blir proportionella över hela flagan, det vill säga att även höjden ökar med det inmatade talet.
Körexempel:
>>> flag(1)
********** **********
********** **********
********** **********
********** **********
********** **********
********** **********
********** **********
********** **********
Uppgift 2b - Inköpslistan
Skriv en uppsättning funktioner ni kan använda från Python-prompten som tillsammans utgör ett program som hanterar en inköpslista.
Körexempel:
>>> python3 -i lab2b.py
>>> slist = create_shopping_list()
>>> shopping_list(slist)
1. Kurslitteratur
2. Anteckningsblock
3. Penna
>>> shopping_add(slist)
Vad ska läggas till i listan? Väska
>>> shopping_list(slist)
1. Kurslitteratur
2. Anteckningsblock
3. Penna
4. Väska
>>> shopping_remove(slist)
Vilken sak vill du ta bort ur listan? 2
>>> shopping_list(slist)
1. Kurslitteratur
2. Penna
3. Väska
>>> shopping_edit(slist)
Vilken sak vill du ändra på? 2
Vad ska det stå istället för "Penna"? Anteckningsblock & Penna
>>> shopping_list(slist)
1. Kurslitteratur
2. Anteckningsblock & Penna
3. Väska
Uppgift 2c - Huvudprogram till inköpslistan
Skapa nu med hjälp av dessa funktioner ett huvudprogram som beter sig på följande sätt:
>>> python3 lab2b.py
Välkommen till shoppinglistan, välj ett alternativ:
1. Skriv ut en existerande lista
2. Lägg till ett föremål i listan
3. Ta bort ett föremål ur listan
4. Ändra ett föremål i listan
5. Avsluta
1
1. Kurslitteratur
2. Anteckningsblock
3. Penna
1. Skriv ut en existerande lista
2. Lägg till ett föremål i listan
3. Ta bort ett föremål ur listan
4. Ändra ett föremål i listan
5. Avsluta
2
Vad ska läggas till i listan? Väska
1. Skriv ut en existerande lista
2. Lägg till ett föremål i listan
3. Ta bort ett föremål ur listan
4. Ändra ett föremål i listan
5. Avsluta
1
1. Kurslitteratur
2. Anteckningsblock
3. Penna
4. Väska
1. Skriv ut en existerande lista
2. Lägg till ett föremål i listan
3. Ta bort ett föremål ur listan
4. Ändra ett föremål i listan
5. Avsluta
3
Vilken sak vill du ta bort ur listan? 2
1. Skriv ut en existerande lista
2. Lägg till ett föremål i listan
3. Ta bort ett föremål ur listan
4. Ändra ett föremål i listan
5. Avsluta
1
1. Kurslitteratur
2. Penna
3. Väska
1. Skriv ut en existerande lista
2. Lägg till ett föremål i listan
3. Ta bort ett föremål ur listan
4. Ändra ett föremål i listan
5. Avsluta
4
Vilken sak vill du ändra på? 2
Vad ska det stå istället för "Penna"? Anteckningsblock & Penna
1. Skriv ut en existerande lista
2. Lägg till ett föremål i listan
3. Ta bort ett föremål ur listan
4. Ändra ett föremål i listan
5. Avsluta
1
1. Kurslitteratur
2. Anteckningsblock & Penna
3. Väska
1. Skriv ut en existerande lista
2. Lägg till ett föremål i listan
3. Ta bort ett föremål ur listan
4. Ändra ett föremål i listan
5. Avsluta
5
Hej då!
Som en extra uppgift kan du göra programmet bättre genom att tömma terminalen mellan varje kommando, då blir det lättare att se vad som händer. Det kanske finns funktionalitet för det i os-modulen?
Uppgift 2d - Teori att fundera över innan ni redovisar för assistent
- Förklara hur listan ändras utan att ett returvärde används från exempelvis funktionen shopping_add()
- Hur kan ni skapa en till shoppinglista utifrån den shoppinglistan ni redan skapat i körexemplet ovan? Hur kan ni se till att ni kan ändra i den ena listan utan att den andra påverkas?
Krav
Nedan följer de krav som finns på hur ni löser denna laboration som är utöver det som framgår i själva instruktionen:- Alla körexempel ovan visas som körexempel i interpreterat läge. Vi förväntar oss vid redovisning att det finns lämpliga huvudprogram som demonstrerar funktionaliteten i varje del. Detta är för att spara tid vid redovisning.
- Strikta krav rörande er förståelse för funktioner, parametrar och returvärden finns i denna laboration. Se till att ni förstår vad ni gör och inte att det bara fungerar.
Python
Emacs
Laborationer och material
Sidansvarig: Pontus Haglund
Senast uppdaterad: 2024-09-04