Cita:
Iniciado por razpeitia Hola AlvaroG, cuanto tiempo sin leerte. Unas pequeñas aclaraciones, ese algoritmo se puede quedar en un ciclo infinito si la cantidad es mayor al margen, por ejemplo cantidad=30, min=1, max=10 jamas podra llenar la cantidad que se le pidio (por el principio del palomar). Recomendaría validar.
Principio del palomar... ufffff me trae recuerdos de una asignatura bastante molesta en la universidad jeje
Como era un ejemplo rápido no me fijé en los detalles, pero vale la aclaración por si este código resulta usado por alguien más en el futuro, gracias
Cita:
Iniciado por razpeitia Otra cosa, es para evitar el if, puedes usar set (conjuntos) y al final pasarlo por la función list. Esto no se si sera mas eficiente.
Casi nunca recuerdo que en Python se puede usar conjuntos, y eso que fue una de las funciones que más me gustó del lenguaje cuando lo aprendí, y cuando leí el libro Learning Python.
Sin embargo, en este caso tienen un problema: los elementos se representan ordenados. Fijate en la salida de la función "modificada" que pego abajo para comprobarlo.
Para quienes no los conozcan, los conjuntos en Python son un tipo de objeto "colección de elementos sin repetición y sin orden", y que soporta las operaciones usuales de conjuntos.
Detalles:
http://docs.python.org/library/sets.html#set-objects http://docs.python.org/library/stdtypes.html#set
Ahora un ejemplo con las sugerencias aplicadas, agregando también una comprobación de que max sea mayor que min
Código Python:
Ver originalimport random
def aleatorios(cantidad, min, max):
numeros = set()
if max < min:
min, max = max, min
if cantidad > (max-min):
print "solamente puedo generar %d numeros" % (max-min)
cantidad = max - min
while len(numeros) < cantidad:
numeros.add(random.randint(min, max))
return numeros