23 svar
89 visningar
destiny99 behöver inte mer hjälp
destiny99 7785
Postad: 25 okt 11:43 Redigerad: 25 okt 11:44

Def funktioner med flera parametrar

Hej!

Jag vill att utskriften ska se ut som jag skrev men facit svarar istället D) [ 0 1 ] [1] 1 2 fastän jag tänkte mig något svar som G) [0 1] ,[1 2] 2,4. Jag förstår inte, körs inte koden def funktioner innan def main? Den anropas ju?

Har du möjlighet att klippa in koden som programmeringskod (knappen {;}) istället för ett foto? Jag blir snurrig av att försöka köra den i huvudet. :-)

Laguna 30210
Postad: 25 okt 12:33

Vad menar du med det här? "körs inte koden def funktioner innan def main?"

Laguna 30210
Postad: 25 okt 12:36

Skriv ut v2_copy också så blir kanske nånting klarare.

destiny99 7785
Postad: 25 okt 12:53
Laguna skrev:

Skriv ut v2_copy också så blir kanske nånting klarare.

Jag tror jag förstår varför d) är svaret eftersom de anropar v2_copy men i print så står det vara v2 som är [1] under def main funktionen. 

destiny99 7785
Postad: 25 okt 12:55
sictransit skrev:

Har du möjlighet att klippa in koden som programmeringskod (knappen {;}) istället för ett foto? Jag blir snurrig av att försöka köra den i huvudet. :-)

def f(v1,v2,i1,i2):
    v1.append(1)
    v2.append(2)
    i1=i1+1 #denna körs inte?
    i2=i2+2 #denna körs inte heller ?
def main():
    v1=[0]
    v2=[1]
    v2_copy=v2[:]
    i1=1
    i2=2
    f(v1,v2_copy,i1,i2)
    print(v1,v2,i1,i2)
main()
sictransit 1019 – Livehjälpare
Postad: 25 okt 13:06 Redigerad: 25 okt 13:09

Jodå!

De rader du kommenterat körs visst. Läs på om reference och value types. Dina integers är value types så de i1/i2 du har inne i funktionen f() kommer att räknas upp, men det påverkar inte de du har i main().

Jag petade in en print() för att visa.

v2_copy i main kommer också att innehålla ytterligare ett element, men det påverkar inte vad som finns i v2.

def f(v1,v2,i1,i2):
    v1.append(1)
    v2.append(2)
    i1=i1+1 #denna körs inte?
    i2=i2+2 #denna körs inte heller ?
    print ("inne i f(): ", v1, v2, i1, i2)
def main():
    v1=[0]
    v2=[1]
    v2_copy=v2[:]
    i1=1
    i2=2
    f(v1,v2_copy,i1,i2)
    print("tillbaka i main innehåller v2_copy: ", v2_copy)
    print(v1,v2,i1,i2)
main()

inne i f():  [0, 1] [1, 2] 2 4
tillbaka i main innehåller v2_copy:  [1, 2]
[0, 1] [1] 1 2


** Process exited - Return Code: 0 **
Press Enter to exit terminal
destiny99 7785
Postad: 25 okt 13:29
sictransit skrev:

Jodå!

De rader du kommenterat körs visst. Läs på om reference och value types. Dina integers är value types så de i1/i2 du har inne i funktionen f() kommer att räknas upp, men det påverkar inte de du har i main().

Jag petade in en print() för att visa.

v2_copy i main kommer också att innehålla ytterligare ett element, men det påverkar inte vad som finns i v2.

def f(v1,v2,i1,i2):
    v1.append(1)
    v2.append(2)
    i1=i1+1 #denna körs inte?
    i2=i2+2 #denna körs inte heller ?
    print ("inne i f(): ", v1, v2, i1, i2)
def main():
    v1=[0]
    v2=[1]
    v2_copy=v2[:]
    i1=1
    i2=2
    f(v1,v2_copy,i1,i2)
    print("tillbaka i main innehåller v2_copy: ", v2_copy)
    print(v1,v2,i1,i2)
main()

inne i f():  [0, 1] [1, 2] 2 4
tillbaka i main innehåller v2_copy:  [1, 2]
[0, 1] [1] 1 2


** Process exited - Return Code: 0 **
Press Enter to exit terminal

Okej så det enda som ska skrivas ut är sakerna som finns i main? Jag förstår inte  varför ändringarna i v2, i1 och i2  från f funktionen inte påverkas i main? V1 blir ju exakt som v1.append(1) när vi ska skriva ut den 

sictransit 1019 – Livehjälpare
Postad: 25 okt 14:16 Redigerad: 25 okt 14:26
destiny99 skrev:

Okej så det enda som ska skrivas ut är sakerna som finns i main? Jag förstår inte  varför ändringarna i v2, i1 och i2  från f funktionen inte påverkas i main? V1 blir ju exakt som v1.append(1) när vi ska skriva ut den 

