[pyar] randomizar parte de una lista

Gustavo Campanelli gedece en gmail.com
Mie Ene 5 23:07:14 ART 2011


Saludos, esta vez quise randomizar la lista de precios de venda de
productos. O sea, no es que quería poner precios random, sino que
quería desordenar la lista de precios que uso para comerciar en un
juego.

En particular, la lista tiene una primera linea con el nombre del
negocio, y un espacio que no hay que tocar, luego los precios y luego
varios comentarios comenzados con # que no hay que tocar.

Entonces hice un pequeño programa en python utilizando una función que
encontré en la explicación del algoritmo Fisher-Yates en wikipedia,
algoritmo que se usa para mezclar listas que no sean exageradamente
largas. http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle


#!/usr/bin/python

import random

def shuffle(x):
	for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
		j = random.randrange(i+1)
		x[i], x[j] = x[j], x[i]

entrada = open('negocio.txt','r')
lineas = entrada.readlines()
entrada.close()
ordena = []
resto = []
for linea in lineas [1:]:
	if len(linea) > 1:
		if linea[0] <> '#':
			ordena.append(linea)
		else:
			resto.append(linea)

shuffle(ordena)
salida = open('negocio.txt','w')
salida.write(lineas[0])
salida.write(lineas[1])
for linea in ordena:
	salida.write(linea)
salida.write(lineas[1])
for linea in resto:
	salida.write(linea)
salida.close()

 Y listo, problema solucionado. Me llevó más o menos 10 minutos, desde
prototipo, pruebas, ajustes y a producción.

Gedece



More information about the pyar mailing list