25 - Funciones: retorno de datos

Hemos comenzado a pensar con la metodología de programación estructurada. Buscamos dividir un problema en subproblemas y plantear algoritmos en Python que los resuelvan.

Vimos que una función la definimos mediante un nombre y que puede recibir datos por medio de sus parámetros.

Los parámetros son la forma para que una función reciba datos para ser procesados. Ahora veremos otra característica de las funciones que es la de devolver un dato a quien invocó la función (recordemos que una función la podemos llamar desde el bloque principal de nuestro programa o desde otra función que desarrollemos)

Problema 1:

Confeccionar una función que le enviemos como parámetro el valor del lado de un cuadrado y nos retorne su superficie.

Programa: ejercicio120.py

Ver video

 
def retornar_superficie(lado):
    sup=lado*lado
    return sup


# bloque principal del programa

va=int(input("Ingrese el valor del lado del cuafrado:"))
superficie=retornar_superficie(va)
print("La superficie del cuadrado es",superficie)

Aparece una nueva palabra clave en Python para indicar el valor devuelto por la función: return

La función retornar_superficie recibe un parámetro llamado lado, definimos una variable local llamada sup donde almacenamos el producto del parámetro lado por sí mismo.

La variable local sup es la que retorna la función mediante la palabra clave return:

def retornar_superficie(lado):
    sup=lado*lado
    return sup

Hay que tener en cuenta que las variables locales (en este caso sup) solo se pueden consultar y modificar dentro de la función donde se las define, no se tienen acceso a las mismas en el bloque principal del programa o dentro de otra función.

Hay un cambio importante cuando llamamos o invocamos a una función que devuelve un dato:

superficie=retornar_superficie(va)

Es decir el valor devuelto por la función retornar_superficie se almacena en la variable superficie.

Es un error lógico llamar a la función retornar_superficie y no asignar el valor a una variable:

retornar_superficie(va)

El dato devuelto (en nuestro caso la superficie del cuadrado) no se almacena.

Si podemos utilizar el valor devuelto para pasarlo a otra función:

va=int(input("Ingrese el valor del lado del cuafrado:"))
print("La superficie del cuadrado es",retornar_superficie(va))

La función retornar_superficie devuelve un entero y se lo pasamos a la función print para que lo muestre.

Problema 2:

Confeccionar una función que le enviemos como parámetros dos enteros y nos retorne el mayor.

Programa: ejercicio121.py

Ver video

 
def retornar_mayor(v1,v2):
    if v1>v2:
        mayor=v1
    else:
        mayor=v2
    return mayor


# bloque principal
valor1=int(input("Ingrese el primer valor:"))
valor2=int(input("Ingrese el segundo valor:"))
print(retornar_mayor(valor1,valor2))

Nuevamente tenemos una función que recibe dos parámetros y retorna el mayor de ellos:

def retornar_mayor(v1,v2):
    if v1>v2:
        mayor=v1
    else:
        mayor=v2
    return mayor

Si queremos podemos hacerla más sintética a esta función sin tener que guardar en una variable local el valor a retornar:

def retornar_mayor(v1,v2):
    if v1>v2:
        return v1
    else:
        return v2

Cuando una función encuentra la palabra return no sigue ejecutando el resto de la función sino que sale a la línea del programa desde donde llamamos a dicha función.

Problema 3:

Confeccionar una función que le enviemos como parámetro un string y nos retorne la cantidad de caracteres que tiene. En el bloque principal solicitar la carga de dos nombres por teclado y llamar a la función dos veces. Imprimir en el bloque principal cual de las dos palabras tiene más caracteres.

Programa: ejercicio122.py

Ver video

def largo(cadena):
    return len(cadena)


# bloque principal

nombre1=input("Ingrese primer nombre:")
nombre2=input("Ingrese segundo nombre:")
la1=largo(nombre1)
la2=largo(nombre2)
if la1==la2:
    print("Los nombres:",nombre1,nombre2,"tienen la misma cantidad de caracteres")
else:
    if la1>la2:
        print(nombre1,"es mas largo")
    else:
        print(nombre2,"es mas largo")

Hemos definido una función llamada largo que recibe un parámetro llamado cadena y retorna la cantidad de caracteres que tiene dicha cadena (utilizamos la función len para obtener la cantidad de caracteres)

El lenguaje Python ya tiene una función que retorna la cantidad de caracteres de un string: len, nosotros hemos creado una que hace lo mismo pero tiene un nombre en castellano: largo.

Desde el bloque principal de nuestro programa llamamos a la función largo pasando primero un string y guardando en una variable el entero devuelto:

la1=largo(nombre1)

En forma similar calculamos el largo del segundo nombre:

la2=largo(nombre2)

Solo nos queda analizar cual de las dos variables tiene un valor mayor para indicar cual tiene más caracteres:

if la1==la2:
    print("Los nombres:",nombre1,nombre2,"tienen la misma cantidad de caracteres")
else:
    if la1>la2:
        print(nombre1,"es mas largo")
    else:
        print(nombre2,"es mas largo")

Problemas propuestos

  • Elaborar una función que reciba tres enteros y nos retorne el valor promedio de los mismos.

    Ver video

  • Elaborar una función que nos retorne el perímetro de un cuadrado pasando como parámetros el valor de un lado.

    Ver video

  • Confeccionar una función que calcule la superficie de un rectángulo y la retorne, la función recibe como parámetros los valores de dos de sus lados:
    def retornar_superficie(lado1,lado2):
    
    En el bloque principal del programa cargar los lados de dos rectángulos y luego mostrar cual de los dos tiene una superficie mayor.

    Ver video

  • Plantear una función que reciba un string en mayúsculas o minúsculas y retorne la cantidad de letras 'a' o 'A'.

    Ver video

Solución
ejercicio123.py

def retornar_promedio(v1,v2,v3):
    promedio=(v1+v2+v3)//3
    return promedio


# bloque principal

valor1=int(input("Ingrese primer valor:"))
valor2=int(input("Ingrese segundo valor:"))
valor3=int(input("Ingrese tercer valor:"))
print("Valor promedio de los tres numeros", retornar_promedio(valor1,valor2,valor3))




ejercicio124.py

def retornar_perimetro(lado):
    perimetro=lado*4
    return perimetro


# bloque principal

lado=int(input("Lado del cuadrado:"))
print("El perimetro es:",retornar_perimetro(lado))




ejercicio125.py

def retornar_superficie(lado1,lado2):
    superficie=lado1*lado2
    return superficie


# bloque principal

print("Primer rectangulo")
lado1=int(input("Ingrese lado menor del rectangulo:"))
lado2=int(input("Ingrese lado mayor del rectangulo:"))
print("Segundo rectangulo")
lado3=int(input("Ingrese lado menor del rectangulo:"))
lado4=int(input("Ingrese lado mayor del rectangulo:"))
if retornar_superficie(lado1,lado2)==retornar_superficie(lado3,lado4):
    print("Los dos rectangulos tiene la misma superficie")
else:
    if retornar_superficie(lado1,lado2)>retornar_superficie(lado3,lado4):
        print("El primer rectangulo tiene una superficie mayor")
    else:
        print("El segundo rectangulo tiene una superficie mayor")




ejercicio126.py

def cantidad_vocal_a(palabra):
    cant=0
    for x in range(len(palabra)):
        if palabra[x]=='a' or palabra[x]=="A":
            cant=cant+1
    return cant


# bloque principal

palabra=input("Ingrese una palabra:")
print("La palabra",palabra,"tiene",cantidad_vocal_a(palabra),"a")