[Resuelto][Duda] Cómo puedo sacar variables de una función? Python

Iniciado por thecloudff7, 25 Julio 2015, 20:47 PM

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

thecloudff7

Hola buenas, mi nombre es claudio y quería comentaros una cosa. Si el tema no es con este foro por favor, cámbienlo.

Hace poco he empezado con Python en programación, y lo más basico que podia hacer era una calculadora. Os dejo el codigo.

Código (python) [Seleccionar]

#Autor:Thecloudff7
#-Primer programa con Python

print("Bienvenido a Calcel v 0.1!")
num1 = int(input("Introduce el primer numero para calcular: "))
num2 = int(input("Introduce el segundo numero para calcular: "))

signo = input("Elige el signo con que quieres calcular(+, -, *, /): ")

if signo == "+":

   resultado = num1+num2

elif signo == "-":

   resultado = num1-num2

elif signo == "*":

   resultado = num1*num2

elif signo == "/":

   resultado = num1/num2

else:

   print("Has introducido el caracter mal, porfavor intentelo de nuevo")


print("Calculando...")
print("Tu resultado es: ", resultado)


Este programa funciona a la perfección. Muy basico, metes tus numeros y te sale el resultado.

Pero queria mejorar metiendo funciones, y que cuando hagas una división(pex.2/2) te pida si quieres el resto o no. Tienes que escribir S o N y si no escribes nada de eso, te devuelve la misma pregunta. Cómo puedo hacer eso? Os dejo el codigo que probe yo:

Código (python) [Seleccionar]

#--Calcel--#
#Versión: 0.1
#Autor:Thecloudff7
#-Primer programa con Python
print("Bienvenido a Calcel v 0.1!")
num1 = int(input("Introduce el primer numero para calcular: "))
num2 = int(input("Introduce el segundo numero para calcular: "))
def resto():
   resto = input("¿Quieres saber el resto de la división?(S/N): ")
   if resto == "S":
       res=num1%num2
       return res
   elif resto == "N":
       return resto
   else:
       print("Opción incorrecta")
       print("Calcular division entera...")
       return resto


signo = input("Elige el signo con que quieres calcular(+, -, *, /): ")

if signo == "+":

   resultado = num1+num2

elif signo == "-":

   resultado = num1-num2

elif signo == "*":

   resultado = num1*num2

elif signo == "/":

   resultado = num1/num2
   resto()

else:

   print("Has introducido el caracter mal, porfavor intentelo de nuevo")


print("Calculando...")
print("Tu resultado es: ", resultado)
resto= resto(res)


Muchas gracias de ante mano. Si no entienden algo díganmelo

Mod: Esto no es una duda general, movido

iUDEX

#1
Este tema debería ir en Scripting.

Bueno con respecto a tu duda... y asumiendo que usas Python 2.

Para declarar una función:

Código (python) [Seleccionar]
def funcion():
   contenido
funcion()


Quedaría algo así (función para sumar):

Código (python) [Seleccionar]

def suma():
   resultado = num1 + num2

signo = raw_input("Elige el signo con que quieres calcular(+, -, *, /): ")

if signo == "+":
   suma()


Nótese que en la línea 5 hay que cambiar el input a raw_input, ya que de por sí mismo, input no acepta strings como entrada, y por lo tanto arroja error.

Ahora, por "resto" creo que te refieres a "residuo". ¿No?

Lo que se me ocurre es que deberías hacer que el usuario primero ingrese los valores, los almacene en variables y luego pregunte si quiere ver el resto o no.

Algo como esto:

Código (python) [Seleccionar]
num1 = int(input("Introduce el primer numero para calcular: "))
num2 = int(input("Introduce el segundo numero para calcular: "))

resto = raw_input("¿Quieres saber el resto de la división?(S/N): ")

if resto == "S":
   residuo = num1 % num2
   print residuo
elif resto == "N":
   resultado = num1 / num2
   print resultado


Por cierto, un consejo:

Código (python) [Seleccionar]
num1 = int(input("Introduce el primer numero para calcular: "))

Puedes modificar esa línea a:

Código (python) [Seleccionar]
num1 = input("Introduce el primer numero para calcular: ")

Para que también se puedan ingresar floats.
Namasté, criatura.

thecloudff7

#2
Cita de: gck en 25 Julio 2015, 23:27 PM
Este tema debería ir en Scripting.

Bueno con respecto a tu duda... y asumiendo que usas Python 2.

Para declarar una función:

Código (python) [Seleccionar]
def funcion():
   contenido
funcion()


Quedaría algo así (función para sumar):

Código (python) [Seleccionar]

def suma():
   resultado = num1 + num2
suma()

signo = raw_input("Elige el signo con que quieres calcular(+, -, *, /): ")

if signo == "+":
   suma()


Nótese que en la línea 5 hay que cambiar el input a raw_input, ya que de por sí mismo, input no acepta strings como entrada, y por lo tanto arroja error.

Ahora, por "resto" creo que te refieres a "residuo". ¿No?

Lo que se me ocurre es que deberías hacer que el usuario primero ingrese los valores, los almacene en variables y luego pregunte si quiere ver el resto o no.

Algo como esto:

Código (python) [Seleccionar]
num1 = int(input("Introduce el primer numero para calcular: "))
num2 = int(input("Introduce el segundo numero para calcular: "))

resto = raw_input("¿Quieres saber el resto de la división?(S/N): ")

if resto == "S":
   residuo = num1 % num2
   print residuo
elif resto == "N":
   resultado = num1 / num2
   print resultado


Por cierto, un consejo:

Código (python) [Seleccionar]
num1 = int(input("Introduce el primer numero para calcular: "))

Puedes modificar esa línea a:

Código (python) [Seleccionar]
num1 = input("Introduce el primer numero para calcular: ")