Har du koll på skillnaden mellan reference och value types? Annars är det svårt att förstå vad som händer. Du fick en länk lite tidigare, men det finns förstås en massa info därute på nätet.

Jag har bytt namn på dina argument till funktionen f(), för att man inte skall blanda ihop dem med vad som finns i main().

def f(list1,list2,int1,int2):
    list1.append(1)     # adderar element till det som referensen list1 pekar på
    list2.append(2) )   # adderar element till det som referensen list2 pekar på
    int1=int1+1         # räknar upp int1, men inte i1 i main
    int2=int2+2         # räknar upp int2, men inte i2 i main
def main():
    v1=[0]
    v2=[1]
    v2_copy=v2[:]	# kopiera innehållet i v2 till en ny lista v2_copy
    i1=1
    i2=2
    f(v1,v2_copy,i1,i2)
    print(v1,v2,i1,i2)
main()

In i funktionen f() skickar du referenser till v1 och v2_copy, samt värdena i1 och i2. Notera skillnaden!

v1 och v2_copy i main() kommer att uppdateras av f() eftersom du skickar referenser till list-objekten.

i1 och i2 i main() kommer inte att uppdateras av f() eftersom du skickar en kopia av (innehållet i) variablerna.

destiny99 7785
Postad: 25 okt 14:31
sictransit skrev:
destiny99 skrev:

Okej så det enda som ska skrivas ut är sakerna som finns i main? Jag förstår inte  varför ändringarna i v2, i1 och i2  från f funktionen inte påverkas i main? V1 blir ju exakt som v1.append(1) när vi ska skriva ut den 

Har du koll på skillnaden mellan reference och value types? Annars är det svårt att förstå vad som händer. Du fick en länk lite tidigare, men det finns förstås en massa info därute på nätet.

Jag har bytt namn på dina argument till funktionen f(), för att man inte skall blanda ihop dem med vad som finns i main().

def f(list1,list2,int1,int2):
    list1.append(1)     # adderar element till det som referensen list1 pekar på
    list2.append(2) )   # adderar element till det som referensen list2 pekar på
    int1=int1+1         # räknar upp int1, men inte i1 i main
    int2=int2+2         # räknar upp int2, men inte i2 i main
def main():
    v1=[0]
    v2=[1]
    v2_copy=v2[:]	# kopiera innehållet i v2 till en ny lista v2_copy
    i1=1
    i2=2
    f(v1,v2_copy,i1,i2)
    print(v1,v2,i1,i2)
main()

In i funktionen f() skickar du referenser till v1 och v2_copy, samt värdena i1 och i2. Notera skillnaden!

v1 och v2_copy i main() kommer att uppdateras av f() eftersom du skickar referenser till list-objekten.

i1 och i2 i main() kommer inte att uppdateras av f() eftersom du skickar en kopia av (innehållet i) variablerna.

Jag är inte helt med riktigt. Det såg rörigare ut än vad jag tänkte mig. Jag söker upp reference och value types på youtube så får vi hoppas de går igenom en liknande kod med två def funktioner.

Laguna 30210
Postad: 25 okt 14:33

Har du nån lärobok?

destiny99 7785
Postad: 25 okt 14:49
Laguna skrev:

Har du nån lärobok?

Nej men jag såg på detta klipp som förklarar att listor är föränderliga men inte int, string, float osv. 

https://youtu.be/kjSWIriDe9A?si=XGp7xuTPFBux_Cg1 

Laguna 30210
Postad: 25 okt 15:11

Vad står det i kursbeskrivningen? Rekommenderas det nån informationskälla, eller ska ni försöka lära er allt på egen hand?

destiny99 7785
Postad: 25 okt 15:13 Redigerad: 25 okt 15:14
Laguna skrev:

Vad står det i kursbeskrivningen? Rekommenderas det nån informationskälla, eller ska ni försöka lära er allt på egen hand?

Ingen aning. Jag tror det finns kurslitteratur men det finns ju youtube man kan kolla också. 

Laguna 30210
Postad: 25 okt 15:23

Det är inte konstigt att du är förvirrad om du inte har någon vettig informationskälla.

"Ingen aning" är i alla fall inte rätt svar. Ta reda på vad kursen kräver av dig och vad det rekommenderas att du ska läsa.

destiny99 7785
Postad: 25 okt 15:24 Redigerad: 25 okt 15:26
Laguna skrev:

Det är inte konstigt att du är förvirrad om du inte har någon vettig informationskälla.

"Ingen aning" är i alla fall inte rätt svar. Ta reda på vad kursen kräver av dig och vad det rekommenderas att du ska läsa.

Jag är bara över koden eftersom det har inte nämnts om sådant. Men nu har jag kollat på den där youtube klippet där de nämner reference and passing values så jag förstår någorlunda.

Laguna 30210
Postad: 25 okt 15:27

Vad betyder "Jag är bara över koden"?

