26 - Funciones: parámetros de tipo lista

Hemos visto que si trabajamos con programación estructurada debemos dividir nuestro problema en trocitos y plantear algoritmos que resuelvan cada uno de los trozos.

La división en Python se hace implementando funciones. La comunicación entre estas funciones se produce mediante el envío de datos a través de los parámetros y el valor que retorna la función.

Hasta ahora hemos resuelto problemas enviando datos simples como enteros, float y cadenas de caracteres. En este concepto veremos que una función puede recibir tanto datos simples como estructuras de datos.
La estructura de datos vista hasta este momento y que podemos enviarle a una función es la lista.

Problema 1:

Definir por asignación una lista de enteros en el bloque principal del programa. Elaborar tres funciones, la primera recibe la lista y retorna la suma de todos sus elementos, la segunda recibe la lista y retorna el mayor valor y la última recibe la lista y retorna el menor.

Programa: ejercicio127.py

Ver video

def sumarizar(lista):
    suma=0
    for x in range(len(lista)):
        suma=suma+lista[x]
    return suma


def mayor(lista):
    may=lista[0]
    for x in range(1,len(lista)):
        if lista[x]>may:
            may=lista[x]
    return may


def menor(lista):
    men=lista[0]
    for x in range(1,len(lista)):
        if lista[x]<men:
            men=lista[x]
    return men
    

# bloque principal del programa

listavalores=[10, 56, 23, 120, 94]
print("La lista completa es")
print(listavalores)
print("La suma de todos su elementos es", sumarizar(listavalores))
print("El mayor valor de la lista es", mayor(listavalores))
print("El menor valor de la lista es", menor(listavalores))

La función sumarizar recibe un parámetro de tipo lista, dentro de la misma lo recorremos mediante un for y accedemos a sus elementos por medio de un subíndice:

def sumarizar(lista):
    suma=0
    for x in range(len(lista)):
        suma=suma+lista[x]
    return suma

Desde el bloque principal de nuestro programa llamamos a sumarizar enviando el dato retornado a la función print para que lo muestre:

print("La suma de todos su elementos es", sumarizar(listavalores))

De forma similar definimos las otras dos funciones que también reciben la lista y luego implementan los algoritmos para identificar el mayor y el menor de la lista:

def mayor(lista):
    may=lista[0]
    for x in range(1,len(lista)):
        if lista[x]>may:
            may=lista[x]
    return may


def menor(lista):
    men=lista[0]
    for x in range(1,len(lista)):
        if lista[x]<men:
            men=lista[x]
    return men

Las llamadas a estas dos funciones desde el bloque principal es similar a cuando llamamos a sumarizar (como cada una retorna un entero procedemos a llamarlas dentro de la función print):

print("El mayor valor de la lista es", mayor(listavalores))
print("El menor valor de la lista es", menor(listavalores))

El nombre de la lista que definimos en el bloque principal del programa es listavalores:

listavalores=[10, 56, 23, 120, 94]

No hay ningún problema de definir dicha variable con el mismo nombre que el parámetro de la función, es decir sería correcto nuestro programa si definíamos en el bloque principal el siguiente código:

def sumarizar(lista):
    suma=0
    for x in range(len(lista)):
        suma=suma+lista[x]
    return suma


def mayor(lista):
    may=lista[0]
    for x in range(1,len(lista)):
        if lista[x]>may:
            may=lista[x]
    return may


def menor(lista):
    men=lista[0]
    for x in range(1,len(lista)):
        if lista[x]<men:
            men=lista[x]
    return men
    

# bloque principal del programa

lista=[10, 56, 23, 120, 94]
print("La lista completa es")
print(lista)
print("La suma de todos su elementos es", sumarizar(lista))
print("El mayor valor de la lista es", mayor(lista))
print("El menor valor de la lista es", menor(lista))

Debe quedar claro que la variable global definida en el bloque principal se llama "lista" y los parámetros de las tres funciones también se llaman "lista".

Problema 2:

Crear y cargar por teclado en el bloque principal del programa una lista de 5 enteros. Implementar una función que imprima el mayor y el menor valor de la lista.

Programa: ejercicio128.py

Ver video

def mayormenor(lista):
    may=lista[0]
    men=lista[0]
    for x in range(1,len(lista)):
        if lista[x]>may:
            may=lista[x]
        else:
            if lista[x]<men:
                men=lista[x]
    print("El valor mayor de la lista es", may)
    print("El valor menor de la lista es", men)          

                
# bloque principal

lista=[]
for x in range(5):
    valor=int(input("Ingrese valor:"))
    lista.append(valor)
mayormenor(lista)

En el bloque principal de nuestro programa cargamos dentro de un for 5 valores enteros y los añadimos a la estructura de datos "lista".
Fuera del for procedemos a llamar a la función mayormenor y procedemos a enviarle la lista para que pueda consultar sus datos.

Es importante notar que la función mayormenor no retorna nada sino ella es la que tiene el objetivo de mostrar el mayor y menor valor de la lista.

Problemas propuestos

  • Crear una lista de enteros por asignación. Definir una función que reciba una lista de enteros y un segundo parámetro de tipo entero. Dentro de la función mostrar cada elemento de la lista multiplicado por el valor entero enviado.
    lista=[3, 7, 8, 10, 2]
    multiplicar(lista,3)
    

    Ver video

  • Desarrollar una función que reciba una lista de string y nos retorne el que tiene más caracteres. Si hay más de uno con dicha cantidad de caracteres debe retornar el que tiene un valor de componente más baja.
    En el bloque principal iniciamos por asignación la lista de string:
    palabras=["enero", "febrero", "marzo", "abril", "mayo", "junio"]
    print("Palabra con mas caracteres:",mascaracteres(palabras))
    

    Ver video

  • Definir una lista de enteros por asignación en el bloque principal. Llamar a una función que reciba la lista y nos retorne el producto de todos sus elementos. Mostrar dicho producto en el bloque principal de nuestro programa.

    Ver video

Solución
ejercicio129.py

def multiplicar(lista,va):
    for x in range(len(lista)):
        multi=lista[x]*va
        print(multi)


# bloque principal

lista=[3, 7, 8, 10, 2]
print("Lista original:",lista)
print("Lista multiplicando cada elemento por 3")
multiplicar(lista,3)




ejercicio130.py

def mascaracteres(palabras):
    pos=0
    for x in range(len(palabras)):
        if len(palabras[x])>len(palabras[pos]):
            pos=x
    return palabras[pos]


# bloque principal

palabras=["enero", "febrero", "marzo", "abril", "mayo", "junio"]
print("Palabra con mas caracteres:",mascaracteres(palabras))




ejercicio131.py

def producto(lista):
    prod=1
    for x in range(len(lista)):
        prod=prod*lista[x]
    return prod


# bloque principal

lista=[1, 2, 3, 4, 5]
print("Lista:", lista)
print("Multiplicacion de todos sus elementos:",producto(lista))