es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo hacer un ciclo de validación para asegurarme de que el usuario introduzca la cantidad correcta de veces en una entrada .split?

Puede parecer un poco ridículo, pero he creado un método muy largo para validar un número de tarjeta de crédito. Soy bastante nuevo en Python y en programación en general, y quería hacer que fuera capaz de validar la cantidad de dígitos, comprobar si la entrada solo contiene números, y también imprimir la entrada dividida de esta manera: xxx-xxxx-xxxx.

Hasta ahora tengo esto (por favor, disculpen lo desordenado y probablemente innecesario que es):

CreditOne = 0
CreditTwo = 0
CreditThree = 0

while True:
    CreditOne, CreditTwo, CreditThree = input("Ingrese el número de tarjeta de crédito (separados por espacios): ").split()
    CreditCardList = [CreditOne, CreditTwo, CreditThree]
    CreditCardNumber = "-".join(CreditCardList)
    if CreditOne.isdigit() and CreditTwo.isdigit() and CreditThree.isdigit() and len(CreditOne) == 4 and len(CreditTwo) == 4 and len(CreditThree) == 4:
        break
    elif CreditOne == 0 or CreditTwo == 0 or CreditThree == 0:
        print("Por favor ingrese un número de tarjeta de crédito válido.")
        continue
    else:
        print("Por favor ingrese un número de tarjeta de crédito válido.")
        continue

print(CreditCardNumber)

Funciona en su mayoría, excepto por el hecho de que si el usuario ingresa algo como 4 4 o una sola letra, obtendrá un ValueError:

ValueError: no hay suficientes valores para desempaquetar (se esperaban 3, se obtuvo 1).

Básicamente lo que he estado tratando de hacer es crear una validación que permita que el bucle continúe después del error y vuelva al inicio del bucle. He intentado usar un bucle try-except y no funcionó, así que quería obtener una segunda opinión sobre esto y quizás la ayuda de alguien que entienda lo que estoy intentando lograr con mi código.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás tratando de crear un bucle de validación para verificar si la entrada del usuario es válida para un número de tarjeta de crédito. Podrías usar un bloque try/except para capturar el ValueError y pedirle al usuario que ingrese un número de tarjeta de crédito válido. También podrías usar un bucle while para seguir pidiendo al usuario hasta que ingrese un número de tarjeta de crédito válido.

    Aquí te mostramos un ejemplo de cómo hacer esto:

    while True: 
        try: 
            CreditOne, CreditTwo, CreditThree = input("Ingresa el número de tu tarjeta de crédito (separado por espacios): ").split()
            CreditCardList = [CreditOne, CreditTwo, CreditThree]
            CreditCardNumber = "-".join(CreditCardList)
            if CreditOne.isdigit() and CreditTwo.isdigit() and CreditThree.isdigit() and len(CreditOne) == 4 and len(CreditTwo) == 4 and len(CreditThree) == 4:
                break
            else:
                print("Por favor, ingresa un número de tarjeta de crédito válido.")
                continue
        except ValueError:
            print("Por favor, ingresa un número de tarjeta de crédito válido.")
            continue
    
    print(CreditCardNumber)
    

Comments are closed.