[Python] Pensare da informatico, ultimo capitolo: gli alberi

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

[Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

Mi sono posto come obiettivo di finire questo libro prima dell'anno nuovo, ho finito adesso il capitolo 20, l'ultimo, ma ho molti dubbi visto che non riesco a studiarlo con calma dato che c'è un casino da me e ci sono cose da preparare. Il link al capitolo è http://www.python.it/doc/Howtothink/How ... chap20.htm Le cose che vorrei sapere sono:

Codice: Seleziona tutto

class Albero:
    def __init__(self, Contenuto, Sinistra=None, Destra=None):
        self.Contenuto = Contenuto
        self.Sinistra = Sinistra
        self.Destra = Destra
        
    def __str__(self):
        return str(self.Contenuto)
    
    
FiglioSinistra = Albero(2)
FiglioDestra = Albero(3)

Albero = Albero(1, FiglioSinistra, FiglioDestra)


def Totale(Albero):
    if Albero == None: return 0
    return Albero.Contenuto + Totale(Albero.Sinistra) + Totale(Albero.Destra)


def StampaAlberoPre(Albero):
    if Albero == None: return
    print Albero.Contenuto,
    StampaAlberoPre(Albero.Sinistra)
    StampaAlberoPre(Albero.Destra)

def StampaAlberoPost(Albero):
    if Albero == None: return
    StampaAlberoPost(Albero.Sinistra)
    StampaAlberoPost(Albero.Destra)
    print Albero.Contenuto,
    
def StampaAlberoIn(Albero):
    if Albero == None: return
    StampaAlberoIn(Albero.Sinistra)
    print Albero.Contenuto,
    StampaAlberoIn(Albero.Destra)
Nonostante abbia fatto la ricorsione non riesco a capire perchè vengono stampati i vari valori delle funzioni, anche se provo con carta e penna a simulare il funzionamento del codice. Qualcuno sarebbe cosi gentile da scrivere i vari passaggi che effettuano le varie funzioni?

2)
Esercizio: modifica StampaAlberoIn così da mettere un paio di pa
rentesi che racchiuda ogni coppia di operandi ed il loro operatore
Il risultato pu` o essere considerato a questo punto corretto e no
ambiguo? Sono sempre necessarie le parentesi?
Come si risolve?

3)
Esercizio: scrivi una funzione che accetta un’espressione e la con-
verte in una lista di token.
Come si risolve?

4)
Esercizio: pensa ai vari modi in cui potresti salvare l’albero su file e
poi implementa quello che ritieni sia il più semplice
Come si fa?

Queste sono le cose più importanti, spero di ricevere le risposte che cerco. Sarebbe un bell'inizio di anno nuovo  ;)
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

Scusate la fretta, ma mi servirebbe una risposta al più presto. Mercoledì parto e poi dovrò fare altre cose, devo sapere queste cose prima di poter fare altro. Grazie
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da kelev »

In poche parole chiedi agli altri di farti degli esercizi..e tu quando imparerai?
Devi sbattere parecchio la testa se vuoi ottenere dei risultati altrimenti con la pappa già pronta quando pensi di imparare?!
"E alla fine sei da solo, dove vai, con chi brindi?"
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

xajx ha scritto: In poche parole chiedi agli altri di farti degli esercizi..e tu quando imparerai?
Devi sbattere parecchio la testa se vuoi ottenere dei risultati altrimenti con la pappa già pronta quando pensi di imparare?!
Giustissimo, ma non bisogna fare di tutta l'erba un fascio. Ho spiegato all'inizio che questi giorni purtroppo non mi posso dedicare completamente allo studio, quindi dato che mi servirebbe vedere il codice cosi da farmi un'idea ho chiesto.
Oltretutto la prima cosa che ho chiesto è se qualcuno poteva spiegare quelle funzioni ricorsive, mi ci sono messo due minuti mentre cucinavo, ma non ne sono venuto a capo.

Spero si sia capito
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
kelev
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1766
Iscrizione: giovedì 4 settembre 2008, 0:27

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da kelev »

"E alla fine sei da solo, dove vai, con chi brindi?"
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

xajx ha scritto: Per farti un'idea: http://it.wikipedia.org/wiki/Funzione_ricorsiva
Già letto, il punto è, ripeto, che non ho il tempo materiale di studiare il codice come si deve per questo ho chiesto se qualcuno poteva risolvere quei due esercizi e scrivermi passo passo cosa fanno le varie funzioni ricorsive
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

Il problema delle funzioni è risolto, ho avuto un pò di tranquillità ed è tutto ok. Però gli esercizi non riesco a risolverli, qualcuno potrebbe postare il codice? Gli esercizi sono:
Esercizio: modifica StampaAlberoIn così da mettere un paio di pa
rentesi che racchiuda ogni coppia di operandi ed il loro operatore
Il risultato pu` o essere considerato a questo punto corretto e no
ambiguo? Sono sempre necessarie le parentesi?

