On Wed, Mar 27, 2013 at 04:26:51PM +0100, Gabriel Battaglia (Kriyaban) wrote: > Buongiorno a tutti. > > Torno con una "richiesta d'aiuto", le virgolette sono per > sdrammatizzare l'enfasi delle parole che è certamente eccessiva. > > Diligentemente sto seguendo il libro di A.A.V.V Pensare da > informatico, che trovo estremamente ben fatto e utile. I capitoli 15 > e 16, come forse ricorderete dalla preistoria della vostra > esperienza formativa, affrontano le classi e propongono un > meraviglioso esempio per impararle e famigliarizzarsi con esse: il > gioco di carte OldMaid. > > Ho riscritto (Copiandolo) tutto il codice, il che mi aiuta a > memorizzarlo e comprenderlo, tuttavia, arrivato al momento di > svolgere lìultimo esercizio, mi trovo in difficoltà. > - Per funzionare infatti, il programma va completato con la > scrittura di un metodo .StampaMani() volutamente lasciato alla > perizia degli studenti... Una perizia però... che evidentemente > ancora non posseggo. > > Qui sotto c'è il listato del programma. Il Metodo che dovrei > scrivere è indicato dal tag "#QUI", mentre le ultime righe dello > script sono un'aggiunta mia di scarsa rilevanza. > > La domanda è: a quale classe deve appartenere il metodo .StampaMani()?
Capita spesso di domandarsi a quale classe appartiene un metodo ma nel caso specifico hai una sola possibilità perché tutte le altre porterebbero ad un errore. In realtà è abbastanza grave che tu non lo veda, forse è il caso di fare qualche passo indietro e riguardare come funzionano le classi e l'invocazione dei metodi. Ti lascio il weekend per pensarci. Se vuoi fare una prova per capire usa il seguente codice: def StampaMani(self): print 'Metodo StampaMani definito nella classe', \ self.__class__.__name__ usalo nelle farie classi e vedi un po' cosa restituisce, ma ti ripeto che hai tutti gli elementi per capirlo da solo. > Io pensavo dovesse essere della classe GiocoOldMaid, figlia a > propria volta di GiocoDiCarte. Se lo scrivo lì tuttavia, non riesco > ad accedere alla variabile che contiene il nome del giocatore di > turno: self.Nomi non definito in GiocoOldMaid. Non farti ingannare dall'errore, vedi più avanti perché. Nell'ultima riga del seguente codice c'è un errore. class Mano(Mazzo): def __init__(self, Nome=""): self.Carte = [] self.Nome = Nome def AggiungiCarta(self, Carta): self.Carte.append(Carta) def __str__(self): s = "La mano di "+self.Nome if self.EVuoto(): s += " E' vuota\n" else: s += " Contiene queste carte:\n" return s + Mazzo.__str__(self) # err! Qui, nel metodo `StampaMani`, commetti un errore di concetto: la classe `GiocoOldMaid` contiene un attributo (variabile o metodo) di nome `Nomi`? Lo stesso errore lo ripeti dopo ma con un altro attributo: `Carte`. Inoltre il metodo `range` ti restituisce una lista di interi (1, 2, ...) e sicuramente non accetta una lista come parametro. Rileggi il paragrafo, gli esempi ma soprattutto il testo dell'esecizio che ti indica la direzione da seguire. class GiocoOldMaid(GiocoDiCarte): def StampaMani(self): #QUI # Metodo per stampare le mani. print "Mano di ",self.Nomi," :\n" for i in range(self.Carte): print i,"\n" print "\n-----\n" ... ps. non conosco il testo e non ho letto nulla più che il testo dell'esercizio quindi la mia risposta è un po' superficiale. ciao m. _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python