viernes, 10 de octubre de 2008

Python: ordenar un array de forma aleatoria

Hacía mucho que no escribía nada, así que como no se muy bien que poner, a parte de que ya he empezado en prisión los cursos, y que de 5 alumnos que tenía en el primer turno, ya sólo me quedan 3, pues 2 de ellos han pasado a sección abierta, más comúnmente conocido como tercer grado.

Aparte de esto también me he apuntado a la autoescuela, pero ya comentaré esto otro día. porque el pacto de precios entre ellas se merece una entrada entera.

La cuestión es que llevo mucho tiempo sin programar nada, así que me he decidido a hacer algo, más concretamente un juego de cartas para jugar online, así aprendo/practico programación gráfica, en red, y de la de siempre también, claro.

Bien, pues cuando tenía que barajar las cartas, me paré en seco, ostia, parece un algoritmo complicado, y en python no hay un método shuffle ni nada de eso. Al final el algorito era una chorrada, en 5 lineas esta hecho, pero me asusto por un momento, todo hay que decirlo.

Lo único que hay que hacer es crear un array temporal, elegimos un numero entre 1 y el numero de cartas de la baraja, y la metemos en el array temporal, y claro, quitamos la carta de la baraja.
Repetimos, por que la segunda vez, el numero aleatorio estará entre 1 y 39, etc etc. nos queda algo así (self.listadoCartas sería la baraja).


import random

def barajar(self):
    listaTemp=[]
for indice in range(len(self.listadoCartas)):
numeroAleatorio=random.randint(0,len(self.listadoCartas)-1)
listaTemp.append(self.listadoCartas[numeroAleatorio])
self.listadoCartas.remove(self.listadoCartas[numeroAleatorio])
self.listadoCartas=listaTemp


ACTUALIZACIÓN 16/10/2008
Leyendo un manual de python por encima, he visto que, como no, hay una función que hace justo lo que yo quiero, y el nombre es ..... shuffle(), XDD. incluso hay otra que se llama choice() que nos elige un elemento al azar de un array, ya sea de enteros, de cartas, o de lo que sea.

Yo buscaba la función en los métodos del array, pero esta en las funciones de random. En resumen, que al final, el código nos queda algo más sencillo:


import random

def barajar(self):
    random.suffle(self.listadoCartas)