Neofita _ AttributeError: instance has no attribute

di il
3 risposte

Neofita _ AttributeError: instance has no attribute

Bungiorno a tutti,

PREMESSA: sto iniziando ad approcciarmi alla programmazione e ho scelto python.

Ho un problema, non riesco a mettere in pratica un esempio. Il codice che vi mostro è copiato da un libro quindi lo reputo corretto.
Utilizzo python 2.7.

Con l'esempio in questione dovrei riuscire a fare questo: "In questa sezione svilupperemo un piccolo programma che usa un albero per
rappresentare un sistema di conoscenze e aumentando la sua ampiezza grazie all'interazione con l'operatore. Il programma interagisce con l'operatore per creare un albero di domande e di nomi di animali.


La faccio molto breve, dalla prima riga fino alla riga dove leggete #--------------------------------------------------------------------- INTENDO FINO A QUI , non ho nessun problema e tutto funziona.
Sotto ciascuna funzione ho messo come commenti le istruzioni che usavo, probabilmente le due funzioni StampaAlberoPre e StampaAlberoIndentato potrebbero anche essere tolte.

Facendo il debug arrivo alla riga # <------------------------------- l'errore e' qui non capisco cosa fare e poi da errore.
Giustamente mi dice: AttributeError: Albero instance has no attribute 'RamoSinistro".

 while SottoAlbero.RamoSinistro() != None:  
Non capisco cosa voglia dire SottoAlbero.Ram......

Non so far funzionare questo codice


class Albero:

    def __init__(self, Contenuto, Sinistra=None, Destra=None):
        self.Contenuto = Contenuto
        self.Sinistra = Sinistra
        self.Destra = Destra
        pass

    def __str__(self):
        return str(self.Contenuto)
    pass

FiglioSinistra = Albero(2)
FiglioDestra = Albero (3)

def StampaAlberoPre(Albero):
    if Albero == None: 
        return
    else:
        print Albero.Contenuto
        StampaAlberoPre(Albero.Sinistra)
        StampaAlberoPre(Albero.Destra)
    
xxxx = Albero(1, Albero(2), Albero(3))
#print(Totale(xxxx))
#StampaAlberoPre(xxxx)

#---------------------------------------------------------------------

def StampaAlberoIndentato(Albero, Livello=0):
    if Albero == None: 
        return
    StampaAlberoIndentato(Albero.Sinistra, Livello+3)
    print '  '*Livello + str(Albero.Contenuto)
    
    StampaAlberoIndentato(Albero.Destra, Livello+3)
    
#Albero = Albero('+',        Albero('*'  ,   Albero('*', Albero(11111),Albero(6666666)),     Albero('*',Albero(10),Albero(0))),               Albero('*', Albero(2), Albero(3)))
#StampaAlberoIndentato(Albero)

#--------------------------------------------------------------------- INTENDO FINO A QUI 

def RispostaAffermativa(Domanda):
    from string import lower
    Risposta = lower(raw_input(Domanda))
    return (Risposta[0] == 's')

def Animale():

    # parte con una lista composta di un solo elemento
    Radice = Albero("uccello")

    # continua finche' l'operatore non abbandona
    while 1:
        print
        if not RispostaAffermativa("Stai pensando ad un animale? "): break

        # percorre l'albero
        SottoAlbero = Radice
       
        while SottoAlbero.RamoSinistro() != None:                      # <------------------------------- l'errore e' qui non capisco cosa fare con SottoAlbero.RamoSinistro()
            Messaggio = SottoAlbero.OttieniContenuto() + "? "
            if RispostaAffermativa(Messaggio):
                SottoAlbero = SottoAlbero.RamoDestro()
            else:
                SottoAlbero = SottoAlbero.RamoSinistro()

            # prova a indovinare
            Ipotesi = SottoAlbero.OttieniContenuto()
            Messaggio = "E' un " + Ipotesi + "? "
            if RispostaAffermativa(Messaggio):
                print "Ho indovinato!"
                continue

            # ottiene nuove informazioni
            Messaggio = "Qual e' il nome dell'animale? "
            Animale = raw_input(Messaggio)
            Messaggio = "Che domanda permette di distinguere tra un %s e un %s? "
            Domanda = raw_input(Messaggio % (Animale, Ipotesi))

            # aggiunge le nuove informazioni all'albero
            SottoAlbero.SettaContenuto(Domanda)
            Messaggio = "Se l'animale fosse un %s quale sarebbe la risposta? "
            if RispostaAffermativa(Messaggio % Animale):
                SottoAlbero.SettaRamoSinistro(Albero(Ipotesi))
                SottoAlbero.SettaRamoDestro(Albero(Animale))
            else:
                SottoAlbero.SettaRamoSinistro(Albero(Animale))
                SottoAlbero.SettaRamoDestro(Albero(Ipotesi))
            

Animale()

3 Risposte

  • Re: Neofita _ AttributeError: instance has no attribute

    P.S. Ho capito cosa dovrebbe fare il programma e come gira il codice ma alcuni punti quali
    SottoAlbero.RamoSinistro()
    mi sono ignoti

    GRAZIE
  • Re: Neofita _ AttributeError: instance has no attribute

    Ciao, il programma che hai postato è sicuramente errato, perché i metodi "RamoSinistro" e "RamoDestro" non sono definiti da nessuna parte, quindi è normale che l'esecuzione fallisca
  • Re: Neofita _ AttributeError: instance has no attribute

    Python e' un linguaggio di programmazione che puoi usare per programmare in modo CLASSICO, mediante funzioni/procedure, oppure mediante la programmazione AD OGGETTI.

    Per programmare ad OGGETTI, DEVI SAPERE che cosa e' un oggetto, un metodo, una classe, un'interfaccia, ed N-mila altri concetti.

    Per imparare la programmazione ad oggetti ci sono libri da MIGLIAIA di pagine, non lo si puo' spiegare in un paio di post!

    DEVI STUDIARE SUI LIBRI!
Devi accedere o registrarti per scrivere nel forum
3 risposte