Ciao un consiglio, è buona norma aggiungere due ritorni a capo alla fine di una def o una classe... così da rendere il codice più compensibile!
Lorenzo Macchiavelli web designer Il giorno 27 marzo 2013 16:26, Gabriel Battaglia (Kriyaban) < iz4...@libero.it> ha scritto: > 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()? > > 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. > > Probabilmente mi sto confondendo, la mia famigliarità con questo modo di > programmare è appena abbozzata. > > Qualche anima gentile, :) mi darebbe una spintina intellettuale? > > Grazie. > > *** > # Dal capitolo 15 di Pensare da Informatico. > > class Carta: > ListaSemi = ["Fiori", "Quadri", "Cuori", "Picche"] > ListaRanghi = ["impossibile", "Asso", "2", "3", "4", "5", "6",\ > "7", "8", "9", "10", "Jack", "Regina", "Re"] > def __init__(self, Seme=0, Rango=0): > self.Seme = Seme > self.Rango = Rango > def __cmp__(self, Altro): > # controlla il seme > if self.Seme > Altro.Seme: return 1 > if self.Seme < Altro.Seme: return -1 > # se i semi sono uguali controlla il rango > if self.Rango > Altro.Rango: return 1 > if self.Rango < Altro.Rango: return -1 > # se anche i ranghi sono uguali le carte sono uguali! > return 0 > def __str__(self): > return (self.ListaRanghi[self.Rango] + " di " + > self.ListaSemi[self.Seme]) > #Ora l'oggetto carta e' creato. > > # Ora il Mazzo. > > class Mazzo: > def __init__(self): > self.Carte = [] > for Seme in range(4): > for Rango in range (1,14): > self.Carte.append(Carta(Seme, Rango)) > def __str__(self): > s = "" > for i in range(len(self.Carte)): > s = s + " "*i + str(self.Carte[i]) + "\n" > return s > def Mescola(self): > import random > NumCarte = len(self.Carte) > for i in range(NumCarte): > j = random.randrange(i,NumCarte) > self.Carte[i], self.Carte[j] = self.Carte[j], self.Carte[i] > def RimuoviCarta(self, Carta): > if Carta in self.Carte: > self.Carte.remove(Carta) > return 1 > else: > return 0 > def PrimaCarta(self): > return self.Carte.pop() > def EVuoto(self): > return (len(self.Carte) == 0) > def Distribuisci(self, ListaMani, NumCarte=999): > NumMani=len(ListaMani) > for i in range(NumCarte): > if self.EVuoto: > break > Carta = self.PrimaCarta() > Mano = ListaMani(i % NumMani) > Mano.AggiungiCarta(Carta) > > 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) > class GiocoDiCarte: > def __init__(self): > self.Mazzo = Mazzo() > self.Mazzo.Mescola() > class ManoOldMaid(Mano): > def RimuoviCoppie(self): > Conteggio = 0 > CarteOriginali = self.Carte[:] > for CartaOrig in CarteOriginali: > CartaDaCercare = (3-CartaOrig.Seme, CartaOrig.Rango) > if CartaDaCercare in self.Carte: > self.Carte.remove(CartaOrig) > self.Carte.remove(**CartaDaCercare) > print "Mano di %s : %s elimina %s" %\ > self.Nome, CartaOrig, CartaDaCercare > Conteggio += 1 > return Conteggio > 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" > def Partita(self, Nomi): > # Tolgo la donna di fiori > self.Mazzo.RimuoviCarta(Carta(**0,12)) > # Creazione di una mano per ogni giocatore > self.Mani = [] > for Nome in Nomi: > self.Mani.append(ManoOldMaid(**Nome)) > # Distribuzione mani > self.Mazzo.Distribuisci(self.**Mani) #Rimossa () dopo mani > print " ---------- Le carte sono state distribuite." > self.StampaMani() > # Toglie le coppie iniziali. > NumCoppie = self.RimuoviTutteLeCoppie() > print " --- Coppie scartate. Inizia la partita.\n" > self.StampaMani() > # Gioca finche' non sono state fatte 25 coppie > Turno = 0 > NumMani = len(self.Mani()) > while NumCoppie < 25: > NumCoppie += self.GiocaUnTurno(Turno) > Turno = (Turno + 1) % NumMani > print "----------La partita e' finita! \n" > self.StampaMani() > def RimuoviTutteLeCoppie(self): > Conteggio = 0 > for Mano in self.Mani: > Conteggio += Mano.RimuoviCoppie() > return Conteggio > def GiocaUnTurno(self, Giocatore): > if self.Mani[Giocatore].EVuoto(): > return 0 > Vicino = self.TrovaVicino(Giocatore) > CartaScelta = self.Mani[Vicino].PrimaCarta() > self.Mani[Giocatore].**AggiungiCarta(CartaScelta) > print "Mano di ",self.Mani[Giocatore].Nome,\ > ": scelta", CartaScelta > Conteggio = self.Mani[Giocatore].**RimuoveCoppie() > self.Mani[Giocatore].Mescola() > return Conteggio > def TrovaVicino(self, Giocatore): > NumMani=len(self.Mani) > for Prossimo in range(1, NumMani): > Vicino = (Prossimo + Giocatore) % NumMani > if not self.Mani[Vicino].EVuoto(): > return Vicino > # Codice che gestisce il gioco. > Gioco = GiocoOldMaid() > Quanti = input("Quanti giocatori?") > if Quanti > 8: Quanti = 8 > if Quanti < 2: Quanti = 2 > ListaG = [] > for i in range(Quanti): > print "Giocatore: ", i+1, > ListaG.append(raw_input("nome: ")) > Gioco.Partita(ListaG) > > |---------< Gabriel Battaglia (Kriyaban) >-----| > |- Skype: gabriel_battaglia > |-----------------------------**------| > |- Ricevitoria Telefonica > |--- Fondazione Cassa di Risparmio in Bologna > |----- via Farini 15, I:40124, Bologna (BO) > |------- Tel: (+39) 051 27 54 111 > |--------- Sito Web: http://fondazionecarisbo.it > |-----------------------------**-----------------| > ______________________________**_________________ > Python mailing list > Python@lists.python.it > http://lists.python.it/**mailman/listinfo/python<http://lists.python.it/mailman/listinfo/python> >
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python