[PYTHON] Menu opciones ¿Con funciones es lo correcto?

Iniciado por Yidu, 28 Marzo 2013, 18:42 PM

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

Yidu

Hola de nuevo  :D

Me estoy liando un poco con el tema de los menús de opciones en Python. Querría saber cual es la forma correcta de hacerlos. Es decir, para crear el típico ejemplo de una calculadora.

Por lo que he podido de ver, de los ejemplos que están por la red, la mayoría recomiendan usar funciones. Osea, que la primera función sea (por ejemplo) menu(). Y dentro de esta función, todas las opciones. Luego, dependiendo la opción que escojamos, nos mande a otra función...sumar(), restar(),etc...

Otros programadores, usan muchos if y repiten en cada opción, los raw_input dentro de cada función. Yo esto, no lo encuentro muy correcto.

Me gustaría ver si alguien puede postear la forma correcta de hacerlo. Pero sin recurrir a la POO. Ya que todavía no he llegado a eso.... :-\

Quiero aprender como es la mejor manera de hacer un menú. Entiendo que hay muchas maneras de hacerlo. Y quiero evitar recurrir a muchos if, elif, else, raw_inputs, ...

...Un saludo!

daryo

#1
no hay una unica forma correcta de hacerlo. Si no fuera asi la programacion seria muy aburrida no? XD

para mi la mejor calculadora es esta
;D

Código (python) [Seleccionar]

n=input("escriba su operacion matematica a realizar>")
print n

buenas

Yidu

Cita de: daryo en 28 Marzo 2013, 18:55 PM
no hay una unica forma correcta de hacerlo. Si no fuera asi la programacion seria muy aburrida no? XD


Ya, eso lo entiendo. Pero supongo, que cuantos menos código, mejor. Y claro, he visto ejemplos de como hacer una calculadora con whiles y un monton de raw_input. En cambio, otros optan por usar funciones. En este último caso, veo el código mas ordenado y comprensible. Eso sin contar que es mas fácil volver a llamar bloques de código llamando a esas funciones de nuevo.

Pienso, que abusando de los ciclos, esta uno mas atado al código.

Yidu

#3
Cita de: daryo en 28 Marzo 2013, 18:55 PM

para mi la mejor calculadora es esta
;D

Código (python) [Seleccionar]

n=input("escriba su operacion matematica a realizar>")
print n



También está la opción de comprar una calculadora en los chinos y no teclear una línea de código  ;D

A ver si alguien se anima y postea un ejemplo mas ilustrativo. A lo que me refiero es no ir tecleando en cada opción líneas de código parecido. No tiene por que ser una calculadora expresamente, eh...

En este enlace http://foro.elhacker.net/scripting/python_menu_con_while-t307856.15.html se recurre a los while. Yo pregunto como hacerlo con funciones.

daryo

#4
Código (python) [Seleccionar]

def suma(a,b):
    return a+b
def resta(a,b):
    return a-b
def multiplicar(a,b):
    return a*b
def dividir(a,b):
    return a/b

while True:
    print """
teclee:

1 para sumar
2 para restar
3 para multiplicqar
4 para dividir
"""
    opcion=input(">")
    a=input("digite el primer numero:")
    b=input("digite el primer numero:")
    if opcion == 1:
        print suma(a,b)
    elif opcion == 2:
        print resta(a,b)

    elif opcion == 3:
        print multiplicar(a,b)

    elif opcion == 4:
        print dividir(a,b)

    else:
        print "opcion incorrecta"
buenas

Yidu

¡Muchas gracias daryo!. A esto me refería. Es que he visto ejemplos que abusan de los whiles y repetición constante de los inputs. Supongo que luego se puede definir el menu como una función. Y así, si estamos en otra parte del programa, poder llamarlo de nuevo. Cosa mas complicada si es un while ¿No?

Voy a practicar e iré posteando mis avances. Un saludo!

daryo

Cita de: Yidu en 28 Marzo 2013, 19:32 PM
¡Muchas gracias daryo!. A esto me refería. Es que he visto ejemplos que abusan de los whiles y repetición constante de los inputs. Supongo que luego se puede definir el menu como una función. Y así, si estamos en otra parte del programa, poder llamarlo de nuevo. Cosa mas complicada si es un while ¿No?

Voy a practicar e iré posteando mis avances. Un saludo!
por nada jeje

claro el menu puede ser una funcion y llamarlo luego :)

buenas

0x5d

Hola, muy buenos días.

Veo que ya te respondieron, sin embargo me gustaría poder exponer mi respuesta.


No necesariamente debemos crear una función con el menú de la aplicación a crear, pues eso podría ir dentro de un bucle "Infinito" (o mientras sea True), mediante el popular while. Posteriormente realizar un despliegue de las opciones que el usuario poseerá a lo largo de la utilización del programa (mediante print). Luego deberías pedir que el usuario ingrese una opción , ya sea mediante input() (numérico) o raw_input(). Todo depende si las opciones que despliegues son del tipo 1.- , 2.- , etc. Ó si son a) , b) , etc.

Ya teniendo eso tienes que hacer una comprobación de las opciones ingresadas y luego según la que escoja el usuario, llamas a la función (sumar, restar, multiplicar, dividir, etc) y por parámetros le pasas los números a procesar...

Esa sería una forma, la cuál no me gusta, ya que limitas a que el usuario simplemente maneje 2 números. Por eso prefiero esta calculadora:
Código (python) [Seleccionar]

print eval(raw_input("Operacion: ")


Espero haber podido aclarar algunas dudas.

Saludos, Javier.
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !

Yidu

Cita de: 0x5d en 29 Marzo 2013, 01:49 AM


No necesariamente debemos crear una función con el menú de la aplicación a crear,

Ya...lo que pasa, es que estoy aprendiendo el uso de funciones. Y claro, estoy haciendo pruebas simples y tal. Supongo que una calculadora (como dijeron por aquí) se puede hacer de mil formas. Pero claro, busco no repetir el código en cada opción que pulsemos. Por eso, mi énfasis en uso de funciones. Y mas, que es lo que recomiendan en todos los libros que voy leyendo de Python.

Pero me he quedao estancado. Estoy haciendo este código...y cuando le doy a la opción 1 [sumar], me pide los dos números correctamente. Pero la suma no la hace. Me da error. El código no está acabado. Pero con solo probar la suma, no funciona.

Código (python) [Seleccionar]
def escojo ():
    num1 = int (raw_input ('> Dime el primer numero: '))
    num2 = int (raw_input ('> Dime el segundo numero: '))
    return num1,num2

def suma (a,b):
    return a + b
def opcion():
   
    opc = int(raw_input ('Escoge una opcion "q" salir'))
    if opc == 1:
        escojo()
        print suma (num1,num2)

def menu():
    print '''Menu\n
    1. Suma
    2. Resta
    3. Multiplicacion
    4. Division
    Q. Salir'''
while 1:
menu()
opcion()






0x5d

Pues es porque las variables num1 y num2 que pides los datos no son accesibles desde otro def, pues no son globales... Y usa input() no int(raw_input())

Creo que no leíste nada de lo que escribí más arriba u_u

Saludos, Javier.
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !