Test Foro de elhacker.net SMF 2.1

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 (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
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 (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.
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:

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