Función en Python

Iniciado por iUDEX, 3 Marzo 2015, 01:18 AM

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

iUDEX

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 (python) [Seleccionar]
# -⁻- coding: UTF-8 -*-

import sys

# Inicia presentación

print " "
print "######################"
print "# Calculadora Básica #"
print "######################"
print " "
print "# Escrita por bubble #"
print " "

# Finaliza presentación

# La función de la calculadora que contiene las 4 operaciones fundamentales.

def Calculadora():

num1 = int(raw_input("Número 1: "))
num2 = int(raw_input("Número 2: "))

print " "
print "1. Sumar"
print "2. Restar"
print "3. Multiplicar"
print "4. Dividir"
print " "

opcion = raw_input("Su respuesta: ")

if opcion == "1":

resSuma = num1 + num2
print "Su resultado es", resSuma
print " "

if opcion == "2":

resResta = num1 - num2
print "Su resultado es", resResta
print " "

if opcion == "3":

resMulti = num1 * num2
print "Su resultado es", resMulti
print " "

if opcion == "4":

resDiv = num1 / num2
print "Su resultado es", resDiv
print " "

Calculadora()

# Aquí terminaría la función de la calculadora que contiene las 4 operaciones fundamentales.

# Para repetir

print "¿Desea efectuar otra operación?
repetir = raw_input("Su respuesta: )

# Condición: "Sí" ejecuta la función Calculadora(), "No" termina el programa.

if repetir == "si" or "Si" or "SI" or "sí" or "Sí" or "SÍ" or "s" or "S"

Calculadora()

if repetir == "no" or "No" or "No" or "n" or "N"

sys.exit()

# Fin de la condición.


Al ejecutarla, me arroja un error:

CitarSyntaxError: 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.
Namasté, criatura.

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

iUDEX

Gracias, engel lex, mientras escribías tu respuesta modifiqué el Post.

Voy a cambiar el raw_input por el input y haber que pasa.
Namasté, criatura.

iUDEX

El código me ha quedado así:

Código (python) [Seleccionar]
# -⁻- coding: UTF-8 -*-

import sys

# Inicia presentación

print " "
print "######################"
print "# Calculadora Básica #"
print "######################"
print " "
print "# Escrita por bubble #"
print " "

# Finaliza presentación

# La función de la calculadora que contiene las 4 operaciones fundamentales.

def Calculadora():

num1 = input("Número 1: ")
num2 = input("Número 2: ")

print " "
print "1. Sumar"
print "2. Restar"
print "3. Multiplicar"
print "4. Dividir"
print " "

opcion = raw_input("Su respuesta: ")

if opcion == "1":

resSuma = num1 + num2
print "Su resultado es", resSuma
print " "

if opcion == "2":

resResta = num1 - num2
print "Su resultado es", resResta
print " "

if opcion == "3":

resMulti = num1 * num2
print "Su resultado es", resMulti
print " "

if opcion == "4":

resDiv = num1 / num2
print "Su resultado es", resDiv
print " "

Calculadora()

# Aquí terminaría la función de la calculadora que contiene las 4 operaciones fundamentales.

# Para repetir

print "¿Desea efectuar otra operación?"
repetir = raw_input("Su respuesta: ")

# Condición: "Sí" ejecuta la función Calculadora(), "No" termina el programa.

if repetir == "si" or "Si" or "SI" or "sí" or "Sí" or "SÍ" or "s" or "S":

Calculadora()

if repetir == "no" or "No" or "No" or "n" or "N":

sys.exit()

# 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é?
Namasté, criatura.

engel lex

dejaste
Código (python) [Seleccionar]
if opcion == "1":

y debe ser == 1, eh hecho, creo que "1" es como 43...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

iUDEX

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?
Namasté, criatura.

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

iUDEX

Bien. La secuencia está solucionada y el código final es así:

Código (python) [Seleccionar]
# -⁻- coding: UTF-8 -*-

import sys

print " "
print "######################"
print "# Calculadora Básica #"
print "######################"
print " "
print "# Escrita por bubble #"
print " "

def Calculadora():

num1 = input("Número 1: ")
num2 = input("Número 2: ")

print " "
print "1. Sumar"
print "2. Restar"
print "3. Multiplicar"
print "4. Dividir"
print " "

opcion = raw_input("Su respuesta: ")

if opcion == "1":

resSuma = num1 + num2
print "Su resultado es", resSuma
print " "

if opcion == "2":

resResta = num1 - num2
print "Su resultado es", resResta
print " "

if opcion == "3":

resMulti = num1 * num2
print "Su resultado es", resMulti
print " "

if opcion == "4":

resDiv = num1 / num2
print "Su resultado es", resDiv
print " "

Calculadora()

def repeticion():

print "¿Desea efectuar otra operación?"
repetir = raw_input("Su respuesta: ")

if repetir == "si" or "Si" or "SI" or "sí" or "Sí" or "SÍ" or "s" or "S":

Calculadora()

if repetir == "no" or "No" or "No" or "n" or "N":

sys.exit()
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!
Namasté, criatura.