Esercizio: scrivi una funzione che accetta un’espressione e la con-
verte in una lista di token.

Esercizio: pensa ai vari modi in cui potresti salvare l’albero su file e
poi implementa quello che ritieni sia il più semplice
che sono a questo link http://www.python.it/doc/Howtothink/How ... chap20.htm
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

Nessuno?
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
twilight
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 3849
Iscrizione: giovedì 17 febbraio 2005, 16:29
Località: L'Aquila
Contatti:

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da twilight »

Ma a che serve se te li facciamo noi? Un conto è postare un codice fatto da te che non funziona e non capisci il motivo..un conto è pensare alla soluzione e implementarla al posto tuo :) Provaci e eventualmente scrivi dove non riesci a continuare.

ciao
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

twilight ha scritto: Ma a che serve se te li facciamo noi? Un conto è postare un codice fatto da te che non funziona e non capisci il motivo..un conto è pensare alla soluzione e implementarla al posto tuo :) Provaci e eventualmente scrivi dove non riesci a continuare.

ciao
Come ho detto ho provato a farli, ma non ne vengo a capo. Sarà la stanchezza, lo stress o che non sono portato io o sono scemo, ma è cosi per questo ho aperto il post. Ho necessità di farli entro stasera.. >:(
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da Zoff »

~FullSyst3m~ ha scritto:
twilight ha scritto: Ma a che serve se te li facciamo noi? Un conto è postare un codice fatto da te che non funziona e non capisci il motivo..un conto è pensare alla soluzione e implementarla al posto tuo :) Provaci e eventualmente scrivi dove non riesci a continuare.

ciao
Come ho detto ho provato a farli, ma non ne vengo a capo. Sarà la stanchezza, lo stress o che non sono portato io o sono scemo, ma è cosi per questo ho aperto il post. Ho necessità di farli entro stasera.. >:(
Posta il codice che hai prodotto che ti diamo degli hint per continuare...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

Zoff ha scritto:
~FullSyst3m~ ha scritto:
twilight ha scritto: Ma a che serve se te li facciamo noi? Un conto è postare un codice fatto da te che non funziona e non capisci il motivo..un conto è pensare alla soluzione e implementarla al posto tuo :) Provaci e eventualmente scrivi dove non riesci a continuare.

