Miért nem működik ez a kód? (python)
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?
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
Csak hogy ugyanarról beszéljünk:
Exercise 2: Print the sum of the current number and the previous number
Ez az?
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.
"í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.
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]
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!