Neofita _ AttributeError: instance has no attribute

Forum di discussioni su Python

Moderatore: Toki

Regole del forum
Leggi: IProgrammatori.it - Regolamento Forum
luca3.34
Utente Junior
Messaggi: 80
Iscritto il: 14 feb 2017, 11:27

Neofita _ AttributeError: instance has no attribute

Messaggioda luca3.34 » 12 ott 2017, 14:12

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".

Codice: Seleziona tutto

 while SottoAlbero.RamoSinistro() != None: 


Non capisco cosa voglia dire SottoAlbero.Ram......

Non so far funzionare questo codice


Codice: Seleziona tutto

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()
luca3.34
Utente Junior
Messaggi: 80
Iscritto il: 14 feb 2017, 11:27

Re: Neofita _ AttributeError: instance has no attribute

Messaggioda luca3.34 » 12 ott 2017, 14:15

P.S. Ho capito cosa dovrebbe fare il programma e come gira il codice ma alcuni punti quali

Codice: Seleziona tutto

SottoAlbero.RamoSinistro()
mi sono ignoti

GRAZIE
Della
Utente Senior
Messaggi: 1231
Iscritto il: 20 nov 2010, 18:39

Re: Neofita _ AttributeError: instance has no attribute

Messaggioda Della » 17 ott 2017, 21:44

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
LogCat or GTFO (cit.)
Avatar utente
migliorabile
Utente Senior
Messaggi: 2708
Iscritto il: 05 apr 2013, 09:44

Re: Neofita _ AttributeError: instance has no attribute

Messaggioda migliorabile » 18 ott 2017, 02:20

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!

Torna a “Python”

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti