Kezdőoldal » Számítástechnika » Programozás » Miért nem működik ez a kód?...

Miért nem működik ez a kód? (python)

Figyelt kérdés

[link]

Innen a második feladatot próbálom megoldani. Ezt írtam hozzá:


num1 = 0

num2 = num1 - 1

num3 = num1 + num2

list = ["current number", num1, "previous number", num2, "sum", num3]

list2 = ["current number", num1,"previous number", num1,"sum", num1]


for i in range(10):

if num1 == 0:

print(list2)

else:

print(list)

num1 += 1


Tudom, ez így elég béna, nem ez lenne a jó megoldás. Viszont még csak tegnap kezdtem el kódolást tanulgatni és jelenleg eddig ér a kezem.

Ezt adja ez a kód:

['current number', 0, 'previous number', 0, 'sum', 0]

['current number', 0, 'previous number', -1, 'sum', -1]

['current number', 0, 'previous number', -1, 'sum', -1]

['current number', 0, 'previous number', -1, 'sum', -1]

['current number', 0, 'previous number', -1, 'sum', -1]

['current number', 0, 'previous number', -1, 'sum', -1]

['current number', 0, 'previous number', -1, 'sum', -1]

['current number', 0, 'previous number', -1, 'sum', -1]

['current number', 0, 'previous number', -1, 'sum', -1]

['current number', 0, 'previous number', -1, 'sum', -1]

Nem egészen értem. Valamiért nem növekszenek a számok, pedig akárhogy is nézem, kéne nekik. Illetve lehet növekszik, hisz a második sorban már rendben felismeri, hogy 0-nál nagyobb "num1". De akkor a list-ben miért nem azzal számol?



2022. jan. 10. 18:47
 1/8 A kérdező kommentje:

Valamiért a tabokat kiszedi a gyk a for ciklusban. Megpróblom megint:

num1 = 0

num2 = num1 - 1

num3 = num1 + num2

list = ["current number", num1, "previous number", num2, "sum", num3]

list2 = ["current number", num1,"previous number", num1,"sum", num1]


for i in range(10):

if num1 == 0:

print(list2)

else:

print(list)

num1 += 1

2022. jan. 10. 18:49
 2/8 A kérdező kommentje:
Hát nem...Képzeljétek oda :D
2022. jan. 10. 18:49
 3/8 anonim ***** válasza:

Csak hogy ugyanarról beszéljünk:

Exercise 2: Print the sum of the current number and the previous number

Ez az?

2022. jan. 10. 19:06
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:
igen, arról :)
2022. jan. 10. 19:09
 5/8 anonim ***** válasza:
A show hint megmutatja, hogy hogyan kell ezt csinálni. Ha értesz angolul, akkor abból már meg tudod írni. A show solution-ban meg ott a megoldás. Amit írtál, az nem jó, pl. az elején a num1 num2 num3 és a listák nem kellenek, gondolom azok valami más példaprogramből származnak. Nincs benne az előző szám tárolása, nincs az sem hogy összeadod a mostanit és az előzőt. Szóval több sebből vérzik.
2022. jan. 10. 19:17
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:

Megsúgom, hogy elég lenne simán print-el megoldani, mármint úgy értem, hogy list nélkül.

Egyébként meg nem szerencsés list nevű változó, mert a list az eleve egy típust jelent pythonban. Hogy értsd például print(list) már így is kiír valamit, ha előtte sehol nem hoztál létre ilyen változót.

Ebből kifolyólag már szívtam meg ahol ennek konkrét olyan mellékhatása volt a kódban, így inkább azt ajánlom hogy soha ne használjuk még ha nincs is ilyen mellékhatása az adott kódba.


Python alatt a változók nem értékeket hanem objektum referenciákat tárolnak. A list típus az ilyen objektum referenciák listája, egy mutable azaz változtatható típus azaz meg lehet változtatni.

Az int (azaz "magyarul" integer) típus az immutable azaz változhatatlan azaz objektum konstans. A += operátor hatására másik int objektum referencia kerül abba a változóba. Így pl list2 = ["current number", num1,"previous number", num1,"sum", num1]

konkrét objektum renfereciák listája, attól hogy num1 változó már másik objektumra mutat attól még list2 referenciái ugyan oda fognak mutatni.

Például

l1 = [1,10,3]

l2 = l1

l2[0] = 66

print(l1)

print(l2)

Ugyan úgy módosult mind a kettő mert az valójában egy és ugyanazon objektum azaz l1 és l2 is ugyanarra a list objektumra mutat.

l2 = [66,10,3]

print(l1)

print(l2)

így is ugynazt fogja kiírni, de valójában egy is ugyanarra mutatnak, de a két list objektum egyenlő azaz print(l1==l2) True értéket ír ki.

l1[0] = 0 ha megint ki printeled mind a kettőt akkor látszik is hogy itt már eltérnek, de l1==l2 is False lesz már.

Ugyanakkor pl t = (1,2,10) ahol t az egy tuple objektumra mutat már t[0] = 11 nem fog működni mert a tuple az immutable.

2022. jan. 10. 19:40
Hasznos számodra ez a válasz?
 7/8 anonim ***** válasza:

"így is ugynazt fogja kiírni, de valójában egy is ugyanarra mutatnak, de a két list objektum egyenlő azaz print(l1==l2) True értéket ír ki."

Jav.: de valójában nem igaz már hogy ugyanarra a list objektumra mutatnak.

2022. jan. 10. 19:58
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:
50%

Egy lehetséges megoldás talán a következő kód.


for num1 in range(0,10):

____if num1 == 0:

________num2 = num1

____else:

________num2 = num1 - 1

____num3 = num1 + num2

____list1 = ["current number", num1, "previous number", num2, "sum", num3]

____print(list1)


Output:

['current number', 0, 'previous number', 0, 'sum', 0]

['current number', 1, 'previous number', 0, 'sum', 1]

['current number', 2, 'previous number', 1, 'sum', 3]

['current number', 3, 'previous number', 2, 'sum', 5]

['current number', 4, 'previous number', 3, 'sum', 7]

['current number', 5, 'previous number', 4, 'sum', 9]

['current number', 6, 'previous number', 5, 'sum', 11]

['current number', 7, 'previous number', 6, 'sum', 13]

['current number', 8, 'previous number', 7, 'sum', 15]

['current number', 9, 'previous number', 8, 'sum', 17]

2022. jan. 11. 00:20
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!