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 (con repetición)
- Método 2 (con repetición)
- Método 3 (con repetición)
- Método 4 (con repetición)
- Método 5 (sin repetición)
- Método 6 (sin repetición)
Método 1
Importamos la libreríarandom
. 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íarandom
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 multiplicari
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
Usamosrandom.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
Usamosrandom.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))
import random
ResponderEliminarfor i in range(10):
x =random.randint(100,131)
if x not in (110,120):
print(x)
Este comentario ha sido eliminado por el autor.
ResponderEliminar