hola disculpe mi tema tan burdo de expresarme soy nuevo en el foro, y en general nuevo en el uso de python, quiero usar un diccionario para implementar un menú, pero al hacerlo salta inmediatamente a la función en lugar de continuar el código, alguno de ustedes tendrá alguna idea de como puedo solucionarlo, se los agradecería mucho.def funcion1():
print("Funcion 1")
def funcion2():
print("Funcion 2")
def menu():
dicionario={'1':funcion1(), '2':funcion2()}
opcion=str(input("Ingrese una opcion"))
diccionario["opcion"]
menu()
Funcion 1
Funcion 2
Ingrese una opcion1
Traceback (most recent call last):
File "C:/Users/Raziel/AppData/Local/Programs/Python/Python36-32/ejemplo.py", line 12, in <module>
menu()
File "C:/Users/Raziel/AppData/Local/Programs/Python/Python36-32/ejemplo.py", line 10, in menu
diccionario["opcion"]
NameError: name 'diccionario' is not defined
Porque lo estás llamando como variable no como función, trata de ponerle los paréntesis después del llamado dinámico. Así: diccionario["opcion"]() aver que pasa.
varias cosas, pero para no hacerla larga solo dos:
1)si te fijas "diccionario" no existe! ya que creaste "dicionario" o sea sobra o falta una "c"
2)no es necesario usar str, ya que input devuelve una cadena!
tu forma no creo que funcione, hay mejores formas de usar este metódo de menus con diccionario, pero ese es otro tema.
ya funciono!, fue gracias a sus consejos el código final fue el siguiente:def funcion1():
print("Funcion 1")
def funcion2():
print("Funcion 2")
def menu():
glosario={'1':funcion1, '2':funcion2}
opcion=input("Ingrese una opcion")
glosario[opcion]()
menu()
Ingrese una opcion1
Funcion 1
>>>
se que debe haber mejores formas, pero mi profesor es algo "especial" nuevamente muchas gracias por sus aportaciones.
podrías hacer la verificación:
if opcion in glosario:
# ok...
else:
# opcion incorrecta
Te recomiendo procesar el input con .strip() si es que no es nulo, a veces pasa que la gente le agrega espacios en blanco a las opciones antes de presionar enter, recuerda que es un string no un integer.
muy buena sugerencia gracias por el aporte, siempre es bueno validar todo lo que se pueda