Foros Python

Versión completa: Números aleatorio, como hacer que no se repitan...
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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...

Código:
import random

numeros = [random.randint(1,50) for i in range(10)]
orden = ("Primer", "Segundo", "Tercer", "Cuarto", "Último")

intentos = 1
indice = 0

print("
La lista cuenta con 10 números del 1 al 50")
print(" Tiene un máximo de 5 intentos para acertar")

while True:
    try:
        numero = int(input("
Ingrese un número entero a buscar...: "))
        if numero in numeros:
            print(f"
el número {numero} existe en la lista.")
            break
        else:
            print(f"
{orden[indice]} intento fallido, el número {numero} no existe.")
            if intentos == 5:
                break
            intentos += 1
            indice += 1
    except ValueError:
        input("
Por favor ingrese un número entero, <Enter> para un nuevo intento...")
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:

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

Podrías usar algo así:

Código:
numeros = []

while len(numeros) < 10:
    numero_aleatorio = random.randint(1, 50)
    if numero_aleatorio not in numeros:
        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í:

Código:
while True:
    try:
        numero = int(input("
Ingrese un número entero a buscar...: "))
    except ValueError:
        input("
Por favor ingrese un número entero, <Enter> para un nuevo intento...")
    else:
        if numero in numeros:
            print(f"
el número {numero} existe en la lista.")
            break
        else:
            print(f"
{orden[indice]} intento fallido, el número {numero} no existe.")
            if intentos == 5:
                break
            intentos += 1
            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
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.
Excelente, Daniel. No conocía la función random.sample(), muy interesante.

Saludos