Referenser, objekt, metoder och muterbarhet
Skriv lösningarna till uppgifterna i en och samma fil och testa koden själv innan du använder rättningsskriptet. Att kunna testa sin kod är en viktig del av att programmera!
Att lära dig från uppgifterna
- Förstå vad metoder är och hur de anropas.
- Förstå skillnaden mellan muterbara och icke muterbara datatyper i Python.
- Förstå hur muterbara datastrukturer kan bearbetas i Python, med datatypen
list
som exempel.
Man kan få max 90 poäng och för att få godkänt krävs 60 poäng (80 för väl godkänt). Försök dock att lösa alla uppgifter då inte alla fel upptäcks av rättningsskriptet. Om ni har lite marginal kan ni kanske bli godkända även om assistenten som rättar hittar något sådant fel.
Uppgift 7.1
7.1.1 (5p)
Skriv en funktion first_word(s)
som tar in en sträng och returnerar det första
ordet i strängen.
Exempel
|
|
7.1.2 (5p)
Skriv en funktion remove_spaces(s)
som tar in en sträng och tar bort alla avslutande mellanslag.
Exempel:
|
|
7.1.3 (5p)
Skriv en funktion join_list(values)
som tar in en lista där elementen är strängar och som returnerar en sträng med :
mellan varje element.
Exempel:
|
|
7.1.4 (5p)
Skriv en funktion swap_case(word)
som tar en sträng som argument. Om strängen består av endast gemener skall funktionen returnera ordet med versal i början. Om strängen har versal i början men i övrigt består av gemener skall funktionen returnera ordet som endast versaler. Om ordet består av endast versaler skall funktionen returnera ordet med enbart gemener. I övriga fall skall ordet returneras oförändrat. Lös uppgiften med hjälp av strängmetoder och en villkorssats, det är inte tillåtet att iterera över strängen eller accessa enskilda tecken eller delsträngar med subskript (dvs. index eller slice).
Exempel
|
|
Uppgift 7.2
7.2.1 (5p)
Skriv en funktion append_n_to_list(values, a_value)
som tar in en lista och ett element och ändrar listan values
så att a_value
ligger sist. Returnera också den ändrade listan.
Exempel
|
|
Ledtråd: Använd list-metoden .append()
. list.append()
7.2.2 (5p)
Skriv en funktion insert_4_on_index_3(values)
som tar in en lista och skjuter in heltalet 4
på index 3 i ursprungslistan. Elementen från och med index 3 ska bli förskjutna med ett steg. Returnera den modifierade listan.
Exempel:
|
|
Ledtråd: Använd list-metoden .insert()
. list.insert()
7.2.3 (5p)
Skriv en funktion extend_list_with_vals(values1, values2)
som tar in två listor och lägger elementen från values2
sist i values1
. Returnera den ändrade listan.
Exempel
|
|
Ledtråd: Använd list-metoden .extend()
. list.insert()
7.2.4 (5p)
Skriv en funktion remove_from_third_in_list(values)
som tar bort alla
element från och med det tredje elementet i values
och returnerar den modifierade listan.
Ledtråd: https://docs.python.org/3/tutorial/datastructures.html#the-del-statement
Exempel:
|
|
Reflektion
Vad är den stora skillnaden mellan strängmetoderna i första uppgiften och listmetoderna i den andra uppgiften?
Ledtråd: Vad hände med objektet till vilket meddelandet skickades? Dvs. värdet motsvarande obj
i obj.method()
.
Uppgift 7.3 (5p)
Skriv funktionen multiply_for_each(values, multiplier)
som ändrar och returnerar values
med alla värden multiplicerade med multiplier
.
OBS! I denna uppgift är det viktigt att du ändrar på listan values
och inte skapar en ny lista som du lägger värdena i.
Ledtråd 1: Här använder man lämpligen en loop.
Exempel
|
|
Uppgift 7.4
7.4.1 (5p)
Skriv en funktion swap(lst, idx1, idx2)
som tar en lista och två index och byter plats på värdena på de två indexen. Använd pythons tuple assignment. Funktionen ska inte returnera något.
Ledtråd: I Python kan vi göra följande operation för att tilldela flera referenser samtidigt tupel1 = tupel2
där tupel1
innehåller ett antal referenser och tupel2
samma antal värden eller referenser.
Exempel
|
|
7.4.2 (5p)
Skriv funktionen reverse_list_iter(lst)
och använd rekursion för att lösa problemet. Lämpligtvis med hjälp av en default-parameter eller inre funktion för att hålla koll på index.
Exempel
|
|
7.4.3 (5p)
Skriv funktionen reverse_list_iter(lst)
och använd en lämplig loop för att lösa problemet.
Exempel
|
|
När du skapat någon av reverse_list
-funktionerna, prova att skicka en tupel till den. Vad händer och förstår du varför?
Tips: Läs felmeddelandet noggrant. Felmeddelanden läses alltid nerifrån och upp eftersom det viktigaste skrivs ut sist (Sidospår: Kommer du ihåg eller kan du räkna ut varför?).
Uppgift 7.5 (10p)
Skriv en funktion make_copy(lst)
som tar en lista och skapar en kopia av listan.
Du får inte använda modulen copy
eller listmetoden lst.copy
.
Tips: Skapa en ny lista och lägg till alla elementen från lst
i den.
Exempel
|
|
Uppgift 7.6 (10p)
Skriv en funktion update_sequence(seq, string)
som tar en sekvens seq
(tupel, lista eller sträng) och returnerar sekvensen med string
tillagd i slutet. Om seq
är muterbar så skall string
läggas till i seq
. Om seq
inte är muterbar så skall en ny sekvens skapas.
Exempel
|
|
Uppgift 7.7 (10p)
Skriv en funktion make_sentence(words)
som tar in en sekvens där elementen är strängar. Funktionen ska returnera en sträng som följer reglerna nedan:
- Strängen ska inledas med versal.
- Det ska vara ett mellanslag mellan varje element, förrutom framför skiljetecken (
.,:;!?
). - Det ska vara en punkt på slutet, förrutom ifall sista elementet i words är
'...'
,'!'
eller'?'
.
Tänk på att vissa skiljetecken kan förekomma mer än en gång i följd.
Exempel:
|
|
Sidansvarig: Johan Falkenjack
Senast uppdaterad: 2025-08-05