1

¿Cómo hacer un menú interactivo que permita repetir la elección si ingresa una no válida?

Actualmente estoy desarrollando “el ahorcado” para poder jugarlo con distintas temáticas. Este menú se basa en uno que le deje escribir al usuario si o si alguna de las opciones dadas, y si no, que le imprima un mensaje de error y que tenga la oportunidad de volver a escribir la opción.

Este menú lo uso mucho, pero voy a dar el ejemplo de cómo lo hice para elegir la temática del juego.

PASO 1
Empezamos con un ‘while True’, el cual nos iterará un bucle infinito:

whileTrue:

PASO 2
Iniciaremos el bloque ‘try’, donde colocaremos las instrucciones del menú. El try nos permite ejecutar que el código intente ejecutar ciertas acciones, y si ocurre una excepción (un error), en lugar de que el programa se detenga, se ejecutará un bloque de código definido (‘except’). Si quieres saber más sobre este tema, puedes encontrar más información acá: https://www.w3schools.com/python/python_try_except.asp

whileTrue:
    try:

PASO 3
Ahora colocaremos un input para que el usuario escoja una de las opciones dadas:

while True:
    try:
        eleccion = int(input('Ingresa tu elección: '))

PASO 4
Es hora de hacer el bloque de código en donde la elección dada por el usuario definirá, en este caso, el tema que quiera elegir. Utilizaremos las funciones ‘if’ y ‘elif’:

whileTrue:
        try:
            eleccion = int(input('Ingresa tu elección: '))
            if eleccion >= 1and eleccion <= 4:
                if eleccion == 1:
                    tema = 'Animales'elif eleccion == 2:
                    tema = 'Comidas'elif eleccion == 3:
                    tema = 'Países'elif eleccion == 4:
                    tema = 'Ciudades'

PASO 5
Para cerrar con el primer bloque if, utilizaremos un break, el cual nos sacará del ciclo infinito si cuando la elección sea válida, ya que al no tener una condición que lo haga falso, el bucle continuará hasta que encuentre una declaración ‘break’ dentro de él:

whileTrue:
        try:
            eleccion = int(input('Ingresa tu elección: '))
            if eleccion >= 1and eleccion <= 4:
                if eleccion == 1:
                    tema = 'Animales'elif eleccion == 2:
                    tema = 'Comidas'elif eleccion == 3:
                    tema = 'Países'elif eleccion == 4:
                    tema = 'Ciudades'break

PASO 6
Después de terminar con el bloque del primer ‘if’, pondremos un bloque ‘else’ para que nos imprima un mensaje si la elección no es válida (es otro número que no sea el dado):

whileTrue:
        try:
            eleccion = int(input('Ingresa tu elección: '))
            if eleccion >= 1and eleccion <= 4:
                if eleccion == 1:
                    tema = 'Animales'elif eleccion == 2:
                    tema = 'Comidas'elif eleccion == 3:
                    tema = 'Países'elif eleccion == 4:
                    tema = 'Ciudades'breakelse:
                print('INGRESA UN NÚMERO VÁLIDO.')

PASO 7
El último paso es escribir un ‘except’, el cuál funcionará como bloque por si ocurre una excepción de tipo ‘ValueError’ al convertir la elección del usuario a u número entero (por ejemplo, si en vez de un número el usuario ingresa una letra). De esta manera nos quedará el código final:

whileTrue:
        try:
            eleccion = int(input('Ingresa tu elección: '))
            if eleccion >= 1and eleccion <= 4:
                if eleccion == 1:
                    tema = 'Animales'elif eleccion == 2:
                    tema = 'Comidas'elif eleccion == 3:
                    tema = 'Países'elif eleccion == 4:
                    tema = 'Ciudades'breakelse:
                print('INGRESA UN NÚMERO VÁLIDO.')
        except ValueError:
            print('INGRESA UN NÚMERO VÁLIDO.')

CONCLUSIÓN
El código mostrado anteriormente es un ejemplo de cómo se podría utilizar. Sin embargo, yo utilizo una función que me permita imprimir el mensaje de error ya que, como dije anteriormente, es un menú que utilizo varias veces. A demás, al principio de todo le muestro al usuario las opciones válidas:

deferror_numero():
    print('INGRESA UN NÚMERO VÁLIDO.')

print(f'\n{nombre}, quiero que elijas el tema que más te guste para comenzar a jugar:\n')
print('1 - Animales')
print('2 - Comidas')
print('3 - Países')
print('4 - Ciudades')
whileTrue:
    try:
        eleccion = int(input('Ingresa tu elección: '))
        if eleccion >= 1and eleccion <= 4:
            if eleccion == 1:
                tema = 'Animales'elif eleccion == 2:
                tema = 'Comidas'elif eleccion == 3:
                tema = 'Países'elif eleccion == 4:
                tema = 'Ciudades'breakelse:
            error_numero()
    except ValueError:
        error_numero()

Espero que te haya servido de algo 😃

Escribe tu comentario
+ 2