[Python] Gioco OldMaid, metodo StampaMani().
Marco Giusti
marco.giusti a gmail.com
Ven 29 Mar 2013 15:52:31 CET
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.
Maggiori informazioni sulla lista
Python