Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Daor02 en 2 Julio 2016, 05:16 am



Título: Ayuda en Python! Hacer un menú dentro de otro menú con diccionarios
Publicado por: Daor02 en 2 Julio 2016, 05:16 am
Buenas! Sé que este foro no es tanto para Python, pero tengo un problema que me está dejando mal!

Quiero hacer un menú que funcione dentro de otro. El primer menú me funciona; es decir, el general, pero el menú que va dentro de ese no... y hago exactamente lo mismo que con el primero!

Por ahora me interesa que funcionen las opciones 1-1; es decir, si aparece en la pantalla Si este mensaje aparece, el segundo menú, con opción 1, funciona., significa que encontramos la falla!

Dejo el código:

----------------------------------------------------------------------------------------------------------------------------------------------------

Código
  1. def pulgadas_a_milimetros():
  2.    print('Si este mensaje aparece, el segundo menú, con opción 1, funciona.')
  3.  
  4. def medidas_de_longitud():
  5.  
  6.    print("\nMEDIDAS DE LONGITUD \n")
  7.  
  8.    conversion=int(input('Escoja la conversión que desea: \n1. Pulgadas a milímetros. \n2. Yardas a metros. \n3. Millas a kilómetros.'
  9.                         '\n4. Pulgadas² a centímetros². \n5. Pies² a metros² \n6. Yardas² a metros² \n7. Acres a hectáreas \n8. Millas² a kilómetros². \n'))
  10.    opcion_conversion = {1: pulgadas_a_milimetros, 2: yardas_a_metros, 3: millas_a_kilometros, 4: pulgadas_c_a_centimetros_c, 5: pies_c_a_metros_c, 6: yardas_c_a_metros_c, 7: acrea_a_hectareas, 8: millas_a_kilometros}
  11.  
  12. # A partir de aquí no hace el try, sino que ejecuta el except al final del código :(
  13.  
  14.    try:
  15.        opcion_conversion[conversion]()
  16.    except:
  17.        print('No ha escogido una opción válida.')
  18.  
  19. def medidas_de_volumen():
  20.    print("Por Programar")
  21.  
  22. def medidas_de_peso():
  23.    print("Por Programar")
  24.  
  25. medida=int(input('Escoja las medidas que desea: \n1. Medidas de Longitud. \n2. Medidas de Volumen. \n3. Medidas de Peso. \n'))
  26.  
  27. opcion_medida = {1: medidas_de_longitud, 2: medidas_de_volumen, 3: medidas_de_peso}
  28.  
  29. try:
  30.    opcion_medida[medida]()
  31. except:
  32.    print('No ha escogido una opción válida.')

----------------------------------------------------------------------------------------------------------------------------------------------------

Gracias!


Título: Re: Ayuda en Python! Hacer un menú dentro de otro menú con diccionarios
Publicado por: tincopasan en 3 Julio 2016, 05:28 am
hola:
varias cosas--
1) esto debería estar en scripting no en programación general.
2) debes usar las etiquetas Geshi (normas del foro)
3) indudablemente no has entendido que hace y como se usa try,except
4)no miras con atención
Citar
Quiero hacer un menú que funcione dentro de otro. El primer menú me funciona; es decir, el general, pero el menú que va dentro de ese no... y hago exactamente lo mismo que con el primero!
pues no estás haciendo lo mismo! ok ¿dónde está el error?
try es para detectar errores de alguna manera, o sea que básicamente salvo que tu lo aclares detecta cualquier error y estás cometiendo uno enorme!
¿dónde declaraste cada def del 2 menú declarados en el diccionario ? para resumir por lo menos deberías intentar algo así:
Código
  1. #-*- coding:utf-8 -*-
  2. def yardas_a_metros():
  3.    pass
  4.  
  5. def millas_a_kilometros():
  6.    pass
  7.  
  8.  
  9. def  pulgadas_c_a_centimetros_c():
  10.    pass
  11.  
  12. def pies_c_a_metros_c():
  13.    pass
  14.  
  15. def yardas_c_a_metros_c():
  16.    pass
  17.  
  18. def acrea_a_hectareas():
  19.    pass
  20.  
  21. def millas_a_kilometros():
  22.    pass
  23.  
  24.  
  25. def pulgadas_a_milimetros():
  26.    print('Si este mensaje aparece, el segundo menú, con opción 1, funciona.')
  27.  
  28. def medidas_de_longitud():
  29.  
  30.    print("\nMEDIDAS DE LONGITUD \n")
  31.  
  32.    conversion=int(input('Escoja la conversión que desea: \n1. Pulgadas a milímetros. \n2. Yardas a metros. \n3. Millas a kilómetros.'
  33.                         '\n4. Pulgadas² a centímetros². \n5. Pies² a metros² \n6. Yardas² a metros² \n7. Acres a hectáreas \n8. Millas² a kilómetros². \n'))
  34.    opcion_conversion = {1: pulgadas_a_milimetros, 2: yardas_a_metros, 3: millas_a_kilometros, 4: pulgadas_c_a_centimetros_c, 5: pies_c_a_metros_c, 6: yardas_c_a_metros_c, 7: acrea_a_hectareas, 8: millas_a_kilometros}
  35.  
  36. # A partir de aquí no hace el try, sino que ejecuta el except al final del código :(
  37.  
  38.    try:
  39.        opcion_conversion[conversion]()
  40.    except:
  41.        print('No ha escogido una opción válida.')
  42.  
  43. def medidas_de_volumen():
  44.    print("Por Programar")
  45.  
  46. def medidas_de_peso():
  47.    print("Por Programar")
  48.  
  49. medida=int(input('Escoja las medidas que desea: \n1. Medidas de Longitud. \n2. Medidas de Volumen. \n3. Medidas de Peso. \n'))
  50.  
  51. opcion_medida = {1: medidas_de_longitud, 2: medidas_de_volumen, 3: medidas_de_peso}
  52.  
  53. try:
  54.    opcion_medida[medida]()
  55. except:
  56.    print('No ha escogido una opción válida.')
  57.  

5) si bien python es libre en lo que nos deja hacer tendrías que mejorar tu lógica de programación porque está bastante pobre, hay clases, main, if, else,etc. que mejorarían tu código notablemente, aunque es cierto que así también funciona.
Saludos.