ciao
Come ho detto ho provato a farli, ma non ne vengo a capo. Sarà la stanchezza, lo stress o che non sono portato io o sono scemo, ma è cosi per questo ho aperto il post. Ho necessità di farli entro stasera.. >:(
Posta il codice che hai prodotto che ti diamo degli hint per continuare...
Appena ho due minuti lo posto
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

C'è una cosa che non capisco:
Il parser che scriveremo dovrà riuscire a gestire espressioni contenenti numeri, parentesi e gli operatori + e *. Partiamo dal presupposto che la stringa da analizzare sia già stata spezzata in token che nel nostro caso sono elementi di una lista:

['(', 3, '+', 7, ')', '*', 9, 'end']

Il token end è stato aggiunto per fare il modo che il parser non continui la lettura al termine della lista.
Che significa la parte in grassetto? Io ho solo notato che togliendo 'end' dalla lista ottengo un index out of range.

Comunque ecco il codice degli esercizi che ho postato sopra, potreste correggerlo e scrivere il codice giusto? Grazie.

Esercizio1: modifica StampaAlberoIn così da mettere un paio di pa
rentesi che racchiuda ogni coppia di operandi ed il loro operatore
Il risultato pu` o essere considerato a questo punto corretto e no
ambiguo? Sono sempre necessarie le parentesi?

Codice:

Codice: Seleziona tutto

def StampaAlberoIn(Albero):
    if Albero == None: return
    StampaAlberoIn(Albero.Sinistra)
    print '(',
    print Albero.Contenuto,
    print ')',
    StampaAlberoIn(Albero.Destra)


Esercizio2: Esercizio: scrivi una funzione che accetta un’espressione e la con-
verte in una lista di token.

Codice:

Codice: Seleziona tutto

def OttieniToken(Espressione):
    import re
    ListaToken = re.split("([^0-9])", Espressione)

Esercizio3: pensa ai vari modi in cui potresti salvare l’albero su file e
poi implementa quello che ritieni sia il più semplice

Apparte che il codice della funzione Animale ha problemi visto che dà sempre qualche errore, ad esempio RamoSinistro che non capisco dove sia stato definito, ecco il codice:

Codice: Seleziona tutto

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:
            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))
            
def RispostaAffermativa(Domanda):
    from string import lower
    Risposta = lower(raw_input(Domanda))
    return (Risposta[0] == 's')
Il codice che ho scritto io per cercare di risolvere l'esercizio è sul notebook, però non mi funziona, come gli altri due del resto. Ho provato aprendo un file e cercando di scriverci sopra, ma niente.

Ora potreste farmi vedere come si risolvono questi esercizi? Ve ne sarei davvero grato
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da Zoff »

1. Il token 'end' serve per terminar ein modo corretto perché se non ci fosse andrebbe a richiamare ControllaNumero() su una ListaToken vuota e visto che la prima istruzione è x = ListaToken[0], 0 è out of bound....

2. La funziona StampaAlbero così non mi convince molto... Per quel poco che so di Python secondo me anziché stampare ( ) stampa ( ) e non mi sembra corretto... Per correggere basta spostare la print... E per la domanda "sono sempre utili" visto che è teorica lasico a te la risp.

3. Uno split funzione ma non mi sembra il metodo migliore... Può funzionare su stringhe corrette... Ma se vuoi testare il parser alla sensibilità agli errori e poi magari implementare un correttore può causare problemi... Se si vuole integrare la proprietà del prodotto di operatori una stringa come 1+-2 inserisce dei token nulli... Inoltre la split da sola non inserisce il token terminatore ('end')

4. RamoDestro (settaRamoDestro) e RamoSinistro (settaRamoSinistro) sono metodi di information hiding per Destra e Sinsitra, servono per non avere accesso diretto alle variabili dell'oggetto... Giustamente non sai dove le definisce perché non lo mostra, sembra un errore del libro... Considera che

Codice: Seleziona tutto

variabile = albero.RamoSinistro
è identico a

Codice: Seleziona tutto

variabile = albero.Sinistra
mentre

Codice: Seleziona tutto

albero.settaRamoSinistro(variabile)
è uguale a

Codice: Seleziona tutto

albero.Sinistra = variabile
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

1. Il token 'end' serve per terminar ein modo corretto perché se non ci fosse andrebbe a richiamare ControllaNumero() su una ListaToken vuota e visto che la prima istruzione è x = ListaToken[0], 0 è out of bound....
ControllaNumero() dovrebbe richiamarla lo stesso anche con 'end'. Non capisco questa cosa
2. La funziona StampaAlbero così non mi convince molto... Per quel poco che so di Python secondo me anziché stampare ( ) stampa ( ) e non mi sembra corretto... Per correggere basta spostare la print... E per la domanda "sono sempre utili" visto che è teorica lasico a te la risp.
Allora come lo scriveresti il codice tu?
3. Uno split funzione ma non mi sembra il metodo migliore... Può funzionare su stringhe corrette... Ma se vuoi testare il parser alla sensibilità agli errori e poi magari implementare un correttore può causare problemi... Se si vuole integrare la proprietà del prodotto di operatori una stringa come 1+-2 inserisce dei token nulli... Inoltre la split da sola non inserisce il token terminatore ('end')
Io ho scritto il mio codice, non mi viene altro in mente ora come ora. Tu come la scriveresti questa funzione?
4. RamoDestro (settaRamoDestro) e RamoSinistro (settaRamoSinistro) sono metodi di information hiding per Destra e Sinsitra, servono per non avere accesso diretto alle variabili dell'oggetto... Giustamente non sai dove le definisce perché non lo mostra, sembra un errore del libro...
Qua è buio totale per me, da quello che ho studiato ho visto che un attributo deve essere dichiarato, altrimenti dà errore, infatti l'IDE puntualmente mi dà errore di attributo, cioè che RamoDestro e RamoSinistro non esistono per l'oggetto perchè non sono definiti

Codice: Seleziona tutto

Considera che [code]variabile = albero.RamoSinistro
è identico a

Codice: Seleziona tutto

variabile = albero.Sinistra
mentre

Codice: Seleziona tutto

albero.settaRamoSinistro(variabile)
è uguale a

Codice: Seleziona tutto

albero.Sinistra = variabile
[/code]

variabile = albero.RamoSinistro non è assolutamente uguale ad albero.Sinistra e idem per albero.settaRamoSinistro(variabile) che non è per niente uguale ad albero.Sinistra = variabile. O si definisce l'attributo o nisba.
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da Zoff »

Bisogna che ci pensi un po' tu... Gli alberi non sono di immediata comprensione a volte...
La differenza tra lista con 'end' o senza non è che non entra in ControllaNumero() se c'e' 'end', ma che se c'è 'end' non va in out of bound ma vece che non si tratta di un numero type(x) != type(0) e restituisce None.

I print li devi solo spostare di linea... Capisci tu quale...

Il terzo è solo un consiglio... Per ovviare al problema dovresti leggere tu carattere per carattere con un ciclo e creare i token...

RamoSinistro e RamoDestro(), come ho scritto, sono metodi!!! E servono per attuare information hiding sugli attributi... Vedi wikipedia per capire: http://it.wikipedia.org/wiki/Incapsulam ... formatica)
Chiedo scusa perché ho dimenticato () nel primo caso...
Sul fatto che non siano definiti ti do ragione e infatti ho scritto che era un errore del libro...
Basta che te li definisci tu con l'esempio che ti ho dato...
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

Bisogna che ci pensi un po' tu... Gli alberi non sono di immediata comprensione a volte...
Lo so, ma in questi giorni non ho tempo per fare nulla
La differenza tra lista con 'end' o senza non è che non entra in ControllaNumero() se c'e' 'end', ma che se c'è 'end' non va in out of bound ma vece che non si tratta di un numero type(x) != type(0) e restituisce None.
Hai scritto un pò in modo confuso non credi?? In pratica dici che con 'end' non supera il controllo, però nemmeno gli operatori e le parentesi sono numeri, eppure tutto continua a funzionare
I print li devi solo spostare di linea... Capisci tu quale...
Non facciamo prima se me lo dici? Tanto non mi ci posso mettere e da dopodomani devo iniziare il tutorial ufficiale
Il terzo è solo un consiglio... Per ovviare al problema dovresti leggere tu carattere per carattere con un ciclo e creare i token...
Ad esempio come? Non puoi scrivere il codice?
RamoSinistro e RamoDestro(), come ho scritto, sono metodi!!! E servono per attuare information hiding sugli attributi... Vedi wikipedia per capire: http://it.wikipedia.org/wiki/Incapsulam ... formatica)
Chiedo scusa perché ho dimenticato () nel primo caso...
Sul fatto che non siano definiti ti do ragione e infatti ho scritto che era un errore del libro...
Basta che te li definisci tu con l'esempio che ti ho dato...
L'ho detto io che sto libro è andato decadendo. Ho letto il link, ma non so come definirli. Fammi un esempio se puoi
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da Zoff »

~FullSyst3m~ ha scritto:
Bisogna che ci pensi un po' tu... Gli alberi non sono di immediata comprensione a volte...
Lo so, ma in questi giorni non ho tempo per fare nulla
Allora rimettiti sopra all'esercizio quando hai piu' tempo.
~FullSyst3m~ ha scritto:
La differenza tra lista con 'end' o senza non è che non entra in ControllaNumero() se c'e' 'end', ma che se c'è 'end' non va in out of bound ma vece che non si tratta di un numero type(x) != type(0) e restituisce None.
Hai scritto un pò in modo confuso non credi?? In pratica dici che con 'end' non supera il controllo, però nemmeno gli operatori e le parentesi sono numeri, eppure tutto continua a funzionare
Forse... La questione è questa...
All'ultimo passaggio:
senza 'end' ListaToken è così: []
con 'end' ListaToken è così: ['end']

ControllaNumero([]) va in Out of Bound
ControllaNumero['end']) funziona, vede che 'end' non è un numero e torna None che viene appeso come ramo (numero) all'albero ritornato da EsprProdotto.

Piu' chiaro così?
~FullSyst3m~ ha scritto:
I print li devi solo spostare di linea... Capisci tu quale...
Non facciamo prima se me lo dici? Tanto non mi ci posso mettere e da dopodomani devo iniziare il tutorial ufficiale
Nah... Non avrebbe senso... Se poi devi scrivere un tutorial è un motivo in piu'... E' inutile che spieghi alal gente cose che non sai perché si fanno in un certo modo... E il modo migliore per capirle è scervellarsi sopra...
~FullSyst3m~ ha scritto:
Il terzo è solo un consiglio... Per ovviare al problema dovresti leggere tu carattere per carattere con un ciclo e creare i token...
Ad esempio come? Non puoi scrivere il codice?
Codice no però a parole:
Ti crei un array con l'alfabeto di ingresso (in questo caso numeri) ed uno con i separatori (in questo caso operatori) e poi fai un bel ciclo sulla stringa (espressione) di ingresso e controlli ogni carattere conq ueste regole
1. Se il carattere appartiene all'alfabeto lo aggiungi al token (se non ce n'è uno lo crei)
2. Se trovi un carattere che è separatore termini il token e ne crei un altro con l'operatore
3. Se trovi un carattere sconosciuto termini il token e passi al carattere successivo "dimenticando" il carattere appena letto
~FullSyst3m~ ha scritto:
RamoSinistro e RamoDestro(), come ho scritto, sono metodi!!! E servono per attuare information hiding sugli attributi... Vedi wikipedia per capire: http://it.wikipedia.org/wiki/Incapsulam ... formatica)
Chiedo scusa perché ho dimenticato () nel primo caso...
Sul fatto che non siano definiti ti do ragione e infatti ho scritto che era un errore del libro...
Basta che te li definisci tu con l'esempio che ti ho dato...
L'ho detto io che sto libro è andato decadendo. Ho letto il link, ma non so come definirli. Fammi un esempio se puoi
Devi creare i metodi:
RamoSinistro e RamoDestro che semplicemente ritornano rispettivamente Sinistra e Destra.
settaRamoSinistro e settaRamoDestro che invece assegnano rispettivamente a Sinistra e Destra il parametro passato come argomento.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

Zoff ha scritto:
~FullSyst3m~ ha scritto:
Bisogna che ci pensi un po' tu... Gli alberi non sono di immediata comprensione a volte...
Lo so, ma in questi giorni non ho tempo per fare nulla
Allora rimettiti sopra all'esercizio quando hai piu' tempo.
~FullSyst3m~ ha scritto:
La differenza tra lista con 'end' o senza non è che non entra in ControllaNumero() se c'e' 'end', ma che se c'è 'end' non va in out of bound ma vece che non si tratta di un numero type(x) != type(0) e restituisce None.
Hai scritto un pò in modo confuso non credi?? In pratica dici che con 'end' non supera il controllo, però nemmeno gli operatori e le parentesi sono numeri, eppure tutto continua a funzionare
Forse... La questione è questa...
All'ultimo passaggio:
senza 'end' ListaToken è così: []
con 'end' ListaToken è così: ['end']

ControllaNumero([]) va in Out of Bound
ControllaNumero['end']) funziona, vede che 'end' non è un numero e torna None che viene appeso come ramo (numero) all'albero ritornato da EsprProdotto.

Piu' chiaro così?
~FullSyst3m~ ha scritto:
I print li devi solo spostare di linea... Capisci tu quale...
Non facciamo prima se me lo dici? Tanto non mi ci posso mettere e da dopodomani devo iniziare il tutorial ufficiale
Nah... Non avrebbe senso... Se poi devi scrivere un tutorial è un motivo in piu'... E' inutile che spieghi alal gente cose che non sai perché si fanno in un certo modo... E il modo migliore per capirle è scervellarsi sopra...
~FullSyst3m~ ha scritto:
Il terzo è solo un consiglio... Per ovviare al problema dovresti leggere tu carattere per carattere con un ciclo e creare i token...
Ad esempio come? Non puoi scrivere il codice?
Codice no però a parole:
Ti crei un array con l'alfabeto di ingresso (in questo caso numeri) ed uno con i separatori (in questo caso operatori) e poi fai un bel ciclo sulla stringa (espressione) di ingresso e controlli ogni carattere conq ueste regole
1. Se il carattere appartiene all'alfabeto lo aggiungi al token (se non ce n'è uno lo crei)
2. Se trovi un carattere che è separatore termini il token e ne crei un altro con l'operatore
3. Se trovi un carattere sconosciuto termini il token e passi al carattere successivo "dimenticando" il carattere appena letto
~FullSyst3m~ ha scritto:
RamoSinistro e RamoDestro(), come ho scritto, sono metodi!!! E servono per attuare information hiding sugli attributi... Vedi wikipedia per capire: http://it.wikipedia.org/wiki/Incapsulam ... formatica)
Chiedo scusa perché ho dimenticato () nel primo caso...
Sul fatto che non siano definiti ti do ragione e infatti ho scritto che era un errore del libro...
Basta che te li definisci tu con l'esempio che ti ho dato...
L'ho detto io che sto libro è andato decadendo. Ho letto il link, ma non so come definirli. Fammi un esempio se puoi
Devi creare i metodi:
RamoSinistro e RamoDestro che semplicemente ritornano rispettivamente Sinistra e Destra.
settaRamoSinistro e settaRamoDestro che invece assegnano rispettivamente a Sinistra e Destra il parametro passato come argomento.
Non devo scriverlo io il tutorial, devo studiarlo. Comunque ho provato velocemente, ma non va nulla. Se potessi aiutarmi scrivendo del codice te ne sarei grato, altrimenti lascio perdere e vado al tutorial dopodomani. Non ho più tempo, mi serviva per un test per questo volevo vedere il codice per capire visto che potrei trovare domande simili
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Avatar utente
~FullSyst3m~
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 636
Iscrizione: martedì 23 ottobre 2007, 21:51
Località: http://localhost

Re: [Python] Pensare da informatico, ultimo capitolo: gli alberi

Messaggio da ~FullSyst3m~ »

E comunque riguardo l''end' non dovrebbe essere chiamata la funzione con una lista vuota
Se c'è un limite è nell'informatico, non nell'informatica - Coltivate Linux... Winzozz si pianta da solo - Linux User #473380 - L'informatica... che arte meravigliosa
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 8 ospiti