Osa 8

Objekt och metoder

Detta är första delen av fortsättningskursen i programmering. Materialet är designat för att användas med programmeringsmiljön Visual Studio Code, precis som i den föregående kursen (Grundkurs i programmering). Ifall du inte använt Visual Studio Code tidigare, hittar du installationsinstruktionerna här och en introduktion till programmeringsomgivningen från förra kursen här.

I grundkursen i programmering lade vi märke till att det ofta är logiskt att gruppera relaterade data tillsammans i våra program. Ifall vi till exemepl skulle förvara information om en bok skulle det vara logiskt att använda oss av en tupel eller en ordlista för att organisera informationen i en och samma datastruktur.

Lösningen kunde se ut så här när man använder en tupel:

namn = "Kodningsboken"
författare = "Peter Python"
ar = 1992

# Vi sammanställer dessa i en ordlista
bok = (namn, författare, ar)

# Vi skriver ut bokens namn
print(bok[0])

I ett fall som detta är fördelen med att använda en ordlista att vi kan använda strängar istället för numeriska index som nycklar. Vi kan alltså ge beskrivande namn till den typ av element som lagras i datastrukturen:

namn = "Kodningsboken"
forfattare = "Peter Python"
ar = 1992

# Slår ihop till en ordlista
bok = {"namn": namn, "författare": forfattare, "år": ar}

# Vi skriver ut bokens namn
print(bok["namn"])

I båda fallen så skapar vi ett nytt objekt. Inom programmering har termen en specifik betydelse: ett objekt är en självständig (eller oberoende) helhet, som i detta fall innehåller data som på något vis är relaterade. Att ett objekt är oberoende eller självständigt betyder att ändringar som görs i ett objekt inte påverkar andra objekt.

Ifall vi skulle skapa två strukturellt identiska representationer av böcker med hjälp av ordlistor och identiska nycklar, skulle ändringar som görs i den ena inte påverka den andra:

bok1 = {"namn": "Den gamle och Python", "författare": "Ernest Pythonson", "år": 1952}
bok2 = {"namn": "Sju Python", "författare": "Aleksis Python", "år": 1894}

print(bok1["namn"])
print(bok2["namn"])

bok1["namn"] = "Ett nytt namn"

print(bok1["namn"])
print(bok2["namn"])
Exempelutskrift

Den gamle och Python Sju Python Ett nytt namn Sju Python

8 1 1

Objekt och metoder

Man kan komma åt data som lagras i ett objekt genom olika metoder. En metod är en funktion som opererar på ett specifikt objekt som den är kopplad till. Vi kan skilja på metoder och "vanliga" funktioner genom att se på hur de anropas, eftersom metoder används med punktnotation: först skriver man namnet på det objekt som avses, sedan en punkt och till sist metodens namn, åtföljt av argument ifall sådana finns. Till exempel returnerar metoden values alla värden som är lagrade i ett objekt av typen ordlista eller dict:

# detta skapar ett objekt av typen ordlista med namnet bok
bok = {"namn": "Den gamle och Python", "författare": "Ernest Pythonson", "år": 1952}

# Vi skriver ut alla värden
# Metodanropet values() skrivs efter namnet på variabeln
# Kom ihåg punktnotation!
for varde in bok.values():
    print(varde)
Exempelutskrift

Den gamle och Python Ernest Pythonson 1952

På samma sätt opererar en strängmetod på det strängobjekt som den anropas för. Några exempel på strängmetoder är count och find:

namn = "Påhittige Per"

# Skriv ut antalet P som förekommer
print(namn.count("P"))

# Antalet P som hittas i en annan sträng
print("Påhittade Praktiska Prepositioner".count("P"))

# Indexen av delsträngen Per
print(namn.find("Per"))

# Denna sträng har ingen matchande delsträng
print("Helt annan sträng".find("Per"))
Exempelutskrift

2 3 10 -1

Strängmetoder returnerar värden, men ändrar inte på strängarnas innehåll eftersom strängar i Python är oföränderliga. Detta gäller däremot inte alla objekt och metoder. Listor i Python är föränderliga, alltså kan listmetoder ändra innehållet i den lista som den anropas för utan att skapa en ny referens eller ett nytt objekt.

lista = [1,2,3]

# Vi lägger till några element
lista.append(5)
lista.append(1)

print(lista)

# Vi tar bort ett element från början
lista.pop(0)

print(lista)
Exempelutskrift

[1, 2, 3, 5, 1] [2, 3, 5, 1]

Programmeringsövning

Minsta medeltalet

Poäng:
Loading...

/

Loading...

Skapa funktionen minsta_medeltalet(person1: dict, person2: dict, person3: dict), som får tre ordlistor som argument.

Varje ordlistsobjekt innehåller värden som refererar till följande nycklar:

  • "namn": deltagarens namn
  • "resultat1": deltagarens första resultat (heltal mellan 1...10)
  • "resultat2": deltagarens andra resultat (liksom ovan)
  • "resultat3": deltagarens tredje resultat (liksom ovan)

Funktionen ska beräkna medelvärdet av de tre resultaten för varje deltagare och sedan returnera den deltagare vars medelresultat är minst. Returvärdet bör vara hela det ordlistsobjekt som innehåller information om deltagaren.

Du kan anta att endast en deltagare har det minsta medeltalet.

Ett exempel på funktionen:

person1 = {"namn": "Ella", "resultat1": 2, "resultat2": 3, "resultat3": 3}
person2 = {"namn": "Bella", "resultat1": 5, "resultat2": 1, "resultat3": 8}
person3 = {"namn": "Stella", "resultat1": 3, "resultat2": 1, "resultat3": 1}

print(minsta_medeltalet(person1, person2, person3))
Exempelutskrift

{'namn': 'Stella', 'resultat1': 3, 'resultat2': 1, 'resultat3': 1}

Programmeringsövning

Radernas summor

Poäng:
Loading...

/

Loading...

I Python är varje värde som lagras i en variabel en referens till ett objekt, så varje värde som lagras i en lista är också en referens till ett objekt. Detta gäller även när vi modellerar en matris (dvs. en tabell, tvådimensionell lista): varje värde i listan på högsta nivån är en referens till en annan lista, som i sin tur innehåller referenser till de objekt som representerar elementen i matrisen.

Skapa funktionen radernas_summor(matris: list), som tar en heltalsmatris som argument.

Funktionen ska lägga till ett nytt element på varje rad i matrisen. Detta element innehåller summan av de andra elementen på den raden. Funktionen har inget returvärde. Den bör modifiera matrisen i parametern.

Ett exempel på funktionen i användning:

matris = [[1, 2], [3, 4]]
radernas_summor(matris)
print(matris)
Exempelutskrift

[[1, 2, 3], [3, 4, 7]]

Du har nått slutet av den här delen! Fortsätt till nästa del:

Se dina poäng genom att klicka på cirkeln nere till höger av sidan.