duda en el manejo de diccionarios python

Iniciado por crosvid, 5 Abril 2017, 08:58 AM

0 Miembros y 1 Visitante están viendo este tema.

crosvid

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.
Código (python) [Seleccionar]
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()
Código (python) [Seleccionar]
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

WHK

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.

tincopasan

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.

crosvid

ya funciono!, fue gracias a sus consejos el código final fue el siguiente:
Código (python) [Seleccionar]
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()

Código (python) [Seleccionar]
Ingrese una opcion1
Funcion 1
>>>

se que debe haber mejores formas, pero mi profesor es algo "especial" nuevamente muchas gracias por sus aportaciones.

WHK

#4
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.

crosvid

muy buena sugerencia gracias por el aporte, siempre es bueno validar todo lo que se pueda