Utilitzant funcions com a condicions complexes

És possible que desitgem utilitzar una condició complicada en un bucle while o en una condició if, de manera que el codi resultant seria poc llegible i difícil de mantenir. Quan es done aquesta circumstància podem utilitzar diferents trucs, un d’ells és fer servir una funció que retorne el valor booleà True o False.

Observa l’exemple següent:

 1#!/usr/bin/env python3
 2# divisible3.py
 3#
 4# Aquest programa ens indica si un nombre és divisible per 3
 5
 6nombre = int(input('Escriu un nombre: '))
 7if nombre % 3 == 0:
 8    print('El nombre és divisible per 3.')
 9else:
10    print('El nombre no és divisible per 3.')

En aquest cas no hi ha problema ja que la condició és prou simple, però imaginem ara que el que desitgem esbrinar és si el nombre és primer. La condició és massa complicada per escriure-la com ho hem fet abans, però podem utilitzar una funció que simplifique el nostre codi.

 1#!/usr/bin/env python3
 2# nombre_primer.py
 3#
 4# Aquest programa ens indica si un nombre és primer.
 5
 6def primer(n):
 7    """Rep un nombre com a paràmetre i retorna True si aquest
 8     és un nombre primer. En cas contrari retorna False."""
 9
10    for x in range(2,n):     # x pren tots els valors entre 2 i n-1
11        if n % x == 0:       # Si x és divisible entre n, x no és primer
12            return False
13    return True              # Si no ha retornat False, retornarà True
14
15nombre = int(input('Escriu un nombre: '))
16if primer(nombre):
17    print('El nombre és primer.')
18else:
19    print('El nombre no és primer.')