Fonction en Python
Une fonction en informatique est un peu comme une fonction en maths. Elle prend un ensemble d'argument et renvoie quelque chose.
Définir une fonction en Python
La syntaxe pour définir une fonction en Python est celle ci :
def nomDeLaFonction(argument1,argument2...):
instruction 1
instruction 2
.
.
.
return retourDeLaFonction
-
Prenons la fonction $f:x\longmapsto x^2$.
si vous voulez implémenter cette fonction en Python, il suffira d'écrire :
def f(x):
return x**2
Pour calculer l'image de 1 , en mathématiques vous feriez $f(1)$ , en Python c'est pareil !
Testez :
f(1)
-
Testez aussi le code suivant :
def somme(a,b):
return a+b
-
Testez aussi le code suivant :
def damage(pdv,hit):
if pdv-hit<=0:
pdv = 0
else:
pdv = pdv - hit
return pdv
Écrire une fonction heal(hp,nb_potion)
qui renvoie le nouveau nombre de hp en consomment un nombre de potion égal à nb_potion sachant qu'une potion permet de récupérer 5 hp.
heal(10,5)
doit renvoyer 35.
Écrire une fonction set_pv
qui prend en paramètres :
-
un entier positif pdv
correspondant au nombre de points de vie du personnage,
-
un entier positif ou nul armor
correspondant au nombre de points d'armure du personnage,
-
et un entier positif damage
correspondant au nombre de points de dégâts subis sans armure.
Cette fonction set_pv
renvoie le nombre de points de vie restant.
Attention ! Dans ce jeu, il faut retirer de pdv les dégâts diminués de l'armure.
Par exemple, Si pdv $= 20$, damage$=5$ et armor $=2$ alors pv après le combat vaut $20-5+2=17$.
Ainsi, set_pv(20,5,2)
doit renvoyer 17.
Ecrire une fonction in_life(pdv)
qui renvoie True
si pdv>0 et False
sinon.
Les plus rapides peuvent préciser le typage des entrées et des sorties, documenter la fonction et rajouter des préconditions
sur les types et valeurs des arguments saisis.
Écrire une fonction multiplication(a,b)
qui renvoie la multiplication de a par b.
Dans cet exercice, nous allons écrire une fonction qui simule un combat en trois round entre 2 personnages : perso1 et perso2.
Chaque personnage dispose d'un certain nombre de points de vie, pdv , et d'une certaine classe d'armure ca.
Lors d'un round, les deux personnages attaquent.
La valeur d'attaque de chaque personnage s'obtient en lançant un dé à 8 faces.
Un personnage touche son adverssaire quand avec un dé à 20 faces, il dépasse ou égalise le niveau de la classe d'armure de son adverssaire, ca.
Quand un personnage touche, il inflige 1 dé 8 de dégats à son adverssaire.
Par exemple, le Gamora tente d'attaquer Thanatos. Un dé 20 est lancé, elle obtient 18. La classe d'armure de Thanatos est de 15. Gamora réussit son attaque.
Gamora lance un dé 8, elle obtient 4. Les points de vie de Thanatos sont diminués de 4.
Thanatos rend le coup, il lance le dé est obtient 8. La classe d'armure de Gamora est de 14. Thanatos rate.
Fin du round
Écrire une fonction combat1(perso1,pdv1,ca1,perso2,pdv2,ca2)
qui renvoie perso1,pdv1,ca1,perso2,pdv2,ca2 après un round de combat.
Utiliser la fonction précédente pour réaliser un affichage du type : "Après un round de combat, Batman a 20 points de vie et Jocker 13 points de vie."
Écrire une fonction combat2(perso1,pdv1,ca1,perso2,pdv2,ca2)
qui renvoie perso1,pdv1,ca1,perso2,pdv2,ca2 après 3 rounds de combat.
exercice de renforcement
Dans une fonction on peut faire appelle à d'autre fonction.
Tester cette fonction :
def f(a,b):
a=somme(a,b)
b=multiplication(a,b)
return somme(a,b)
Donner l'expression de $f$ en fonction de $a$ et de $b$.
exercice de renforcement
-
Proposer une fonction, nommée mini2
qui prend comme arguments deux nombres entiers a
et b
et qui renvoie
le minimum de ces deux nombres.
-
Proposer une fonction, nommée mini4
, qui :
-
prend comme arguments quatre nombres entiers
a
, b
, c
et d
,
-
fait appel plusieurs fois à la fonction mini2
pour finalement trouver le minimum des quatre nombres
-
renvoie le minimum trouvé.
exercice de renforcement
Écrire une fonction signe_prod(a,b)
qui reçoit deux entiers a
et b
relatifs et
qui renvoie True
si le produit de a
par b
est strictement positif et
False
sinon. Attention : on ne doit pas calculer le produit des deux nombres !
Exercices de renforcement
Sur les fonctions
En vous inspirant de l'exercice sur l'IMC (cf. lien direct), proposez une fonction nommée IMC
qui demande à l'utilisateur sa taille et sa masse puis qui renvoie son IMC.
Rappel :
L'IMC d'une personne est donné par la forumle $ IMC= \frac{masse}{taille^2}$ où la masse est en kilos et la taille en mètres.
Pour accéder au code de la correction : lien
Un site en ligne propose une promotion sur des téléphones portables suivant les cas suivants :
-
Si l'appreil coûte moins de 200€, la promotion est de 10% (cela revient à dire que le prix initial est multiplié par 0.9 pour obtenir le prix
après réduction).
-
Si l'appreil coûte plus de 200€, la promotion est de 20%.
-
Proposez une fonction promotion
qui prend comme argument le prix initial et qui renvoie le prix en prenant en compte la promotion.
-
Les frais de port de 10€ sont offerts si le montant de la commande, après promotion (mais hors frais de port) est strictement supérieur à 100€.
Proposez une fonction payer
qui :
-
demande le prix initial,
-
utilise la fonction promotion
pour déterminer le prix après promotion,
-
prend en compte l'éventuelle offre des frais de port,
-
renvoie le prix final à payer.
-
Testez votre programme avec quelques prix initiaux. Par exemple, avec 50€, 100€, 200€, 1000€, ...
Pour accéder au code de la correction : lien
On suppose que vous disposez déjà des deux fonctions mini2
et mini4
programmées dans un exercice précédent
(cf. lien direct)
Proposer une fonction, nommée
mini4
, qui :
-
prend comme arguments huit nombres entiers, nommés de a
à h
,
-
fait appel aux fonctions mini2
et mini4
pour finalement trouver le minimum des huit nombres,
-
renvoie le minimum trouvé.
Pour accéder au code de la correction : lien