Intentando hacer un ciclo a través de Try y Except hasta que se introduzca la entrada correcta.
Situación:
Estoy creando un juego de “Lanzamiento de Dados” para la escuela. Tengo una función para validar la entrada del usuario sobre cuánto quieren “apostar” en esta ronda. Quiero capturar todos los errores, mientras imprimo diferentes mensajes de error según el error y vuelva a pedir la entrada de nuevo.
Problema:
Capturé todos los errores, sin embargo, no puedo encontrar la manera de anidar mi primer bloque try-except para que si se ingresa un entero dos veces, continuará capturando el error.
Aquí está mi código (el argumento de talentos se utilizará más adelante en la función):
def validar_apuesta(talents):
"""
Valida la entrada del usuario para la apuesta, verifica las cadenas, los negativos y los números excesivamente altos
"""</p>
<pre><code># formatea la solicitud de apuestas
print('{apuesta:-<34}'.format(apuesta="¿Cuánto quieres apostar? "), end=" ")
try:
# obtiene la entrada del usuario para la apuesta, captura los errores
# de tipo y valor, pregunta de nuevo
apuesta = int(input())
except:
apuesta = int(input('La apuesta debe ser un número entero: '))
# si la apuesta es negativa o 0, imprime un error, pregunta de nuevo
while apuesta <= 0:
# captura los errores de tipo y valor dentro del bucle
try:
apuesta = int(input('La apuesta no puede ser cero o negativa: '))
except:
apuesta = int(input('La apuesta debe ser un número entero no negativo: '))
# si la apuesta es mayor que los talentos restantes, imprime un error, pregunta de nuevo
while apuesta > int(talents):
# captura los errores de tipo y valor dentro del bucle
try:
apuesta = int(input('La apuesta no puede ser mayor que los talentos restantes: '))
except:
apuesta = int(input('La apuesta debe ser un número entero y menor que los talentos restantes: '))
return apuesta
</code></pre>
<p>```
Este es el resultado de la primera iteración después de que se ingresa una cadena:
Bienvenido al juego de Lanzamiento de Dados
Talentos que tienes para jugar: 100
1 – Apuesta de Campo
2 – Apuesta de Pase
3 – Salir
Elección ————————— 1
¿Cuánto quieres apostar? — H
La apuesta debe ser un número entero:
“`
La solución:
Si se ingresa de nuevo una cadena, el bloque try-except no lo recogerá. Me gustaría que repita “La apuesta debe ser un número entero” hasta que se ingrese un entero.
Ya intenté anidar el bloque try-except dentro de un bucle while que actualiza una variable con “True” o “False” si hay o no un error, pero eso no funcionó. He intentado muchas otras cosas también, pero simplemente no puedo encontrar la manera de resolverlo. Cualquier ayuda sería muy apreciada.
davy.ai
Para iterar el primer bloque try-except y seguir capturando errores si se ingresa un entero dos veces, puede utilizar un bucle while con una variable de bandera booleana. Así es como puede modificar el código:
Con esta modificación, el bloque try-except seguirá iterando hasta que la entrada sea un entero. La variable de bandera booleana
valid_input
se establece inicialmente en False, y solo se volverá True cuando se ingrese un entero. Si la entrada no es un entero, el bloque except imprimirá un mensaje de error y el bucle while se repetirá hasta que se proporcione una entrada válida. Una vez que se proporciona una entrada válida, el bucle while finalizará y el código avanzará al siguiente paso.