|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | ||
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
[Python] Liste linkata
Come ho già detto in altre occasioni ultimamente il libro sul quale sto studianto è drasticamente calato dal punto di vista qualità e correttezza di informazione, sto passando più tempo a correggere gli errori e a capire che cosa vuole dire il libro, che a studiare.
Paragrafo 17.7: Quote:
Codice:
def RimuoviNodo(Lista):
if Lista == None: return
Secondo = Lista.ProssimoNodo
# Il primo nodo deve riferirsi al terzo
Lista.ProssimoNodo = Secondo.ProssimoNodo
# Separa il secondo nodo dal resto della lista
Secondo.ProssimoNodo = None
return Secondo
Codice:
class Nodo:
def __init__(self, Contenuto=None, ProssimoNodo=None):
self.Contenuto = Contenuto
self.ProssimoNodo = ProssimoNodo
def __str__(self):
return str(self.Contenuto)
def StampaLista(Nodo):
Lista = []
while Nodo:
Lista.append(Nodo.Contenuto)
Nodo = Nodo.ProssimoNodo
print Lista
Nodo1 = Nodo(1)
Nodo2 = Nodo(2)
Nodo3 = Nodo(3)
Nodo1.ProssimoNodo = Nodo2
Nodo2.ProssimoNodo = Nodo3
StampaLista(Nodo1)
Rimosso = RimuoviNodo(Nodo1)
StampaLista(Rimosso)
StampaLista(Nodo1)
Premesso tutto questo, non capisco perchè dovrei riscrivere il metodo (come dice il libro) visto che quando viene spiegata la precondizione c'è messo chiaramente che in questi casi viene usata per imporre una limitazione ai parametri, infatti nel codice successivo non c'è nessuna correzione per gestire gli eventuali problemi. Potrei usare un try/except magari, ma il punto non è questo. Spero si sia capito cosa voglio dire. Dopo che ho riavviato non dà più l'errore di prima(solo con la funzione RimuoviNodo ovviamente dà errore), però il controllo non viene eseguito lo stesso perchè anche se il nodo che passo vale None viene stampato il valore (None), e per stamparlo dovrebbe entrare nell'if, che però ha come condizione != da None, quindi non dovrebbe essere eseguito. Mi riferisco a questo: Codice:
def StampaInversa(Nodo):
if Nodo == None: return
StampaInversa(Nodo.ProssimoNodo)
print Nodo,
def StampaInversaFormato(Lista):
print "[",
if Lista != None:
Coda = Lista.ProssimoNodo
StampaInversa(Coda)
print Lista,
print "]",
Nodo1 = Nodo()
StampaInversa(Nodo1)
StampaInversaFormato(Nodo1)
Codice:
None [ None ] Infine, sempre tratto dal libro: Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
||
|
|
|
|
|
#2 | |||
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Quote:
Quote:
Guarda: Codice:
class Nodo:
def __init__(self, Contenuto=None, ProssimoNodo=None):
self.Contenuto = Contenuto
self.ProssimoNodo = ProssimoNodo
def __str__(self):
return str(self.Contenuto)
Codice:
print str(None),
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! Ultima modifica di DanieleC88 : 16-12-2008 alle 12:11. |
|||
|
|
|
|
|
#3 | ||||
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
Quote:
Quote:
Quote:
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. Ultima modifica di ~FullSyst3m~ : 16-12-2008 alle 15:01. |
||||
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
È l'oggetto puntato dal campo ProssimoNodo dell'oggetto puntato dal campo ProssimoNodo dell'oggetto Lista. Detto così sembra una cosa contorta, prova a farti un piccolo disegno su carta dei collegamenti tra gli oggetti e lo capirai in un batter d'occhio.
Quote:
Se invece della classe ListaLinkata (che colleziona oggetti Nodo) ci fosse stata una classe GenereUmano (che colleziona oggetti EssereUmano), quale delle due avrebbe dovuto gestire l'aggiunta di un nuovo essere umano? GenereUmano o EssereUmano? Per quanto riguarda poi il fatto del riavvio, io escluderei una possibilità del genere, non si hanno risultati casuali su diverse esecuzioni dello stesso codice quando questo riceve gli stessi input ed esegue le stesse istruzioni. Penso quindi che ti sia sfuggito qualche dettaglio che modificava l'esecuzione prima di riavviare l'IDE, mi sembra l'unica possibilità.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
Per quanto riguarda il libro io non ho detto che credevo che il metodo doveva andare nella classe Nodo, ma che avevo letto male io sul libro. In ogni caso il libro in questi ultimi capitoli ha un sacco di errori E per il riavvio è cosi, ho salvato, riavviato e poi niente più errori. Io credo sia un problema di IDE che alle volte non salva le modifiche e continua ad eseguire il codice precedente
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. Ultima modifica di ~FullSyst3m~ : 16-12-2008 alle 15:00. |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Non ho contorto niente più del necessario, ho solo spiegato a cosa tentasse di accedere il codice. Va bene vederla semplice, ma non la devi vedere nel modo scorretto, altrimenti non cogli l'errore.
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 4683
|
Quote:
In ogni caso ho dedicato il pomeriggio solo alle liste linkate, ho fatto qualche prova e con i miei strumenti ultra tecnologici (carta e penna) mi sono tolto tutti i dubbi
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:09.




