destiny99 7785
Postad: 25 okt 15:27 Redigerad: 25 okt 15:30
Laguna skrev:

Vad betyder "Jag är bara över koden"?

jag menar jag var förvirrad över hur svår denna kod såg ut, men när sictansit sa om reference och passing values så nämner de på youtube om detta. Kurslitteratur är valfritt och inget man måste skaffa sig så vitt jag vet. 

Laguna 30210
Postad: 25 okt 15:33

Väntar du dig att du ska kunna lösa uppgifterna utan att först lära dig något?

Har du en länk till kursbeskrivningen?

destiny99 7785
Postad: 25 okt 15:38 Redigerad: 25 okt 15:44
Laguna skrev:

Väntar du dig att du ska kunna lösa uppgifterna utan att först lära dig något?

Har du en länk till kursbeskrivningen?

Jag tänker man får försöka lösa uppgifterna utifrån de områden man lärt sig enligt kursplanering och sen om man får fel lär man sig och sen söker upp vad det handlar om. 

sictransit 1019 – Livehjälpare
Postad: 25 okt 16:09 Redigerad: 25 okt 16:10

Pass by reference/value är inte mycket svårare än så här:

Listor är reference types. 
Integers är value types.

Allt typer i python (och de flesta andra språk) är antingen det ena eller det andra. Typiskt är "enkla" datatyper value types, som en int.

När du skickar in en lista, så skickar du in en referens till listan. Typ, lägg ytterligare ett element i den låda som jag pekar på. Det finns bara en enda låda.

När du skickar in en integer, så skickar du in värdet av den. Typ, jag visar dig en lapp som det står 1 på. Om du skriver 2 på din lapp, så står det fortfarande 1 på min lapp.

teknikomatte 84
Postad: 25 okt 16:21 Redigerad: 25 okt 16:23
destiny99 skrev:

Kurslitteratur är valfritt och inget man måste skaffa sig så vitt jag vet. 

Asså du behöver ju inte skaffa kurslitteraturen om du inte vill men i framtida kurser kommer det vara ganska många inlämningsuppgifter som är formulerade och skapade på ett sätt där de utgår från väldigt liknande exempel som finns i böckerna så jag hade verkligen rekommenderat att skaffa de. De kanske inte behövs i ettan på TF men i tvåan när man läser t.ex Vektoranalys och Fysmatten så är det bra att ha fått in en vana att använda kurslitteraturen och slå upp relevanta saker. Annars skulle jag säga att det blir onödigt svårt att lösa uppgifterna.

destiny99 7785
Postad: 25 okt 16:36 Redigerad: 25 okt 17:15
teknikomatte skrev:
destiny99 skrev:

Kurslitteratur är valfritt och inget man måste skaffa sig så vitt jag vet. 

Asså du behöver ju inte skaffa kurslitteraturen om du inte vill men i framtida kurser kommer det vara ganska många inlämningsuppgifter som är formulerade och skapade på ett sätt där de utgår från väldigt liknande exempel som finns i böckerna så jag hade verkligen rekommenderat att skaffa de. De kanske inte behövs i ettan på TF men i tvåan när man läser t.ex Vektoranalys och Fysmatten så är det bra att ha fått in en vana att använda kurslitteraturen och slå upp relevanta saker. Annars skulle jag säga att det blir onödigt svårt att lösa uppgifterna.

I programmeringen har jag bara fått höra av äldre tfysare att man inte behöver skaffa sig litteratur som tex matte och fysik kurserna. Men vad bra, ska ha det i åtanke inför högre årskurser. Tack för att du delade med dig! 

destiny99 7785
Postad: 25 okt 17:03 Redigerad: 25 okt 17:06
sictransit skrev:

Pass by reference/value är inte mycket svårare än så här:

Listor är reference types. 
Integers är value types.

Allt typer i python (och de flesta andra språk) är antingen det ena eller det andra. Typiskt är "enkla" datatyper value types, som en int.

När du skickar in en lista, så skickar du in en referens till listan. Typ, lägg ytterligare ett element i den låda som jag pekar på. Det finns bara en enda låda.

När du skickar in en integer, så skickar du in värdet av den. Typ, jag visar dig en lapp som det står 1 på. Om du skriver 2 på din lapp, så står det fortfarande 1 på min lapp.

"När du skickar in en lista, så skickar du in en referens till listan. Typ, lägg ytterligare ett element i den låda som jag pekar på. Det finns bara en enda låda." 

Menar du att referensen pekar på samma objekt som elementet läggs till eller hur man nu säger det? 

"När du skickar in en integer, så skickar du in värdet av den. Typ, jag visar dig en lapp som det står 1 på. Om du skriver 2 på din lapp, så står det fortfarande 1 på min lapp."

Ja juste för din etta på din lapp ändras inte ?  Jag tänker på exemplet nedan.

Tex

Def num(x):

      return x

a=14

num(a)

print(a)

Svara
Close