Saltar al contenido principal

Organización y uso de funciones

Organización de las funciones

En general, las funciones se colocan tras la cabecera y descripción de un programa. A continuación se escribe el programa principal. Podemos decir que es donde comienza la ejecución propiamente del programa y en el que se controla el flujo de ejecución.

# Definición de variables globales

...

# Funciones: en este apartado se definen las funciones

...

# Programa principal: la ejecución del programa comienza en este punto

...

Uso de las funciones

Además, es conveniente que las funciones internamente no pidan datos (input) al usuario ni tampoco los muestren por pantalla (print):

  • Los datos de entrada se pasan mediante parámetros.
  • Los valores se devuelven mediante un return.

Esto es para que el proceso de la interfaz con el usuario y el algoritmo sean independientes, lo que favorece la reutilización, que es una de las principales características de la programación estructurada.

Imagínate que deseamos hacer un programa que reciba por teclado el precio de un producto y el IVA que se le aplica en tanto por ciento.

El siguiente ejemplo es una buena práctica en la realización de la función haciéndola reutilizable:

def precio_con_iva(precio_sin_iva, iva=21):
return precio_sin_iva * (1.0 + iva/100)

precio = float(input("Introduce el precio sin IVA: "))
iva = float(input("Introduce el IVA: "))

pvp = precio_con_iva(precio, iva=iva)
print(pvp)

Por el contrario, el siguiente ejemplo es una mala práctica porque la función no es reutilizable:

def precio_con_iva():
precio = float(input("Introduce el precio sin IVA: "))
iva = float(input("Introduce el IVA: "))
pvp = precio * (1.0 + iva/100)
print(pvp)

precio_con_iva()

En una futura versión del programa, este tendrá que leer un archivo .csv donde se reciben productos con su respectivo precio sin IVA y el IVA que se le aplica.

producto,precio,iva
portátil,1500,21
teclado,30,21
tarjeta gráfica,300,21
disco duro,50,18
...

En el caso de la función del primer ejemplo, no sería necesario modificarla para poder utilizarla en este caso. En cambio, la función del segundo ejemplo no nos serviría.

import csv

# Abrir el archivo csv
with open('datos.csv', mode='r', newline='', encoding='utf-8') as file:
# Crear el lector CSV
reader = csv.DictReader(file)

# Leer los datos fila por fila
for fila in reader:
producto = fila['producto']
precio = float(fila['precio'])
iva = float(fila['iva'])

# Utilizamos la función creada para calcular el precio con IVA
pvp = precio_con_iva(precio, iva=iva)

# Aquí puedes trabajar con los datos
print(f"Producto: {producto}, Precio con IVA: {pvp}")

Como excepciones, se pueden realizar funciones que pidan datos al usuario únicamente (sin cálculos) o funciones que muestren datos con un determinado formato.

Ejemplos:

def pedir_entero(mensaje):
while True:
try:
return int(input(mensaje))
except:
print("No introduciste un valor válido.")

def imprimir_numero_dos_decimales(numero):
print(f"{numero:.2f}")