Stampare albero di parole

di il
1 risposte

Stampare albero di parole

Salve ragazzi ho creato un albero di parole inizialmente vuoto in questo modo:

class WNode(object):
def __init__(self, w):
self._w = w
self._children = []
self._level = 0

def add_children(self, w):
self._children.append(w)

Sapete dirmi come posso stampare questo albero e non far apparire la scritta <__main__.WNode at 0x57992f0>
Grazie

1 Risposte

  • Re: Stampare albero di parole

    Buogiorno,

    Ho letto adesso il tuo post a causa di una lunga assenza dal forum.

    Penso ormai non ti sia più di aiuto la risposta che ti darò, ma la scrivo ugualmente in modo che possa aiutare qualcun altro con lo stesso tuo problema..

    Python mette a disposizione il metodo __str__(self) che viene richiamato dall'interprete quando viene effettuata la stampa di un oggetto, questo metodo deve ritornare una variabile di tipo stringa.

    per esempio nel tuo esercizio:
    testato con python2.7:
    
    class WNode(object):
        def __init__(self, w):
            self._w = w
            self._children = []
            self._level = 0
    
        def add_children(self, w):
            self._children.append(w)
    
        def __str__(self):
            strToReturn = self._w
            for word in self._children:
                strToReturn += '\n' +word
            return strToReturn
    
    
    if __name__ == '__main__':
        albero = WNode('primo nodo')
        albero.add_children('secondo nodo')
        print albero
    
    testato con python3:
    
    class WNode(object):
        def __init__(self, w):
            self._w = w
            self._children = []
            self._level = 0
    
        def add_children(self, w):
            self._children.append(w)
    
        def __str__(self):
            strToReturn = self._w
            for word in self._children:
                strToReturn += '\n' +word
            return strToReturn
    
    
    if __name__ == '__main__':
        albero = WNode('primo nodo')
        albero.add_children('secondo nodo')
        print(albero)
    
    ovviamente nel caso di un albero la stringa potrebbe essere anche più elaborata per esempio in modo da mostrare le varie dipendenze padre-figlio, ma in questo esempio ho scritto in 5 minuti quindi non ho elaborato una cosa del genere.
Devi accedere o registrarti per scrivere nel forum
1 risposte