Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Br1ant en 3 Marzo 2015, 01:18 am



Título: Función en Python
Publicado por: Br1ant en 3 Marzo 2015, 01:18 am
Hace un buen tiempo empezé a estudiar Python. Lo dejé porque no entendía las funciones ni las dominaba. Ahora me he animado a terminar de entender este lenguaje de programación.

Escribí esta calculadora básica.

Código
  1. # -⁻- coding: UTF-8 -*-
  2.  
  3. import sys
  4.  
  5. # Inicia presentación
  6.  
  7. print " "
  8. print "######################"
  9. print "# Calculadora Básica #"
  10. print "######################"
  11. print " "
  12. print "# Escrita por bubble #"
  13. print " "
  14.  
  15. # Finaliza presentación
  16.  
  17. # La función de la calculadora que contiene las 4 operaciones fundamentales.
  18.  
  19. def Calculadora():
  20.  
  21. num1 = int(raw_input("Número 1: "))
  22. num2 = int(raw_input("Número 2: "))
  23.  
  24. print " "
  25. print "1. Sumar"
  26. print "2. Restar"
  27. print "3. Multiplicar"
  28. print "4. Dividir"
  29. print " "
  30.  
  31. opcion = raw_input("Su respuesta: ")
  32.  
  33. if opcion == "1":
  34.  
  35. resSuma = num1 + num2
  36. print "Su resultado es", resSuma
  37. print " "
  38.  
  39. if opcion == "2":
  40.  
  41. resResta = num1 - num2
  42. print "Su resultado es", resResta
  43. print " "
  44.  
  45. if opcion == "3":
  46.  
  47. resMulti = num1 * num2
  48. print "Su resultado es", resMulti
  49. print " "
  50.  
  51. if opcion == "4":
  52.  
  53. resDiv = num1 / num2
  54. print "Su resultado es", resDiv
  55. print " "
  56.  
  57. Calculadora()
  58.  
  59. # Aquí terminaría la función de la calculadora que contiene las 4 operaciones fundamentales.
  60.  
  61. # Para repetir
  62.  
  63. print "¿Desea efectuar otra operación?
  64. repetir = raw_input("Su respuesta: )
  65.  
  66. # Condición: "Sí" ejecuta la función Calculadora(), "No" termina el programa.
  67.  
  68. if repetir == "si" or "Si" or "SI" or "sí" or "Sí" or "SÍ" or "s" or "S"
  69.  
  70. Calculadora()
  71.  
  72. if repetir == "no" or "No" or "No" or "n" or "N"
  73.  
  74. sys.exit()
  75.  
  76. # Fin de la condición.

Al ejecutarla, me arroja un error:

Citar
SyntaxError: EOL while scanning string literal
[bubble@bubble bubble]$ python Calculadora.py
  File "Calculadora.py", line 63
    print "¿Desea efectuar otra operación?
                                           ^
SyntaxError: EOL while scanning string literal

Como parece, el error de la sintaxis se debe porque la función Calculadora() llega hasta allí.
¿Habría alguna forma de indicar cuando termina una función?

Ah, y otra cosa. Si no agrego la opción de repetir, la consola me presenta primero el raw_input y no los print, que serían las opciones 1, 2, 3 y 4. Tampoco los print iniciales (presentación).

Necesito ayuda. Agradecería bastante si me indicaran sin decirme la respuesta o el código. Al fin y al cabo, soy un poco torpe en la lógica de un algoritmo :(

Modifico:

Error mío.
En las líneas 63 y 64 me faltaba cerrar el String con comillas.

De igual forma, en las condiciones if de las líneas 68  y 72 me faltaban los dos puntos.

Igual sigue el problema del raw_input, eso sería lo más importante.


Título: Re: Función en Python
Publicado por: engel lex en 3 Marzo 2015, 01:25 am
el error es porque nunca cerraste la comilla... fijate el codigo aquí en el foro en la linea 63 lo que es morado (representa el string) y en donde deja de serlo

te recomiendo que si vas a capturar numeros, no uses raw_input, usa input, raw es para capturarlo en formato string y nada más, así que a num1 y num2 le estás haciendo un casting de entero innecesario (ese int(....))... input captura y retorna en el formato más coherente a lo capturado, si es una palabra string, si es un numero int, si es un decimal, float...

y cuando hagas divisiones, siempre comprueba que el divisor no sea 0


Título: Re: Función en Python
Publicado por: Br1ant en 3 Marzo 2015, 01:26 am
Gracias, engel lex, mientras escribías tu respuesta modifiqué el Post.

Voy a cambiar el raw_input por el input y haber que pasa.


Título: Re: Función en Python
Publicado por: Br1ant en 3 Marzo 2015, 01:36 am
El código me ha quedado así:

Código
  1. # -⁻- coding: UTF-8 -*-
  2.  
  3. import sys
  4.  
  5. # Inicia presentación
  6.  
  7. print " "
  8. print "######################"
  9. print "# Calculadora Básica #"
  10. print "######################"
  11. print " "
  12. print "# Escrita por bubble #"
  13. print " "
  14.  
  15. # Finaliza presentación
  16.  
  17. # La función de la calculadora que contiene las 4 operaciones fundamentales.
  18.  
  19. def Calculadora():
  20.  
  21. num1 = input("Número 1: ")
  22. num2 = input("Número 2: ")
  23.  
  24. print " "
  25. print "1. Sumar"
  26. print "2. Restar"
  27. print "3. Multiplicar"
  28. print "4. Dividir"
  29. print " "
  30.  
  31. opcion = raw_input("Su respuesta: ")
  32.  
  33. if opcion == "1":
  34.  
  35. resSuma = num1 + num2
  36. print "Su resultado es", resSuma
  37. print " "
  38.  
  39. if opcion == "2":
  40.  
  41. resResta = num1 - num2
  42. print "Su resultado es", resResta
  43. print " "
  44.  
  45. if opcion == "3":
  46.  
  47. resMulti = num1 * num2
  48. print "Su resultado es", resMulti
  49. print " "
  50.  
  51. if opcion == "4":
  52.  
  53. resDiv = num1 / num2
  54. print "Su resultado es", resDiv
  55. print " "
  56.  
  57. Calculadora()
  58.  
  59. # Aquí terminaría la función de la calculadora que contiene las 4 operaciones fundamentales.
  60.  
  61. # Para repetir
  62.  
  63. print "¿Desea efectuar otra operación?"
  64. repetir = raw_input("Su respuesta: ")
  65.  
  66. # Condición: "Sí" ejecuta la función Calculadora(), "No" termina el programa.
  67.  
  68. if repetir == "si" or "Si" or "SI" or "sí" or "Sí" or "SÍ" or "s" or "S":
  69.  
  70. Calculadora()
  71.  
  72. if repetir == "no" or "No" or "No" or "n" or "N":
  73.  
  74. sys.exit()
  75.  
  76. # Fin de la condición.

Por alguna razón, me presenta en esta secuencia.

Presentación
Línea 63: raw_input
Función Calculadora()

Y se hizo un revoltorio, al final ni me da el resultado. ¿En que la cagé?


Título: Re: Función en Python
Publicado por: engel lex en 3 Marzo 2015, 01:42 am
dejaste
Código
  1. if opcion == "1":

y debe ser == 1, eh hecho, creo que "1" es como 43...


Título: Re: Función en Python
Publicado por: Br1ant en 3 Marzo 2015, 01:47 am
Nada, igual.

El problema es la secuencia.

Aquí dejo el Log de la terminal donde ejecuté el Script.

Citar
[bubble@bubble bubble]$ python Calculadora.py
 
######################
# Calculadora Básica #
######################
 
# Escrita por bubble #
 
Su respuesta: s
Número 1: 10
Número 2: 10
 
1. Sumar
2. Restar
3. Multiplicar
4. Dividir
 
¿Desea efectuar otra operación?
Su respuesta: s
Número 1: 10
Número 2: 10
 
1. Sumar
2. Restar
3. Multiplicar
4. Dividir
 
[bubble@bubble bubble]$

¿!Dooh!? :o ¿Y eso?


Título: Re: Función en Python
Publicado por: engel lex en 3 Marzo 2015, 01:57 am
ya vi el error! XD es lo que odio de python... los espacios a la izquierda...

al poner "opcion" en linea 31 sin tabular, el asume que ahí finaliza la función... lo mismo para los if


Título: Re: Función en Python
Publicado por: Br1ant en 3 Marzo 2015, 02:11 am
Bien. La secuencia está solucionada y el código final es así:

Código
  1. # -⁻- coding: UTF-8 -*-
  2.  
  3. import sys
  4.  
  5. print " "
  6. print "######################"
  7. print "# Calculadora Básica #"
  8. print "######################"
  9. print " "
  10. print "# Escrita por bubble #"
  11. print " "
  12.  
  13. def Calculadora():
  14.  
  15. num1 = input("Número 1: ")
  16. num2 = input("Número 2: ")
  17.  
  18. print " "
  19. print "1. Sumar"
  20. print "2. Restar"
  21. print "3. Multiplicar"
  22. print "4. Dividir"
  23. print " "
  24.  
  25. opcion = raw_input("Su respuesta: ")
  26.  
  27. if opcion == "1":
  28.  
  29. resSuma = num1 + num2
  30. print "Su resultado es", resSuma
  31. print " "
  32.  
  33. if opcion == "2":
  34.  
  35. resResta = num1 - num2
  36. print "Su resultado es", resResta
  37. print " "
  38.  
  39. if opcion == "3":
  40.  
  41. resMulti = num1 * num2
  42. print "Su resultado es", resMulti
  43. print " "
  44.  
  45. if opcion == "4":
  46.  
  47. resDiv = num1 / num2
  48. print "Su resultado es", resDiv
  49. print " "
  50.  
  51. Calculadora()
  52.  
  53. def repeticion():
  54.  
  55. print "¿Desea efectuar otra operación?"
  56. repetir = raw_input("Su respuesta: ")
  57.  
  58. if repetir == "si" or "Si" or "SI" or "sí" or "Sí" or "SÍ" or "s" or "S":
  59.  
  60. Calculadora()
  61.  
  62. if repetir == "no" or "No" or "No" or "n" or "N":
  63.  
  64. sys.exit()
  65. repeticion()

Ah, perdón, borré los comentarios. Es que me estorbaban.
Como dijiste, tabulé el raw_input de opcion y los if, junto a sus bloques. También le añadí comillas a los números de opción que, por alguna razón, al tipearlos en la terminal no me regresaba el resultado.

Diría yo que ya está solucionado. Todavía tengo problemas con una nueva función llamada "repeticion" que dependiendo de la respuesta del usuario, vuelve a ejecutar la funcion Calculadora() o sale del programa. En eso ya me las apaño yo.

¡Muchas gracias!