Hemos avanzado y visto que una función puede recibir como parámetros tipos de datos simples como enteros, flotantes etc. y estructuras de datos tipo lista.
También hemos visto que la función mediante la palabra clave return puede retornar un tipo de dato simple desde donde se la invocó.
Lo nuevo en este concepto es que una función también puede retornar una estructura de datos tipo lista. Con esto estamos logrando que una función retorne varios datos ya que una lista es una colección de datos.
Confeccionar una función que cargue por teclado una lista de 5 enteros y la retorne. Una segunda función debe recibir una lista y mostrar todos los valores mayores a 10. Desde el bloque principal del programa llamar a ambas funciones.
def carga_lista(): li=[] for x in range(5): valor=int(input("Ingrese valor:")) li.append(valor) return li def imprimir_mayor10(li): print("Elementos de la lista mayores a 10") for x in range(len(li)): if li[x]>10: print(li[x]) # bloque principal del programa lista=carga_lista() imprimir_mayor10(lista)
Recordemos que el programa empieza a ejecutarse desde el bloque principal y no se ejecutan cada función en forma lineal. Lo primero que hacemos en el bloque principal del programa es llamar a la función carga_lista y se la asignamos a una variable que recibirá la referencia de la función que se creará en carga_lista:
lista=carga_lista()
La función carga_lista como vemos no tiene parámetros:
def carga_lista():
Dentro de la función definimos una variable local de tipo lista llamada li (el nombre de la variable local puede ser cualquiera, inclusive se podría llamar lista ya que no hay conflictos en definir variables con el mismo nombre en una función y en el bloque principal):
li=[]
Seguidamente definimos un for que se repita 5 veces y solicitamos al operador que ingrese enteros y los añadimos a la lista:
for x in range(5): valor=int(input("Ingrese valor:")) li.append(valor) return li
Cuando finaliza el for ya tenemos almacenado en la lista los 5 enteros y mediante la palabra clave de Python return procedemos a devolver a quien invocó la función la variable "li".
Esto quiere decir que en el bloque principal del programa lista recibe la referencia de "li":
lista=carga_lista()
Si no hacemos esa asignación la lista que devuelve la función carga_lista se perdería:
carga_lista() # incorrecto al no asignarla a una variable el dato devuelto
La segunda línea de nuestro bloque principal es llamar a la función imrprimir_mayor10 y pasar la lista que cargamos previamente:
imprimir_mayor10(lista)
La segunda función de nuestro programa es la imprimir_mayor10 que recibe como parámetro una lista y procede a analizar cada elemento para ver si debe imprimirse:
def imprimir_mayor10(li): print("Elementos de la lista mayores a 10") for x in range(len(li)): if li[x]>10: print(li[x])
Confeccionar una función que cargue por teclado una lista de 5 enteros y la retorne. Una segunda función debe recibir una lista y retornar el mayor y el menor valor de la lista. Desde el bloque principal del programa llamar a ambas funciones e imprimir el mayor y el menor de la lista.
def carga_lista(): li=[] for x in range(5): valor=int(input("Ingrese valor:")) li.append(valor) return li def retornar_mayormenor(li): ma=li[0] me=li[0] for x in range(1,len(li)): if li[x]>ma: ma=li[x] else: if li[x]<me: me=li[x] return [ma,me] # bloque principal del programa lista=carga_lista() rango=retornar_mayormenor(lista) print("Mayor elemento de la lista:",rango[0]) print("Menor elemento de la lista:",rango[1])
Lo interesante que tenemos que sacar de este ejemplo es que cuando tenemos que retornar varios valores podemos utilizar una lista. La función retornar_mayormenor debe devolver dos enteros, y la forma de hacerlo en Python es mediante una lista.
En la función retornar_mayormenor definimos dos variables locales donde almacenamos el primer elemento de la lista que recibimos como parámetro:
def retornar_mayormenor(li): ma=li[0] me=li[0]
Luego mediante un for procedemos a analizar el resto de los elementos de la lista para verificar si hay alguno que sea mayor al que hemos considerado mayor hasta ese momento, lo mismo con el menor:
for x in range(1,len(li)): if li[x]>ma: ma=li[x] else: if li[x]<me: me=li[x]
Cuando sale del for ya tenemos almacenadas en las variables ma y me el valor mayor y el valor menor de la lista.
La sintaxis para devolver ambos datos es crear una lista e indicando en cada elementos la variable respectiva:
return [ma,me]
Ahora cuando llamo a esta función desde el bloque principal del programa sabemos que nos retorna una lista y que el primer elemento representa el mayor de la lista y el segundo elemento representa el menor de la lista:
rango=retornar_mayormenor(lista) print("Mayor elemento de la lista:",rango[0]) print("Menor elemento de la lista:",rango[1])
Hemos visto que podemos retornar en una función una lista. Python también nos permite descomponer los valores devueltos por la función en varias variables que reciban cada elemento de esa lista:
# bloque principal del programa lista=carga_lista() mayor, menor=retornar_mayormenor(lista) print("Mayor elemento de la lista:",mayor) print("Menor elemento de la lista:",menor)
Como vemos definimos las variables mayor y menor y le asignamos el valor que retorna la función mayormenor. Cada elemento de la lista se guarda en el mismo orden, es decir la componente 0 de la lista se guarda en la variable mayor y la componente 1 de la lista se guarda en la variable menor. Esto se hace para que el programa sea mas legible en cuanto a nombre de variables y el dato que almacenan.
Desarrollar un programa que permita cargar 5 nombres de personas y sus edades respectivas. Luego de realizar la carga por teclado de todos los datos imprimir los nombres de las personas mayores de edad (mayores o iguales a 18 años)
Imprimir la edad promedio de las personas.
def cargar_datos(): nom=[] ed=[] for x in range(5): v1=input("Ingrese el nombre de la persona:") nom.append(v1) v2=int(input("Ingrese la edad:")) ed.append(v2) return [nom,ed] def mayores_edad(nom,ed): print("Nombres de personas mayores de edad") for x in range(len(nom)): if ed[x]>=18: print(nom[x]) def promedio_edades(ed): suma=0 for x in range(len(ed)): suma=suma+ed[x] promedio=suma//5 print("Edad promedio de las personas:",promedio) # bloque principal nombres,edades=cargar_datos() mayores_edad(nombres,edades) promedio_edades(edades)
Para resolver este problema debemos crear y cargar dos listas paralelas. En una guardamos los nombres de las personas y en la otra almacenamos las edades.
Definimos una función cargar_datos que crea y carga las dos listas paralelos. Las variables locales que almacenan dichas listas son nom y ed:
def cargar_datos(): nom=[] ed=[] for x in range(5): v1=input("Ingrese el nombre de la persona:") nom.append(v1) v2=int(input("Ingrese la edad:")) ed.append(v2) return [nom,ed]
Esta función retorna una lista cuyos elementos son listas (es decir estamos en presencia de listas con elementos tipo lista):
return [nom,ed]
Cuando llamamos a esta función desde el bloque principal de nuestro programa le asignamos a dos variables:
nombres,edades=cargar_datos()
Ahora en las variables globales nombres y edades tenemos almacenados los dos listas que cargamos en la función cargar_datos.
Como la función cargar_datos() retorna una lista de listas luego las dos variables receptoras son listas.
En el bloque principal luego de llamar a cargar_datos que nos retorna las dos listas procedemos a llamar a las otras funciones mayores_edad y promedio_edades (nombres y edades son dos variables globales que normalmente se inicializan con datos que devuelve una función y luego se las enviamos a otras funciones para que las procesen):
# bloque principal nombres,edades=cargar_datos() mayores_edad(nombres,edades) promedio_edades(edades)
El algoritmo de la función que imprime los nombres de las personas mayores de edad es (recibe las dos listas):
def mayores_edad(nom,ed): print("Nombres de personas mayores de edad") for x in range(len(nom)): if ed[x]>=18: print(nom[x])
El algoritmo que calcula el promedio de edades es:
def promedio_edades(ed): suma=0 for x in range(len(ed)): suma=suma+ed[x] promedio=suma//5 print("Edad promedio de las personas:",promedio)
ejercicio135.py def cargar_sueldos(): sueldos=[] for x in range(10): su=int(input("Ingrese sueldo:")) sueldos.append(su) return sueldos def imprimir_sueldos(sueldos): print("Listado de sueldos") for x in range(len(sueldos)): print(sueldos[x]) def sueldos_mayor4000(sueldos): cant=0 for x in range(len(sueldos)): if sueldos[x]>4000: cant=cant+1 print("Cantidad de empleados con un sueldo superior a 4000:",cant) def promedio(sueldos): suma=0 for x in range(len(sueldos)): suma=suma+sueldos[x] promedio=suma//10 return promedio def sueldos_bajos(sueldos): pro=promedio(sueldos) print("Sueldo promedio de la empresa:",pro) print("Sueldos inferiores al promedio") for x in range(len(sueldos)): if sueldos[x]<pro: print(sueldos[x]) # bloque principal sueldos=cargar_sueldos() imprimir_sueldos(sueldos) sueldos_mayor4000(sueldos) sueldos_bajos(sueldos) ejercicio136.py def cargar_datos(): articulos=[] precios=[] for x in range(5): ar=input("Ingrese el nombre del articulo:") articulos.append(ar) pre=int(input("Ingrese el precio de dicho articulo:")) precios.append(pre) return [articulos,precios] def imprimir(articulos,precios): print("Listado completo de articulos y sus precios") for x in range(len(articulos)): print(articulos[x],precios[x]) def precio_mayor(articulos,precios): may=precios[0] pos=0 for x in range(1,len(precios)): if precios[x]>may: may=precios[x] pos=x print("Articulo con un precio mayor es :",articulos[pos],"su precio es:",may) def consulta_precio(articulos,precios): valor=int(input("Ingrese un importe para mostrar los articulos con un precio menor:")) for x in range(len(precios)): if precios[x]<valor: print(articulos[x],precios[x]) # bloque principal articulos,precios=cargar_datos() imprimir(articulos,precios) precio_mayor(articulos,precios) consulta_precio(articulos,precios) ejercicio137.py def cargar(): lista=[] for x in range(10): valor=int(input("Ingrese valor:")) lista.append(valor) return lista def generar_listas(lista): listanega=[] listaposi=[] for x in range(len(lista)): if lista[x]<0: listanega.append(lista[x]) else: if lista[x]>0: listaposi.append(lista[x]) return [listanega,listaposi] def imprimir(lista): for x in range(len(lista)): print(lista[x]) # programa principal lista=cargar() listanega,listaposi=generar_listas(lista) print("Lista con los valores negativos") imprimir(listanega) print("Lista con los valores positivos") imprimir(listaposi)