Foros Python
Números aleatorio, como hacer que no se repitan... - Versión para impresión

+- Foros Python (https://foro.recursospython.com)
+-- Foro: Desarrollo (https://foro.recursospython.com/forumdisplay.php?fid=1)
+--- Foro: General (https://foro.recursospython.com/forumdisplay.php?fid=9)
+--- Tema: Números aleatorio, como hacer que no se repitan... (/showthread.php?tid=1039)



Números aleatorio, como hacer que no se repitan... - Daniel.py - 09-10-2021

Hola Francisco, hola a todos ¿como están?, el híper danielito no para ni en los finde XL(Argentina) jajajajaja.
Al grano, x mas que busco(ejemplos en la web) no logro hacer que los números aleatorios no se repitan, ¿me
podrían dar una manito? y de paso me podrían decir en que puedo mejorar el programa.-
Desde ya gracias, abrazo...

  1. import random
  2.  
  3. numeros = [random.randint(1,50) for i in range(10)]
  4. orden = ("Primer", "Segundo", "Tercer", "Cuarto", "Último")
  5.  
  6. intentos = 1
  7. indice = 0
  8.  
  9. print("\n La lista cuenta con 10 números del 1 al 50")
  10. print(" Tiene un máximo de 5 intentos para acertar")
  11.  
  12. while True:
  13.     try:
  14.         numero = int(input("\n Ingrese un número entero a buscar...: "))
  15.         if numero in numeros:
  16.             print(f"\n el número {numero} existe en la lista.")
  17.             break
  18.         else:
  19.             print(f"\n {orden[indice]} intento fallido, el número {numero} no existe.")
  20.             if intentos == 5:
  21.                 break
  22.             intentos += 1
  23.             indice += 1
  24.     except ValueError:
  25.         input("\n Por favor ingrese un número entero, <Enter> para un nuevo intento...")



RE: Números aleatorio, como hacer que no se repitan... - Francisco - 11-10-2021

Hola, Daniel.

Me parece bien que hayas aprovechado el fin de semana largo para "meterle" a Python. Por acá aprovechamos a descansar... Smile

Está muy bien el código. Para que los números no se repitan, sería difícil hacerlo en una línea. En vez de esto:

  1. numeros = [random.randint(1,50) for i in range(10)]


Podrías usar algo así:

  1. numeros = []
  2.  
  3. while len(numeros) < 10:
  4. numero_aleatorio = random.randint(1, 50)
  5. if numero_aleatorio not in numeros:
  6. numeros.append(numero_aleatorio)


Algo que podrías optimizar, además, es dejar dentro del try/except únicamente la línea de código que puede provocar el ValueError, y el resto ponerlo en un "else", así:

  1. while True:
  2. try:
  3. numero = int(input("\n Ingrese un número entero a buscar...: "))
  4. except ValueError:
  5. input("\n Por favor ingrese un número entero, <Enter> para un nuevo intento...")
  6. else:
  7. if numero in numeros:
  8. print(f"\n el número {numero} existe en la lista.")
  9. break
  10. else:
  11. print(f"\n {orden[indice]} intento fallido, el número {numero} no existe.")
  12. if intentos == 5:
  13. break
  14. intentos += 1
  15. indice += 1


Es una buena práctica siempre poner la mínima cantidad de código posible dentro de un try/except, para evitar capturar errores potenciales en otras líneas.

Saludos


RE: Números aleatorio, como hacer que no se repitan... - Daniel.py - 11-10-2021

Gracias francisco x tus consejos y x ocuparte, a continuación expongo la manera de lograr lo mismo de esta manera.
=================================
numeros = random.sample(range(50), 10)
=================================
En cuanto a tus código lo voy a repasar mas adelante pq ahora mismo estoy tratando de entender (los generadores -
yield y yield from) y créeme que x mas que leo me cuesta, pero como siempre lo voy a lograr.-
En cuanto a descansar te felicito hay que disfrutar lo mas posible y aunque no hace falta te lo digo, no me hagas
caso en cuanto al tiempo yo soy jubilado y tengo mucho mucho tiempo para estudiar.-
slds, Daniel.


RE: Números aleatorio, como hacer que no se repitan... - Francisco - 12-10-2021

Excelente, Daniel. No conocía la función random.sample(), muy interesante.

Saludos