Grazie delle dritte, ho provveduto creare una situazione simile così è più 
semplice da passare.


Non posso usare python 2.7 perché devo usare per forza la versione 2. Questa 
classe è un esercitazione per l’università. Prima che mi diate del 
“bimbo-minchia” che non ha voglia di studiare volevo dirvi solo che ho più di 
40 anni, sono padre di famiglia e mi alzo alle 6.00 di mattina per andare al 
lavoro, quindi ho un po di tempo per programmare solo la sera. Se potessi 
andare a lezione bastava far vedere il codice al prof che ti spiegava l’errore 
e ti diceva come intervenire, purtroppo però i corsi sono di mattina. Devo 
consegnare questa roba per il 10/12 e spero di finire perché vorreri avere un 
po di tempo per affinare il codice. Oltretutto provengo da .net e programmo per 
passione perché faccio un lavoro che con l’informatica non c’entra nulla.  


Ora che vi ho tediato con le mie vicissitudini personali riprendiamo il filo 
del discorso, quando  lancio lo script ottengo un errore di tipo 
AttributeError: 'NoneType' object has no attribute 'nomeNodo', quindi il nodo 
padre non viene inizializzato.


il sorgente è questo:






import math


class WNode(object):
    def __init__(self,w):
        self.nomeNodo = w
        self.sottoNodi = []
        self.nodoGenitore=None
    def __str__(self):
        return self.nomeNodo 
    def __repr__(self):
        return 'WNode("'+self.nomeNodo+'")'
   
    #ritorna il numero di nodi dell'albero.
    def count(self):
        ret = 1
        for node in self.sottoNodi:
            ret += node.count()
        return ret


    def path(self,w):
        ret = []
        prec=""
        self._path(self,w)
        return ret


    def _path(self,root,w):
        for node in root.sottoNodi:
            if(node.nomeNodo==w):
                print "Trovato "+node.nomeNodo
                print node.sottoNodi
                print "        "+node.nodoGenitore.nomeNodo
                break
            else:
                self._path(node,w)
        
#Lista per dizionario parole nel file
Righe=['posta','sposta','esposta','sposata','spossata','spostata',
'spostai','spostati','spostarti','spostasti','spostavi',
'spostarvi','posata','posita']
    
def gen_wtree(wfile, word):
    return _generaAlbero(word)


#Genera l'albero di parole   
def _generaAlbero(word):
    root = WNode(word)
    listaNodi=_generaListaParole(word,root)
    for name in listaNodi:
        root.sottoNodi += [_generaAlbero(name.nomeNodo)]
    return root


#Genera lista parole lecite
def _generaListaParole(word,level):


    ret=[]
    nomiNodi=[]


    alfabeto='abcdefghijklmnopqrstuvwxyz'


    for j in range(0,len(word)+1):
        for i in range(0,len(alfabeto)):
            generata = word[0:j]+alfabeto[i] + word[j:]
            if _BinarySearch(generata)==True:
                inLista=generata in nomiNodi
                if inLista==False:
                    nomiNodi.append(generata)
                    tmpNode = WNode(generata)
                    tmpNode.nodoGenitore=level
                    print tmpNode.nodoGenitore.nomeNodo
                    ret.append(tmpNode)


    return ret


#Ricerca parole nel file dizionario
def _BinarySearch(word):
    return word in Righe


ret=gen_wtree("","posta")
print ret.count()
ret.path("spostata")


La funzione _BinarySearch è farlocca in quanto in realtà faccio una ricerca 
binaria su una lista di circa 270.000 parole, l’ho sostituita perché preleva 
tali parole da un file esterno. Tale file viene utilizzato per riempire la 
lista Righe=[] che qui ho inizializzato nel codice con le sole parole che 
servono all’esempio. La classe contiene molte altre funzioni che ho eliminato 
per compattare il codice da mettere qui


Luca





Da: Dario Bertini
Data invio: ‎venerdì‎ ‎6‎ ‎dicembre‎ ‎2013 ‎19‎:‎16
A: Mailing List Python





1- why not Python3?
2- Ottieni un AttributeError (non puoi accedere a nomeNodo perchè
nodoGenitor è None) o un TypeError (non puoi concatenare str e None:
nodoGenitore.nomeNodo è None)?
2b- in futuro ricordati di copiare il messaggio d'errore che hai: così
facendo è più facile capire cosa vada effettivamente storto
3- incolla il codice completo o, meglio ancora, usa qualcosa come
http://ideone.com/ in modo che possiamo riprodurre il problema
facilmente
3b- se il codice è troppo lungo per essere incollato tutto ed essere
comprensibile, è sintomo che dovresti semplificarlo... inizia creando
un caso di test ridotto, magari è possibile che nel processo tu stesso
capisca dove si trova il problema

(non penso che l'errore sia nel nomeNodo, ma effettivamente nel
genitore che è None, ma così sui 2 piedi non so dove sia
effettivamente il problema)


-- 
xmpp: berda...@gmail.com
bitmessage: BM-2cTYXfGiSTsnx3righ6aHcJSWe4MV17jDP
gpg fingerprint: 3F8D53518012716C4EEF7DF67B498306B3BF75A0 (used just
for signing commits)
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a