domingo, 19 de agosto de 2018

Aleatorios con excepciones

Reto: Aleatorios con excepciones

Generar números aleatorios pares entre 100 y 130, salvo 110 y 120.

Veamos varios casos, que pueden ser:

  • con repetición
  • sin repetición




Método 1

Importamos la librería random. Creamos la lista L inicialmente vacía. Nos metemos en un bucle for con 16 ciclos. Por cada vuelta generamos un número aleatorio par entre 100 y 130. Si el número generado no es 110, ni 120, entonces se añade a la lista con append.
Finalmente se imprime la lista y luego se vuelve a imprimir ordenada con sorted.

import random
L = []
for i in range(16):
    x = random.randrange(100,131,2)
    if x not in (110,120):
        L.append(x)
print(L)
print(sorted(L))


Método 2

Este método realiza un tratamiento similar al anterior pero usa List Comprehensions para comprimir el código en una sola línea.

import random
L=[r for r in [random.randint(100,130) for s in range(30)] if r%2==0 and r not in (110,120)]
print(L)
print(sorted(L))


Método 3

En este caso no importamos la librería random completa, únicamente importamos el método randint que genera números aleatorios entre 50 y 65. Con un if eliminamos aquellos valores que sean 55 o 60. El valor de la variable i que supere el filtro se multiplica por 2 para obtener los pares entre 100 y 130, excluidos del tratamiento los valores 110 y 120.

from random import randint
L = [i*2 for i in [randint(50,65) for j in range(16)] if i not in (55,60)]
print(L)
print(sorted(L))


Método 4

Este método es similar al método anterior si bien no es necesario multiplicar i por dos ya que los valores generados exigimos que sean pares incluyéndolo como una condición adicional en el if.

import random
L = [i for i in [random.randint(100,130) for j in range(30)] if i not in (110,120) and i%2==0]
print(L)
print(sorted(L, reverse=True))


Método 5

Usamos rando.sample que nos permite elegir una muestra aleatoria entre los valores generados. En este caso los valores obtenidos serán sin repetición gracias a que este método está diseñado para elegir sin repetición de una secuencia de números.

import random
L=[i for i in random.sample(range(100,131,2),16) if i not in (110,120)]
print(L)
L.sort(reverse=True)
print(L)


Método 6

Usamos random.shuffle sobre la lista generada previamente. Este método devuelve una nueva lista mezclada, lo que permite obtener un resultado sin repetición.

import random
L=[i for i in range(100,131,2) if i!=110 and i!=120]
random.shuffle(L) #desordena la lista
print(L)
print(sorted(L))

No hay comentarios:

Publicar un comentario