Para que también se puedan ingresar floats.

Vale pero sigo con el mismo problema.

mira:

Código (python) [Seleccionar]

#--Calcel--#
#Versión: 0.1
#Autor:Thecloudff7
#-Primer programa con Python
print("Bienvenido a Calcel v 0.1!")
num1 = input("Introduce el primer numero para calcular: ")
num2 = input("Introduce el segundo numero para calcular: ")

def suma():
   resultado = num1+num2
def resta():
   resultado = num1-num2
def multi():
   resultado = num1*num2
def divi():
   resultado = num1/num2

signo =input("Elige el signo con que quieres calcular(+, -, *, /): ")

if signo=="+":
   suma()
   print("Calculando...")
   print("Tu resultado es: ", resultado)
elif signo=="-":
   resta()
elif signo=="*":
   multi()
elif signo=="/":
   divi()


print("Calculando...")
print("Tu resultado es: ", resultado)
resto= resto(res)
if signo =="/":
   print("El resto vale: ", resto)


el problema esta ahora en que cuando pongo la variable "resultado" fuera de la definicion(por ejemplo en el print mostrado) me sale esto:
"NameError: name 'resultado' is not defined"

Por cierto muchas gracias por todo! Pero el raw_input me dice que no esta definido. Hay que importar algo?

[MOD] Modificada asignación de etiqueta en colocación erronea.

iUDEX

#3
Asumí que usabas Python 2, es por eso que te nombré el clásico raw_input y por lo que tengo entendido, es que en Python 3 ya no existe.

Bueno con respecto al problema de resultado not defined, solo tienes que declarar la variable como global.

Así:

Código (python) [Seleccionar]
print("Bienvenido a Calcel v 0.1!")
num1 = input("Introduce el primer numero para calcular: ")
num2 = input("Introduce el segundo numero para calcular: ")

def suma():
   global resultado
   resultado = num1+num2
   print("Calculando...")
   print("Tu resultado es: ", resultado)

if signo=="+":
   suma()


Ojo! Le moví algo, tenías el if del signo + así:

Código (python) [Seleccionar]

if signo=="+":
   suma()
   print("Calculando...")
   print("Tu resultado es: ", resultado)


Entonces envíe los dos print directamente a la función, cuidado te confundes!

Ah y te has pasado con la etiqueta GeSHi, mira desde la línea 39.
Namasté, criatura.

thecloudff7

Cita de: gck en 26 Julio 2015, 01:17 AM
Asumí que usabas Python 2, es por eso que te nombré el clásico raw_input y por lo que tengo entendido, es que en Python 3 ya no existe.

Bueno con respecto al problema de resultado not defined, solo tienes que declarar la variable como global.

Así:

Código (python) [Seleccionar]
print("Bienvenido a Calcel v 0.1!")
num1 = input("Introduce el primer numero para calcular: ")
num2 = input("Introduce el segundo numero para calcular: ")

def suma():
    global resultado
    resultado = num1+num2
    print("Calculando...")
    print("Tu resultado es: ", resultado)

if signo=="+":
    suma()


Ojo! Le moví algo, tenías el if del signo + así:

Código (python) [Seleccionar]

if signo=="+":
    suma()
    print("Calculando...")
    print("Tu resultado es: ", resultado)


Entonces envíe los dos print directamente a la función, cuidado te confundes!

Ah y te has pasado con la etiqueta GeSHi, mira desde la línea 39.

Muchas gracias enserio!! ya lo tengo todo arreglado! Fallaba lo de la variable global jeje. te dejo el codigo final:
Código (python) [Seleccionar]

def suma():
    global resultado
    resultado = num1+num2
    print("Calculando...")
    print("Tu resultado es: ", resultado)
def resta():
    global resultado
    resultado = num1-num2
    print("Calculando...")
    print("Tu resultado es: ", resultado)
def multi():
    global resultado
    resultado = num1*num2
    print("Calculando...")
    print("Tu resultado es: ", resultado)
def divi():
    global resultado
    resultado = num1/num2
    print("Calculando...")
    print("Tu resultado es: ", resultado)

signo =input("Elige el signo con que quieres calcular(+, -, *, /): ")

if signo=="+":
    suma()
elif signo=="-":
    resta()
elif signo=="*":
    multi()
elif signo=="/":
    resto=input("Quieres saber el resto?(S/N)?")
    if resto=="S":
        resi= num1%num2
        divi=num1/num2
        print("Calculando...")
        print("Tu resultado es", divi, "Y tu resto", resi)
    elif resto=="N":
        divi()


Otra pregunta. sabrias donde puedo conseguir tutoriales para hacer interfaces?

iUDEX

#5
¿Interfaces? ¿Te refieres a elementos gráficos?

Yo personalmente prefiero usar PyGTK, acá un tutorial (PDF). No lo leí todo, pero hasta donde yo llegué lo puedo considerar bastante completo. El punto malo es que usa Python 2, pero basta con un poco de ingenio para que lo adaptes a Python 3.

Encantado de ayudar jejej.

A propósito, si ya has resuelto tu duda agrégale un "[Resuelto]" al título y si puedes cámbiale el ícono.
Namasté, criatura.

thecloudff7

Muchas gracias por todo enserio!! me gustaria darte puntos de foro si hay jaaj :rolleyes:

engel lex

Cita de: thecloudff7 en 26 Julio 2015, 22:44 PM
Muchas gracias por todo enserio!! me gustaria darte puntos de foro si hay jaaj :rolleyes:

no hay puntos... esto es un foro de discusión y aprendizaje, no son necesarios...  ;-)

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

Y mejor que no haya! Ese sistema de puntos, respeto o lo que sea es siempre abusado! jajaj.
Namasté, criatura.