viernes, 29 de octubre de 2010

Switch en Python

Materia: Laboratorio de Lenguajes de Programación  Semana #14Tarea extra.

Hola. Desde hace tiempo he estado buscando la función de switch en Python pero me di cuenta que no existe tal función. Pero encontré una manera para poder implementarla y que funcione muy parecido.

El programa trata sobre un menú de 3 opciones, la primera es Suma, la segunda es Resta y la tercera es multiplicación. También le agregué la función de And para hacerlo un poco más completo.

Paso 1: Abrimos el Terminal y escribimos which python para encontrar la ubicación de Python. (Esto nos servirá más adelante a la hora de hacer nuestro código)



Paso 2: Escribimos emacs switch1.py "emacs" es por el editor de texto que usaremos para elaborar el código, "switch1" es el nombre que le puse al archivo, y ".py" es la extensión que le pertenece a los programas de Python.



Paso 3: Ya estando en emacs escribimos el encabezado usual de nuestros programas #!/usr/bin/python



Paso 4: Comenzaremos el cuerpo de nuestro programa. Escribimos num=int(raw_input("Elige un numero: \n1- Sumas \n2- Restas \n3- Multiplicacion: \n")) Esto pide al usuario que elija una de las 3 opciones que se le despliegan.



Paso 5: Comenzamos escribiendo el desplegado de la primera opción que es Suma.
if num==1:
    sum1=int(raw_input("Escribe el primer numero: "))
    sum2=int(raw_input("Escribe el segundo numero: "))
    suma= sum1+sum2
    print suma

Si el usuario escribe 1, le pedirá dos números para que se sumen, y al final le desplegará el resultado de la suma




Paso 6: Ahora escribiremos la opción dos, que es Resta.
if num==2:
    res1=int(raw_input("Escribe el primer numero: "))
    res2=int(raw_input("Escribe el segundo numero: "))
    resta=res1-res2
    print resta

Si el usuario escribe 2, le pedirá dos números para restar, y al final le aparecerá el resultado de la resta.




Paso 7: Escribiremos la opción tres, que es Multiplicación.
if num==3:
    mul1=int(raw_input("Escribe el primer numero: "))
    mul2=int(raw_input("Escribe el segundo numero: "))
    mult=mul1*mul2
    print mult

Si el usuario escribe 3, le pedirá dos números para que se multipliquen, y al final le aparecerá el producto de esta multiplicación.




Paso 8: En esta parte especificamos que si la opción no es ninguna de las anteriores, nos imprimirá en pantalla que no existe dicha opción.
if num!=1 and num!=2 and num!=3:
    print "No existe la opcion"





Paso 9: Guardamos nuestro archivo siguiendo la secuencia: Ctrl-x Ctrl-s Nos vamos al Terminal para autorizar la ejecutación del programa escribiendo: chmod u+x switch1.py




Paso 10: Ejecutamos el programa escribiendo ./switch1.py



Paso 11: Nos aparece el programa y lo probaremos. Elegiré las tres opciones, en suma pondré: 4 y 7, en resta pondré: 8 y 10, y en multiplicación pondré 3 y 9



Aquí termina esta entrada. Espero que les haya servido, y si tienen algo que decir, no duden en comentar.

Hasta luego.

Fuentes: http://foro.elhacker.net/scripting/una_ayudita_juego_piedra_papel_tijera_en_python-t280267.0.html#ixzz13mcgGuj3

8 comentarios:

  1. Excelente post yo ya me había preguntado como se escribía el swhitch, y escribir puros if en python sale igual de largo que escribir un switch solo el problema es cuando quieres poner el default de el if tienes que poner un if para cada opción ¿no hay otra forma? y creo que te convendría poner ifelse despues del primer if para que no cheque los demas y un else al final, Saludos.

    ResponderEliminar
  2. Sí es cierto lo que dices, Max. Porque traté de poner un "else" pero en la tercera opción siempre me aparecía lo que yo quería que se imprimiera si no era ninguna de las tres opciones, así que mejor opté por poner un if que no contara esas tres opciones, pero lo que tú dices es mucho mejor y más útil.

    Muchas gracias por tu comentario.

    ResponderEliminar
  3. Concuerdo con Max, el uso del else pudo ser tambien de utilidad aunque hace lo mismo pero ahorra tiempo y espacio =D, pero aun asi es un excelente ejemplo.

    Cabe mencionar que no especificaste porque el RAW en el INPUT, hace poco lei sobre eso y se utiliza para leer cietos simbolos o caracteres especiales del codigo ASCII tales como el @!&% simbolos griegos etc. y opino que en tu programa no era muy necesario ya que sólo manipulas números, el RAW podría ser mejor utilizaado en algun programa donde te pida guardar por ejemplo tu correo electronico
    char(raw_input("inserta tu correo electronico: "))
    y luego ya lo insertas tumail@mail.com y te lo guardara con toy y el @ sin ningun problema =D

    Saludos!

    ResponderEliminar
  4. Hola a todos...

    En lo que a mi respecta, para mí usar varios IF (aun y usando ELSE) se me hace muy ineficiente ya cuando son demasiados CASE. No digo que este rollo no sea posible, pero para cosas como estas no hay como SWITCH.

    Si usamos varios IF-ELSE, a como tengo entendido, debe analizar condición por condición.

    Mientras según sé, en un SWITCH ya sea de C o TCL, nada más con ver que caso es (dependiendo de la opción a analizar) ya se va más directamente al caso que debe de procesar.

    Por algo tenemos esta estructura en C o en TCL. Yo digo que si se tiene es para sustituir el uso de tantos IF cuando tenemos que analizar diferentes casos.

    De cualquier manera digo que es buena entrada.

    PD. Me extraña que en el tercer IF no funcione como quieres al usar ELSE; habría que verificarlo más detalladamente.

    Saludos.

    ResponderEliminar
    Respuestas
    1. En python no existe la estructura switch-case, estimado.

      Drumsman~

      Eliminar
  5. Hola, Crispin. Tienes razón, es mucho más eficiente utilizar el "switch" en este tipo de casos como "menú" en vez de puros "if", pero yo lo hice así en Python porque no hay otra manera, bien pude haberlo hecho en C, en Perl, o en cualquier otro lenguaje que tenga disponible esa opción; pero el caso era demostrar que se puede hacer un tipo switch en Python, no en otro lenguaje.

    De cualquier manera tienes razón, sólo que yo quería hacer una especia de "switch" en Python, ya que no cuenta con esa función.

    ResponderEliminar
  6. Punto de participación para Roberto en lenguajes de progra; a Adán y Max les puse un punto extra en progra web por sus aportaciones a la discusión. Tres puntos para el lab de lenguajes para Daniela.

    ResponderEliminar
  7. y si usas diccionarios?

    def sumar(a, b):
    return a + b

    def restar(a, b):
    return a - b

    def multiplicar(a, b):
    return a * b;

    num1 = raw_input("Num1: ")
    num2 = raw_input("Num2: ")

    print("Opciones\n1.- Sumar\n2.- Restar\n3.- Multiplicar")

    operaciones = { '1': sumar, '2': restar, '3': multiplicar}

    seleccion = raw_input('Escoge una: ')
    try:
    resultado = operaciones[seleccion](int(num1), int(num2))
    print resultado
    except:
    print("Esa no vale")

    ResponderEliminar