|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2011
Messaggi: 125
|
[Python] Risolto un problema se ne crea un altro
Ok, vi dico subito: rilassatevi
![]() Codice:
class Nodo: def __init__(self, Contenuto=None, ProssimoNodo=None): self.Contenuto = Contenuto self.ProssimoNodo = ProssimoNodo def __str__(self): return str(self.Contenuto) def StampaInversa(Lista): if Lista == None: return Testa = Lista Coda = Lista.ProssimoNodo StampaInversa(Coda) print Testa, Nodo1 = Nodo(1) Nodo2 = Nodo(2) Nodo3 = Nodo(3) Nodo1.ProssimoNodo = Nodo2 Nodo2.ProssimoNodo = Nodo3 StampaInversa(Nodo1) Codice:
3 2 1 -Testa = Nodo1 -Coda = Nodo2 -Testa = Nodo2 -Coda = Nodo3 -la condizione risulta positiva e quindi si attiva return, e penso che ciò che non capisco riguardi questa funzione -(supponendo che in qualche strano modo vengano saltate le tre righe successive) viene stampato Testa, ovvero Nodo3. Com'è che vengono restituiti pure gli attributi degli altri Nodi? |
![]() |
![]() |
![]() |
#2 | |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
Prima che venga fatta la prima chiamata a StampaInversa hai Nodo1, Nodo2 completamente definiti ( ovvero hanno sia un attributo Contenuto che un attributo ProssimoNodo definito ). Nodo3 invece ha solo l'attributo Contenuto definito, mentre ProssimoNodo è uguale a None ( come indicato tra i parametri del costruttore ). Detto ciò, quando chiami per la prima volta StampaInversa questo è quello che succede: 1. Nodo1 è uguale a None? FALSO 2. Imposti Testa = Nodo1 3. Imposti Coda = Nodo2 4. Chiama StampaInversa(Nodo2) [Nota che qua si chiama Coda, ma Coda= Nodo2] 5. Nodo2 è uguale a None? FALSO 6. Imposti Testa = Nodo2 7. Imposti Coda = Nodo3 8. Chiama StampaInversa(Nodo3) [Nota che qua si chiama Coda, ma Coda= Nodo3] 9. Nodo3 è uguale a None? FALSO 10. Imposti Testa = Nodo3 11. Imposti Coda = None 12. Chiama StampaInversa(None) [Nota che qua si chiama Coda, ma Coda= None] 13. None è uguale a None? VERO -> Esci dalla funzione 14. Ora siamo dentro StampaInversa di Nodo3. Subito la chiama alla funzione StampaInversa(None) c'è print Testa, quindi: 15. Stampa Nodo3 16. Esci da StampaInversa 17. Stampa Nodo2 18. Esci da StampaInversa 19. Stampa Nodo1 20. Esci da StampaInversa 21. Esci dal programma
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
![]() |
![]() |
![]() |
#3 | |
Member
Iscritto dal: Mar 2011
Messaggi: 125
|
Quote:
Riformulando: le StampaInversa restano in stasi finché Lista non è uguale a None, così interrompe quella attuale (che agiva appunto su None) e poi ritorna sulle altre partendo dalla più recente, così da compierle a ritroso. Grazie mille ![]() |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
|
Quote:
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:47.