3. Fonctions

a) Premiers exemples
Vous savez ce qu'est une fonction en maths...
En langage Python, on peut définir une fonction comme celles que vous connaissez en maths.
Par exemple :
si on vous donne : f(x) = x² + 3x - 5,
en langage Python, cela donnera :
def f(x): # On écrit toujours def, et entre parenthèses les variables dont nous aurons besoin
return (x**2 +3*x - 5) # return indique que le résultat de f(x) sera x² + 3x - 5
On peut utiliser cette fonction de différentes façons :
-
l'introduire dans un calcul : nombre = f(5) + 4
-
l'afficher : print(f(7))
-
L'utiliser comme borne : for n in range (0, f(10))
-
L'utiliser dans une condition : if f(5) < 0: ou encore if nombre = f(4) :
-
etc.
Par exemple, on peut écrire une fonction ayant un paramètre a, qui teste si le nombre a est pair ou impair.
Ensuite on utilise cette fonction pour tester la parité des 15 premiers entiers naturels non nuls.
Ainsi, on pourra alléger l'écriture du programme principal en rappelant simplement la fonction :
def parite(a):
print()
if a%2 ==0:
print(a,"est pair")
else:
print(a,"est impair)
for n in range (1,16):
parite(n)
Pour calculer les termes d'une suite définie par récurrence, il est très commode d'utiliser une fonction.
Par exemple, considérons la suite définie par :
U = 2 ;
0
et :
U = 3U – 5 pour tout entier naturel n.
n+1 n
def u(n):
u = 2 #il faut mettre en mémoire la première valeur de U, c'est-à-dire la valeur de U
0
for i in range (1,n+1):
u = 3*u - 5 # Calcul des termes successifs de Un
return (u)
print()
n = int(input("Vous souhaitez calculer le terme d'indice : ")) # il faut écrire int, sinon n sera de type str
print()
print(u(n))
b) Programmes faisant intervenir plusieurs fonctions
i) Programme utilisant une fonction à deux paramètres , et une autre avec trois paramètres
Une fonction peut être définie en fonction de zéro, un ou plusieurs paramètres.
exemple de fonction sans paramètre :
On souhaite générer un nombre au hasard et tester sa parité
import random
def parite():
a = random.randint(30,100)
print()
if a % 2 == 0:
print(a,"est pair")
else:
print(a,"est impair")
Si maintenant, je souhaite tester la parité d'un nombre choisi au hasard entre deux bornes variables :
import random
def parite(n,p):
a = random.randint(n,p)
print()
if a % 2 == 0:
print(a,"est pair")
else:
print(a,"est impair")
Allons encore un peu plus loin :
je souhaite tester la parité de k nombres choisis au hasard entre deux bornes n et p :
import random
def parite(n,p):
a = random.randint(n,p)
print()
if a % 2 == 0:
print(a,"est pair")
else:
print(a,"est impair")
def boucle(k,n,p):
for i in range (1,k+1):
print(i,")",parite(n,p)
boucle (5,50,100)
Vous voyez que le corps de mon programme se résume à une ligne de code.
ii) Utiliser le pgcd de deux nombres
pgcd de a et b = plus grand commun diviseur de a et de b.
En anglais : gcd = greater common divisor
C'est une fonction très utile en programmation.
Elle peut servir à réduire une fraction, factoriser au maximum une expression...
Je vous donne en lien un programme de fonction donnant le pgcd de deux nombres entiers a et b.
Ce programme utilise l'algorithme d'Euclide (en principe, vous ne l'avez pas appris, pas d'inquiétude !).
Un exemple simple pour commencer :
Je souhaite choisir deux nombres au hasard, les afficher et donner leur pgcd . De plus, si leur pgcd est égal à 1, j'annonce que a et b sont premiers entre eux :
import random
def pgcd(a,b):
while (b>0):
reste=a%b
a,b=b,reste
return a
def tri_pgcd():
a=random.randint(20,50)
b=random.randint(20,50)
print()
print("Le pgcd de",a,"et",b,"est :",pgcd(a,b)) # on fait appel à la fonction pgcd dans l'écriture de la fonction tri_pgcd
if pgcd(a,b) == 1 :
print()
print(a,"et",b,"sont premiers entre eux")
print()
print()
for n in range (1,11):
tri_pgcd()
Exemple plus complexe : je souhaite m'exercer sur la simplification de fractions.
Si non j'annonce qu'elle est irréductible.
import random
def pgcd(a,b):
while (b>0):
reste=a%b
a,b=b,reste
return a
# choix de deux nombres entiers au hasard ; cette fonction fait en sorte que les deux nombres ne soient pas égaux
# et que l'un ne divise pas l'autre. On fait aussi en sorte que le pgcd ne soit pas trop souvent égal à 1
#Ensuite la fonction affiche l'énoncé
# et pour finir, elle affiche la correction
def enonce_correction():
a = random.randint(10,100)
b = random.randint(10,100)
cas=random.randint(1,4)
if cas == 1 : # deux cas : fractions irréductible, fraction réductible
while pgcd(a,b)!= 1 or a == b or a % b == 0 or b % a == 0: # correction des données a et b
a = random.randint(10,100)
b = random.randint(10,100)
else:
while pgcd(a,b)== 1 or a == b or a % b == 0 or b % a == 0: # dans 3/4 des cas, on obtient une fraction réductible
a = random.randint(10,100)
b = random.randint(10,100)
print()
print("Ecrire sous forme de fraction irréductible : ",a,"/",b,sep="") # énoncé
input()
# correction
if pgcd(a,b) == 1:
print("La fraction est irréductible")
else:
print("La fraction n'est pas irréductible. Il faut diviser en haut et en bas par : ",pgcd(a,b))
input()
print("On obtient : ",int(a/pgcd(a,b)),"/",int(b/pgcd(a,b)))
input()
print()
print()
for i in range (1,1000):
enonce_correction()
L'explication de la commande sep = vous est données dans le lexique.
Vous pouvez aussi consulter l'utilisation de la commande end =, qui est très utile.
J'ai écrit le programme dans différentes nuances pour mieux visualiser les différentes parties.
Si vous ne le comprenez pas entièrement, essayez au moins de comprendre quelques parties.
d) Exercices
Ecrire, en utilisant des fonctions, les programmes suivants :
1) Reprendre le programme permettant de choisir deux nombres entiers au hasard et d'annoncer leur pgcd.
Dans le cas où ils ne sont pas premiers entre eux, compléter la fonction de manière à donner a et b sous la forme du produit de leur pgcd par un entier
2) a) pour vérifier si un nombre choisi au hasard entre 1 et 100 est divisible par 2, 3, 5, 7 ou 11, écrire pour chaque diviseur : une fonction qui teste la divisibilité et retourne 1 s'il n'y a pas divisibilité ; la valeur du diviseur dans le cas contraire.
b) Afficher enfin par quel produit de nombres premiers de la liste ci-dessus ce nombre est divisible.
Par exemple : 45 est divisible par 3 et par 5, donc par 15, de même 135 est divisible par 3 et par 5, donc par 15.
3) On souhaite écrire une liste de 10 nombres choisis au hasard entre 1 et 50.
Ecrire une fonction qui permet d'afficher une telle liste.
Corrigés : faire tourner le programme en lien. Vous avez la possibilité de copier-coller le programme de chaque exercice.