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	

  1. 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)
    
  2. Testez aussi le code suivant :

    def somme(a,b):
    	return a+b
  3. 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 consommant un nombre de potions égal à nb_potion sachant qu'une potion permet de récupérer 5 hp.

heal(10,5) doit renvoyer 35.

Code de déblocage du lien menant à la correction :

Écrire une fonction set_pv qui prend en paramètres :

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.

Code de déblocage de la correction :

Écrire une fonction multiplication(a,b) qui renvoie la multiplication de a par b.

Code de déblocage du lien menant à la correction :

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

  1. Écrire une fonction combat1(perso1,pdv1,ca1,perso2,pdv2,ca2) qui renvoie perso1,pdv1,ca1,perso2,pdv2,ca2 après un round de combat.

    Code de déblocage du lien menant à la correction :

  2. 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."

    Code de déblocage du lien menant à la correction :

  3. Écrire une fonction combat2(perso1,pdv1,ca1,perso2,pdv2,ca2) qui renvoie perso1,pdv1,ca1,perso2,pdv2,ca2 après 3 rounds de combat.

    Code de déblocage du lien menant à la correction :

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$.

Code de déblocage du lien menant à la correction :

exercice de renforcement

  1. 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.

    Code de déblocage du lien menant à la correction :

  2. 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é.

    Code de déblocage du lien menant à la correction :

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 !

Code de déblocage du lien menant à la correction :

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 :

  1. Proposez une fonction promotion qui prend comme argument le prix initial et qui renvoie le prix en prenant en compte la promotion.

  2. 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.

  3. 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 :

Pour accéder au code de la correction : lien

Licence Creative Commons
Les différents auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International