Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/06/2009, 16:52
locoxchacho
 
Fecha de Ingreso: septiembre-2008
Ubicación: Nuñez, Capital Federal
Mensajes: 423
Antigüedad: 15 años, 8 meses
Puntos: 1
Seguir utilizando una instancia

Buenas noches a todos!

Me he encontrado con un problema a la hora de resolver un ejercicio para la facultad, y espero que pudan ayudarme con un problemita que tengo.

La cuestion es la siguiente: yo tengo un campeonato de Piedra, papel o tijera, donde cada jugador hereda de una clase jugador generica, y lo que se hace es cambiar su atributo nombre y su estrategia de juego (si metodo jugar).

La cosa es la siguiente: el enunciado dice que si se juega mas de un campeonato, debe hacerse con la misma instancia de cada jugador todos los campeonatos. Entonces, mi duda surge ahi:

Si por ejemplo, para jugar 1 campeonato, yo hago:

Código:
mod_jugadores = sys.argv[2:]
n_campeonatos = sys.argv[1]
c_jugadores =  Cola()

def _init_jugadores(l_modulos,c_jugadores):
   "importa el nombre de los modulos contenidos en la lista y encola \
   las intancias de los jugadores en una cola pasada como segundo parametro"
   for _mod in l_modulos:
      print _mod
      j_mod = __import__(_mod)
      jx = j_mod.JugadorPPT()
      c_jugadores.encolar(jx)
Y para jugar el campeonato hago (falta el codigo del campeonato, pero creo que no hace a la pregunta):

Código:
_init_jugadores(mod_jugadores,c_jugadores)
winer = campeonato(c_jugadores)
print "el ganador del campeonato es %s" % (winer.nombre)
Ahora, si yo quiero correr x campeonatos, yo haria:

Código:
ganadores={}
for x in range(int(n_campeonatos)):
    _init_jugadores(mod_jugadores,c_jugadores)
    winer = campeonato(c_jugadores)
    print "el ganador del %d campeonato es %s" % (x+1,winer.nombre)
    if winer.nombre in ganadores:
        ganadores[winer.nombre] +=1
    else:
        ganadores[winer.nombre] = 1
De esa forma, jugaria x campeontaos y al final tendria guardado en un diccionario la cantidad de torneos que ganó cada jugador. La duda, entonces, me surge si yo al hacer el
_init_jugadores(mod_jugadores,c_jugadores)
por cada vez que me lo pida el for, estoy creando una nueva instancia del jugador y,por ende, esta mal lo que estoy haciendo, o esta bien como lo estoy aplicando y sirve el codigo.

Si esta mal, no se me ocurre como hacer, pq si lo dejo fuera del for el _init_jugadores(mod_jugadores,c_jugadores) al jugar el segundo campeonato, no tiene jugadores en la cola, ya que fueron desencolados en el primer campeonato. Alguna pista para este problema??

Nota: el sistema del campeonato funciona de la siguiente forma: encola todas las instancias, luego agarra las 2 primeras y juegan entre si. Al ganador, lo vuelve a encolar, y asi hasta que en la cola queda un solo jugador, que es el ganador del torneo. Esta aclaracion es por si no entienden qué es lo que me ocurre en el segundo campeonato (y en los posteriores tmb) cuando digo que la cola esta vacia.

GRACIAS!!

Pablo.

ACLARACION 2: Los jugadores estan en modulos separados, por eso se hace el __import__(modulo). Gracias!

Última edición por locoxchacho; 12/06/2009 a las 16:53 Razón: Aclaracion