viernes, 24 de agosto de 2018

Alternos con excepciones

Reto: Alternos con excepciones

Imprimir diez números aleatorios sin repetición entre 100 y 130, excepto los números 110, 115, 120 y alternando par, impar, comenzando por par.




Método 1

Importamos randint de la librería random. Creamos la lista L inicialmente vacía. Nos metemos en un bucle while con 10 ciclos. Por cada vuelta generamos un número aleatorio par entre 100 y 130. Si el número generado no es 110, ni 115, ni 120, y no está en la lista L, para evitar repeticiones, entonces nos metemos en otro condicional if.
En el segundo condicional se analiza la condición de que el número aleatorio sea par y que el lugar (n) que toca sea par, para garantizar que se trata de la ubicación donde ha de ir un número par, entonces se añade a la lista con append. y el contador n se incrementa en 1. La otra condición del elif analiza si el número aleatorio en impar y toca que la ubicación donde tenga que ir sea también impar, entonces se añade con append y el contador n se incrementa en 1.
Finalmente se imprime la lista y luego se vuelve a imprimir ordenada con sort.

from random import randint
n=0
L=[]
while n<10:
  t=randint(100,131)
  if t not in (110,115,120) and t not in L:
    if t%2==0 and n%2==0: #par y toca par
      L.append(t)
      n+=1
    elif t%2!=0 and n%2!=0: #impar y toca impar
      L.append(t)
      n+=1
print(L)
L.sort()
print(L)


Método 2

Generamos la lista Lp que contendrá ordenados todos los números pares posibles, que son los comprendidos entre 100 y 130 salvo el 110 y el 120.
Generamos la lista Li que contendrá ordenados todos los números impares posibles, que son los comprendidos entre 100 y 130 salvo el 115.
Imprimimos las listas Lp y Li.
Con random.shuffle barajamos cada lista. Creamos la lista L, inicialmente vacía. Nos metemos en un bucle for de 5 ciclos. Aunque nos piden 10 números en este reto el bucle for es de 5 ciclos ya que en cada uno de ellos se genera una pareja de números, el primero par y el segundo impar. Para generar el número par se toma el primer par de la lista de pares Lp, que ya se desordenó anteriormente, y para generar el número impar se hace lo mismo con la lista de impares Li.
El resultado será una lista de números L que contiene 5 parejas de números par, impar, que comienzan por par y se van alternando.

import random
Lp=[i for i in range(100,131,2) if i not in (110,120)] #genera todos los pares posibles
Li=[i for i in range(101,131,2) if i!=115]             #genera todos los impares posibles
print(Lp)
print(Li)
random.shuffle(Lp) #baraja los pares
random.shuffle(Li) #baraja los impares
L=[]
for k in range(5): # son 5 parejas de par, impar.
  L.append(Lp[k])  # toma el pare de indice k
  L.append(Li[k])  # toma el impar de indice k
print(L)

No hay comentarios:

Publicar un comentario