Permalänk
Medlem

Nybörjarfråga i python

Kan någon förklara detta lite närmre?

1.
f = "o"
e = "t"
e += f
print(e)
svar: e är lika med to

2.
f = "o"
e = "t"
f += e
print(e)
svar: e är lika med t

3.
f = "o"
e = "t"
f += e
e += f
print(e)
svar: e är lika med tot

Tack för hjälpen

Permalänk
Medlem

a += b

betyder

a = a + b

och + för strängar i python är sammansättning

Visa signatur

I'm Winston Wolfe. I solve problems.

Permalänk
Medlem

Ja, men...

Om a = a + b, så borde ju även a = b + a

Varför blir det olika i exempel 1 och 2? (Det är väl egentligen exempel 2 jag inte riktigt får grepp om).

Permalänk
Inaktiv
Skrivet av JJ72:

Ja, men...

Om a = a + b, så borde ju även a = b + a

Varför blir det olika i exempel 1 och 2? (Det är väl egentligen exempel 2 jag inte riktigt får grepp om).

Därför du skriver print(e) när det är f du ska ha i 2. (Tror jag).

Permalänk
Medlem

"A commonly used shortcut in Python is the “+=” operator, which is shorthand for saying “increase a number by some amount”." Från real python

1.
f = "o"
e = "t"
e += f
print(e)
svar: e är lika med to
e += f där lägger man alltså till "o" till konstanten e som är "t" alltså e=to
2.
f = "o"
e = "t"
f += e
print(e)
svar: e är lika med t

här har man ju inte gjort nån ändring till e så e är fortfarande bara t
3.
f = "o"
e = "t"
f += e
e += f
print(e)
svar: e är lika med tot

Först ändrar man f till "ot" sen plussar man till "ot" på konstanten e som är "t" och får alltså "tot"

Permalänk
Medlem

Aaaaah.

Nu fattar jag. Tack så jättemycket för hjälpen

Permalänk
Hedersmedlem
Skrivet av JJ72:

Ja, men...

Om a = a + b, så borde ju även a = b + a

Det är inte en ekvation, utan likhetstecknet betyder tilldelning. Det är en generell konvention i programmeringsspråk. Ett enkelt likhetstecken blir i detta sammanhang egentligen "riktat" och skulle kanske tydligare kunna skrivas

a ← (a + b)

(OBS: bara illustrativt; det är inte giltig Pythonsyntax) dvs "beräkna a + b och lagra resultatet i variabeln a". Det är detta som är insikten som behövs för att lösa dina uppgifter, skulle jag säga, så se till att du har koll på detta. Hade det varit en ekvation så hade "a = a + b" implicerat att b = 0, eller något, men det kommer inget vettigt av att se det så överhuvudtaget här.

Att a + b inte är samma sak som b + a kan man generellt säga är för att strängar (som både a och b här representerar) inte kommuterar när "+" definieras som "lägg ihop dessa strängar". "Py" + "thon" ger "Python", men "thon" + "Py" ger "thonPy". Att a + b = b + a (med matematiskt likhetstecken) gäller för "vanliga" tal som de som man ser under "vanlig" matematikutbildning är egentligen en speciell egenskap hos dessa tal, snarare än något som är universellt sant, men att gå in på kommutativitet, osv, är egentligen bara att krångla till saker — minns bara att = i programmeringssammanhang inte är samma = som du använt i dina mattekurser.

För att testa likhet i programmeringssammanhang så använder man snarare ==, och för olikhet dess kompisar !=, <=, >=, <, >.

Tillägg: Jag hittade detta svar av en slump en tid efter att jag skrivit det, och störde mig lite på den terminologi jag använde — specifikt uttrycket "lagra resultatet i variabeln a".

Rent pedagogiskt så fungerar det i hög grad att visualisera processen så, men vad just Python i praktiken gör är att skapa ett nytt objekt med värde a + b (där a och b är referenser till tidigare skapade objekt) och döpa en referens till detta nya objekt till a, och därmed ersätta den referenspekare som a tidigare innehöll. Om det objekt som namnet a tidigare refererade till då inte längre har några referenser kvar i programmet så kommer det sedermera raderas av Pythons skräpsamlare.

En ytterligare notis är att ett uttryck som a += b inte av nöden gör samma sak som a = a + b i Python. Ifall det objekt a pekar på har en __iadd__-metod definierad så kommer denna kallas, och per konvention så kommer objektet a pekar på själv ändras, snarare än att skapa ett nytt objekt. Handlar det om omuterbara objekt (vilket i Python inkluderar bl a strängar och tal) så kommer dock a av nöden pekas om till ett nytt objekt likväl.

När distinktionen mellan dessa tillvägagångssätt börjar bli viktig så förstår man nog redan varför, men om någon hittar detta svar så ska man veta att det är förenklat för pedagogikens skull.

Utflykt om referenser och objekt.
Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

Jag tackar så jättemycket för den förklaringen.

Skickades från m.sweclockers.com