Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: crosvid en 5 Abril 2017, 08:58 am



Título: duda en el manejo de diccionarios python
Publicado por: crosvid en 5 Abril 2017, 08:58 am
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
  1. def funcion1():
  2.    print("Funcion 1")
  3.  
  4. def funcion2():
  5.    print("Funcion 2")
  6.  
  7. def menu():
  8.    dicionario={'1':funcion1(), '2':funcion2()}
  9.    opcion=str(input("Ingrese una opcion"))
  10.    diccionario["opcion"]
  11.  
  12. menu()
Código
  1. Funcion 1
  2. Funcion 2
  3. Ingrese una opcion1
  4. Traceback (most recent call last):
  5.  File "C:/Users/Raziel/AppData/Local/Programs/Python/Python36-32/ejemplo.py", line 12, in <module>
  6.    menu()
  7.  File "C:/Users/Raziel/AppData/Local/Programs/Python/Python36-32/ejemplo.py", line 10, in menu
  8.    diccionario["opcion"]
  9. NameError: name 'diccionario' is not defined


Título: Re: duda en el manejo de diccionarios python
Publicado por: WHK en 5 Abril 2017, 10:12 am
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.


Título: Re: duda en el manejo de diccionarios python
Publicado por: tincopasan en 5 Abril 2017, 16:00 pm
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.


Título: Re: duda en el manejo de diccionarios python
Publicado por: crosvid en 5 Abril 2017, 16:12 pm
ya funciono!, fue gracias a sus consejos el código final fue el siguiente:
Código
  1. def funcion1():
  2.    print("Funcion 1")
  3.  
  4. def funcion2():
  5.    print("Funcion 2")
  6.  
  7. def menu():
  8.    glosario={'1':funcion1, '2':funcion2}
  9.    opcion=input("Ingrese una opcion")
  10.    glosario[opcion]()
  11.  
  12. menu()
Código
  1. Ingrese una opcion1
  2. Funcion 1
  3. >>>
se que debe haber mejores formas, pero mi profesor es algo "especial" nuevamente muchas gracias por sus aportaciones.


Título: Re: duda en el manejo de diccionarios python
Publicado por: WHK en 5 Abril 2017, 23:17 pm
podrías hacer la verificación:

Código:
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.


Título: Re: duda en el manejo de diccionarios python
Publicado por: crosvid en 6 Abril 2017, 18:52 pm
muy buena sugerencia gracias por el aporte, siempre es bueno validar todo lo que se pueda