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: "I
n 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()