Hola, Para este tipo de problemas lo mejor es usa la interfaz interactiva de python en consola
Ejemplo de funcionamiento de la copia de listas: Creamos una lista tipo tauler: >>> a = [[y for y in range(4)] for x in range(4)] >>> a [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] Creamos una referencia: >>> b = a Comprobamos que si modificamos uno y se modifica en el otro >>> a[0][1]= 5 >>> a [[0, 5, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] >>> b [[0, 5, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] Si copiamos la lista: >>> b=a[:] Si modificamos un valor de la sublista vemos que tambien se modifica en la sublista copia >>> b[0][1]= 8 >>> a [[0, 8, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] >>> b [[0, 8, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] Pero si añadimos un elemento mas en la lista principal, no se copia! >>> b.append([x for x in range(4)]) >>> b [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] >>> a [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] Esto es porque si entendemos que el tauler (a) es una lista de listas se entiende mas facilmente que hay que duplicar los dos niveles, la lista y la sublista Duplicamos: >>> b = [x[:] for x in a] >>> b [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] >>> a [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] Modificamos: >>> b[0][1]= 7 >>> b [[0, 7, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] >>> a [[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]] Espero que te sea de ayuda Un saludo Eduard Diaz 2011/8/4 Francesc Gispert Sanchez <francesc_gispert_11...@hotmail.com> > Hola, estoy aprendiendo a programar en Python y he intentado hacer una > versión del juego de mesa 'Othello' sólo con texto. Pero mi problema > esque la función que cambia las piezas blancas por negras y viceversa no > funciona, y tras muchas horas probando cosas, me parece que el problema > viene de la función que duplica la matriz (una lista de listas) que > representa el tablero. > > Esto se puede observar gracias a lo que imprimen las líneas 164 y 165 > del archivo .py; concretamente la 165. Esta línea debería mostrar todo > el rato el mismo tablero (lista) exacto, puesto que no hay nada dentro > de la función 'giraFitxes' (giraFichas) que lo modifique. Pero éste va > adoptando los mismos valores que el tablero provisional que utilizo para > girar las fichas (el que imprime la línea 164). Por eso, deduzco que > cuando creo un tablero provisional con la función > 'duplicaTauler' (duplicaTablero) no se crea una lista nueva, sino que la > nueva variable es sólo otra referencia al tablero principal. > > Además de ésta forma de duplicar el tablero, lo he probado con la > función descrita en 'http://challenges.qumax.org/?p=351', pero tampoco > ha funcionado. También lo he intentado con un bucle que recorriera las > filas y, dentro de éste, 'duplicado = tablero[fila][:]', pero no hay > forma. Es muy probable que, además de esto, haya algún otro fallo en el > código, pero si es así no me he percatado por culpa de éste que comento. > > Entonces, ¿cómo debería hacerlo para crear un tablero provisional con > los mismos valores que el tablero original sin que, al modificarlo, se > modifique también el original? > > > El programa (las variables, los comentarios, etc.) está en catalán, > espero que no sea una molestia; si lo es, os lo puedo traducir. No sé si > es relevante, pero utilizo Python 2.6.7 en Debian Wheezy (testing). > > Muchas gracias por adelantado. > > > Francesc Gispert > > _______________________________________________ > Python-es mailing list > Python-es@python.org > http://mail.python.org/mailman/listinfo/python-es > FAQ: http://python-es-faq.wikidot.com/ > >
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/