Les Fonctions
Facile
Le concept
Les fonctions sont là pour organiser notre code de manière à ce que dernier soit plus facile à lire.
La convention
Même convention que les noms de variables.
La manipulation
Supposons que vous êtes un magicien. Par conséquent, vous avez des sorts:
#Variables.
energy = 100
isMale = False
#SORT 1 : Attend 5 secondes avant de lancer une boule de feu.
if energy >= 60:
energy -= 60
#Décrémentation
for i in range(5, -1, -1):
print("Le sort va être prêt dans {} sec".format(i))
print("BOULE DE FEU!")
else:
print("ECHEC CRITIQUE")
print("Energie restante: {}".format(energy))
>>>
Le sort va être prêt dans 5 sec
Le sort va être prêt dans 4 sec
Le sort va être prêt dans 3 sec
Le sort va être prêt dans 2 sec
Le sort va être prêt dans 1 sec
Le sort va être prêt dans 0 sec
BOULE DE FEU!
Energie restante: 40
#SORT 2 : Attend 6 secondes avant d'utiliser le 'Sexy jutsu'.
if energy >= 50:
if isMale is True:
for i in range(5, -1, -1):
print("Le sort va être prêt dans {} sec".format(i))
print("SEXY JUTSU ! (Pas très efficace ...)")
else:
for i in range(5, -1, -1):
print("Le sort va être prêt dans {} sec".format(i))
print("SEXY JUTSU ! (Très efficace !)")
energy -= 50
else:
print("ECHEC CRITIQUE")
print("Energie restante: {}".format(energy))
>>>
ECHEC CRITIQUE
Energie restante: 40
Puisque vous êtes un magicien, vous ne voulez pas écrire vos sorts à chaque combat n'est-ce-pas? Vous voulez faire comme les autres magiciens et pouvoir crier le nom du sort directement!
Voici comment faire:
Voici comment faire:
def bouleDeFeu(energy):
"""
SORT 1 : Attend 5 secondes avant de lancer une boule de feu.
:param "energy": quantité d'énergie.
"""
if energy >= 60:
energy -= 60
#Décrémentation
for i in range(5, -1, -1):
print("Le sort va être prêt dans {} sec".format(i))
print("BOULE DE FEU!")
else:
print("ECHEC CRITIQUE")
print("Energie restante: {}".format(energy))
def sexyJutsu(energy, isMale):
"""
SORT 2 : Attend 6 secondes avant d'utiliser le 'Sexy jutsu'.
:param "energy": quantité d'énergie.
:param "isMale" booléen, si l'ennemie est masculin ou pas.
"""
if energy >= 50:
if isMale is True:
for i in range(5, -1, -1):
print("Le sort va être prêt dans {} sec".format(i))
print("SEXY JUTSU ! (Pas très efficace ...)")
else:
for i in range(5, -1, -1):
print("Le sort va être prêt dans {} sec".format(i))
print("SEXY JUTSU ! (Très efficace !)")
energy -= 50
else:
print("ECHEC CRITIQUE")
print("Energie restante: {}".format(energy))
energy = 100
isMale = False
bouleDeFeu(energy)
>>>
Le sort va être prêt dans 5 sec
Le sort va être prêt dans 4 sec
Le sort va être prêt dans 3 sec
Le sort va être prêt dans 2 sec
Le sort va être prêt dans 1 sec
Le sort va être prêt dans 0 sec
BOULE DE FEU!
Energie restante: 40
Plusieurs points à mentioner:
- Une fonction en Python commence par le mot-clef def.
- Ce qu'il y a entre parenthèse après le nom de la fonction s'appelle argument.
- Le texte entouré de """ """ (triple guillemets) est appelé une docstring (documentation string). Elle permet d'avoir des informations sur l'utilité de la fonction et des ses paramètres.
Remarque:
- Une fonction n'est pas obligée d'avoir des arguments ! |
def f():
print("Hello World!")
f()
>>> Hello World!
Testons l'exemple suivant:
energy = 100
isMale = False
bouleDeFeu(energy)
print()
sexyJutsu(energy, isMale)
>>>
Le sort va être prêt dans 5 sec
Le sort va être prêt dans 4 sec
Le sort va être prêt dans 3 sec
Le sort va être prêt dans 2 sec
Le sort va être prêt dans 1 sec
Le sort va être prêt dans 0 sec
BOULE DE FEU!
Energie restante: 40
Le sort va être prêt dans 5 sec
Le sort va être prêt dans 4 sec
Le sort va être prêt dans 3 sec
Le sort va être prêt dans 2 sec
Le sort va être prêt dans 1 sec
Le sort va être prêt dans 0 sec
SEXY JUTSU ! (Très efficace !)
Energie restante: 50
Pouvez-vous voir le problème?
On avait 100 d'énergie. Après l'appel de bouleDeFeu(), il nous reste plus que 40 d'énergie.
Ainsi, lancer le sort sexyJutsu() ne devrait pas être possible ! Alors pourquoi cela marche ?
Cela est dut au fait que les fonctions ont leurs propres environnements.
Voici un schéma résumant la situation:
On avait 100 d'énergie. Après l'appel de bouleDeFeu(), il nous reste plus que 40 d'énergie.
Ainsi, lancer le sort sexyJutsu() ne devrait pas être possible ! Alors pourquoi cela marche ?
Cela est dut au fait que les fonctions ont leurs propres environnements.
Voici un schéma résumant la situation:
Nous, nous voulons la situation suivante:
Ainsi, pour que cela marche comme on le souhaite, nous devons faire en sorte que la variable “energy” sorte de son environnement.
C’est ici qu’intervient le mot-clef return.
def bouleDeFeu(energy):
"""
SORT 1 : Attend 5 secondes avant de lancer une boule de feu.
:param "energy": quantité d'énergie.
"""
if energy >= 60:
energy -= 60
#Décrémentation
for i in range(5, -1, -1):
print("Le sort va être prêt dans {} sec".format(i))
print("BOULE DE FEU!")
else:
print("ECHEC CRITIQUE")
print("Energie restante: {}".format(energy))
#On fait sortir 'energy' de son environnement.
return energy
energy = 100
isMale = False
energy = bouleDeFeu(energy)
print()
sexyJutsu(energy, isMale)
>>>
Le sort va être prêt dans 5 sec
Le sort va être prêt dans 4 sec
Le sort va être prêt dans 3 sec
Le sort va être prêt dans 2 sec
Le sort va être prêt dans 1 sec
Le sort va être prêt dans 0 sec
BOULE DE FEU!
Energie restante: 40
ECHEC CRITIQUE
Energie restante: 40
Ce que vous venez de voir est la notion de scope.
Remarque:
- Comme dit auparavant, print() ne retourne pas de valeurs mais affiche dans la console.
- Par conséquent, si on ne fait que return, le résultat ne s'affichera pas dans la console. |
Pour résumer:
- Les fonctions sont là pour organiser notre code de manière à ce que dernier soit plus facile à lire.
- En ce qui concerne les noms de fonctions, même convention que les variables. - Une fonction en Python commence par le mot-clef def. - Ce qu'il y a entre parenthèse après le nom de la fonction s'appelle argument. - Le texte entouré de """ """ (trple guillemets) est appelé une docstring (documentation string). Elle permet d'avoir des informations sur l'utilité de la fonction et des ses paramètres. - Chaque fonction a son propre scope (environnement). - Pour pouvoir intéragir avec l'envrionnement globale, cette dernière doit return sa valeur. |