Je suggère que Python a été au préalable installé ainsi que son gestionnaire de paquet (pip), pip est le gestionnaire qui permet de gérer les librairies/paquets.
Dans le cas contraire vous pouvez le télécharger sur le site Python.org.
Pour Python, je vous suggère d’utiliser un éditeur de code (IDE) tels que :
Le premier programme consistera à afficher le message Hello World, pour ce faire on utile une fonction de python appelé print() qui permet d’afficher des valeurs.
print("Hello World !")
>>> Hello World !
Ils existent plusieurs types, on va dans cette première partie parler des types de base.
| Nom du type | Description | Exemple | Syntaxe |
|---|---|---|---|
| int | Nombre entier | -644 | entier = -644 |
| float | Nombre à virgule | 3.5 | flottant = 3.5 |
| str | Chaine de caractère | “Hello” | chaine = “msg” |
| bool | Valeur logique | True (Vrai) ou False (False) | vrai = True |
| list | Collection de valeurs | [1,2,”ok”] | liste =[1,2,”ok”] |
Les chaines de caractères doivent être déclaré dans des guillemets simple ou double !
Les booléans (bool) sont utilisés au sein d’une condition afin de vérifier si tel ou tel élément est exacte, nous verrons un exemple plus tard.
Les listes sont une collection de valeurs, il faut imaginer une boite ou à l’intérieur on a mis nos données, la également, nous verrons un exemple plus tard.
Le type d’une variable peu être vérifier à travers la fonction type en fournissant une valeur au paramètre.
Exemple :
type(True)
>>> bool
type(5)
>>> int
type([1,2,3])
>>> list
une variable est un nom qui va stocker une valeur.
Une variable est caractérisée par :
Exemple :
# on crée une variable var à laquelle on lui affecte la valeur 18
var = 18
print(5 + var)
>>> 23
L’affectation d’une valeur à une variable se fait par l’opérateur =.
Une variable peu être combiner avec d’autre variable ou valeur afin d’y faire une Opération arithmétique ou bien de faire ce qu’on appel une concaténation (pour les chaînes de caractères).
Une même variable peu être affecté à elle même afin d’y faire une opération arithmétique (vous l’utiliserez souvent pour les boucles while).
somme = 0
cinq = 5
deux = 2
somme = somme + cinq + deux
print(somme)
>>> 7
| Opération | Symbole | Exemple | Résultat |
|---|---|---|---|
| Addition | + |
5 + 3 |
8 |
| Soustraction | - |
10 - 4 |
6 |
| Multiplication | * |
7 * 2 |
14 |
| Division | / |
9 / 2 |
4.5 |
| Division entière | // |
9 // 2 |
4 |
| Modulo (reste) | % |
9 % 2 |
1 |
| Puissance | ** |
3 ** 2 |
9 |
La division entière permet de diviser deux nombres et de garder uniquement la partie entière du résultat, en ignorant la partie décimale.
La division entière ne fait pas d’arrondi, c’est à dire que même si 140 / 3 équivaut à 46.6, la division entière ne sera pas 47 mais bien 46 !
Par exemple :
140 // 3
>>> 46
L’opérateur Modulo (%) permet de récupérer le reste d’une division entière, par exemple 11 % 2 affichera 1.
La concaténation est un procédé permettant de fusionner/coller des chaînes de caractères entre elles, la concaténation est représenté par l’opérateur +.
hello = "hello "
world = "world"
print( hello + world)
>>> hello world
Les chaines de caractères peuvent aussi être combiner avec l’opérateur * afin d’afficher la chaîne de caractère x fois.
print("hello " *2)
>>> hello hello
Dans cette section, je vais vous donner 3 exercices simples :
1.1 Faites la somme de deux valeurs en passant par des variables
cinq = 5
sept = 7
print(cinq + sept)
>>> 12
1.2 Afficher le message Hello World 3 fois
print("Hello World " * 3)
>>> Hello World Hello World Hello World
# Il est également possible d'afficher Hello World sur plusieurs lignes
print("Hello World \n" * 3)
>>> Hello World
>>> Hello World
>>> Hello World
\n est un caractère dit échappement qui permet de faire un saut/retour de ligne, il existe beaucoup de caractère d’échappement cependant ce n’est pas l’objectif de ce cours.
1.3 Calculer le modulo de 7 par 2 (7 % 2) et de 6 par 2
print(7 % 2)
>>> 1
print(6 % 2)
>>> 0
L’objectif de cet exercice était de vous faire comprendre qu’en faisant une valeur modulo 2, on pouvait déterminer si une valeur est pair ou impair selon le reste. Par exemple si le reste est 1, la valeur est impair et si la valeur est 0 la valeur est pair.
Les conditions permettent de vérifier que tel ou tel valeur est Vrai ou Faux. Admettons que je fasse un virement de mon compte à un autre, je souhaite vérifier que la valeur envoyé n’est pas négative dans le cas contraire cela devra engendrait un bug.
Syntaxe d’une condition :
if (condition):
print("condition valide")
# bloc d'instructions ...
Comme vous pouvez le voir ci-dessus, il y a une distance, print n’est pas mis tout à gauche comme auparavant. C’est ce qu’on appel l’indentation.
L’indentation permet de faire comprendre au compilateur que ce bloc d’instructions appartient à notre condition, on peu donc le traduire par : print("condition valide") ne sera affiché que si on passe par cette condition.
L’indentation est très important, car ils permettent de définir un bloc d’instructions pour un mot clé donné (if est un mot clé).
L’indentation est utilisé lorsqu’on déclare : des conditions, des boucles, des fonctions, etc…
Il est possible de définir plusieurs conditions en même temps ainsi que de définir une condition par défaut.
Syntaxe :
cinq = 5
if (cinq > 6):
print("5 est plus grand que 6")
elif (cinq < 6):
print("5 est plus petit que 6")
else :
print("5 est égal à 6")
Le mot clé elif est utilisé à la suite d’une condition if, elif permet de rajouter des conditions supplémentaires dans le cas ou la/les précédentes sont fausses. On peu avoir autant de bloc elif qu’on souhaite.
Le mot clé else est une condition par défaut qui s’éxécute seulement lorsque toutes les conditions précédentes sont fausses.
En ayant compris ça d’après vous qu’affichera le code ci-dessus ?
Enfin les conditions sont effectués à travers plusieurs opérateurs :
| Opérateur | Description | Exemple | Résultat |
|---|---|---|---|
== |
Égal à | 5 == 5 |
True |
!= |
Différent de | 5 != 3 |
True |
< |
Inférieur à | 3 < 5 |
True |
> |
Supérieur à | 5 > 3 |
True |
<= |
Inférieur ou égal à | 3 <= 3 |
True |
>= |
Supérieur ou égal à | 5 >= 3 |
True |
| Opérateur | Description | Exemple | Résultat |
|---|---|---|---|
and |
ET logique | (5 > 3) and (3 > 1) |
True |
or |
OU logique | (5 > 3) or (3 < 1) |
True |
not |
Négation logique | not (5 > 3) |
False |
| Opérateur | Description | Exemple | Résultat |
|---|---|---|---|
in |
Appartient à | "a" in "abc" |
True |
not in |
N’appartient pas à | "d" not in "abc" |
True |
Résumé :
2.1 Nous avons 2 variables pos et neg, je souhaite qu’on affiche les valeurs des variables positifs dans le cas contraire on effectuera la valeur absolue de la valeur négatif.
pos = 5
neg = -6
# ... à vous de jouer
2.2 Déterminer quels sont les variables pair et impair ci-dessous en utilisant une condition.
six = 6
trois = 3
deux = 2
# ... à vous de jouer
2.3 Améliorer le code suivant, je souhaite n’avoir qu’une seule instruction conditionnelle (un seul if et un seul else) :
if 7 > 5 :
if 8 > 6 :
print("Vrai")
else :
print("Faux")
else :
print("Faux")
2.1
pos = 5
neg = -6
if pos > 0 :
print(pos)
else :
pos = pos * -1
if neg > 0 :
print(neg)
else :
neg = neg * -1
Il est également possible d’utiliser des conditions au sein d’une affectation.
negatif = -7
positif = negatif if negatif > 0 else negatif * -1
print(positif)
>>> 7
Il faut le lire de cette manière : on affecte la variable negatif à la variable positif si negatif est supérieur à 0, sinon on affecte la valeur negatif * -1 à positif
Les listes sont une collection de valeurs qui permettent de stocker plusieurs valeurs en une variable.
Imaginons que, j’ai choisi 5 produits sur amazon, chaque produit peu avoir un prix différent ce qui fais qu’a un moment donné, amazon devra effectuer la somme de ses produits afin de me faire payer la totalité du panier.
Nous aurons donc une liste correspondant aux valeurs de chaque produit.
panier = [10,11,15,17,18]
Une liste peu être déclarer comme vide ou bien en la déclarant avec des valeurs par défaut comme ci-dessus. La déclaration d’une liste/tableau se fait en utilisant les crochets [].
# crée une liste vide
t = []
# crée une liste avec des valeurs par défaut
t1 = [1,2,3,4,5]
On accède a une valeur d’une liste en donnant l’indice (position) de l’élément qu’on souhaite récupérer. La position d’une liste commence toujours à 0 !
t = [1,5,6,8]
# récupére la première valeur du tableau
print(t[0])
>>> 1
# récupère la dernière position du tableau
print([3])
>>> 8
On peu modifier les éléments d’une liste en accédant à l’élément de la liste puis en lui affectant une nouvelle valeur.
t = [10,20,40]
t[2] = 30
print(t)
>>> [10,20,30]
| Méthode | Description | Exemple |
|---|---|---|
append(x) |
Ajoute un élément x à la fin de la liste |
nombres.append(10) |
insert(i, x) |
Insère un élément x à l’indice i |
nombres.insert(1, 20) |
remove(x) |
Supprime la première occurrence de x |
nombres.remove(5) |
pop(i) |
Supprime et retourne l’élément à l’indice i (par défaut le dernier) |
nombres.pop(2) |
index(x) |
Retourne l’indice de la première occurrence de x |
nombres.index(20) |
len(liste) |
Retourne le nombre d’éléments dans la liste | len(nombres) |
Les boucles permettent d’exécuter un bloc de code plusieurs fois.
Les boucles sont utilisés pour la pluspart des cas avec des listes puisqu’ils permettent de parcourir les éléments de la liste sans le faire à la main.
La boucle while s’éxécute tant que la condition est vrai.
Syntaxe :
while (condition):
... bloc d'instructions
Si on souhaite afficher les nombres de 0 à 10 par exemple.
i = 0
while i <= 10:
print(i)
i = i+1
Il faut incrémenter (augmenter) la valeur i puisque dans le cas contraire, on ne pourrait jamais sortir de la boucle. Il faut donc se rappeler que au sein d’une boucle while, il faut toujours incrémenter afin de sortir de la boucle dans le cas contraire on serait dans une boucle infinie.
La variable i peu prendre n’importe quel autre nom mais lorsqu’on effectue une itération (parcours) sur une boucle la norme veut qu’on l’appel i, mais vous pouvez lui donner n’importe quel nom.
On peu également arreter la boucle immédiatement avec le mot clé break que ce soit pour une boucle while ou for.
i = 0
while True :
print(i)
if i == 10 :
break
i = i + 1
Les boucles for sont utilisés pour faciliter l’utilisation des listes.
Syntaxe :
t = [1,2,3,4]
# val contient les valeurs de la liste t une par une
for val in t :
print(val)
# Affichera
>>> 1
>>> 2
>>> 3
>>> 4
Les boucles for peuvent aussi être utilisés de la même manière que les boucles while en répétant un bloc d’instruction x fois en utilisant la fonction range().
La fonction range(start, stop, step) peu prendre plusieurs paramètres optionnel et une obligatoire :
Exemple :
for i in range(10):
print(i)
# affiche les valeurs de 0 à 9
for i in range(10,15):
print(i)
# affiche les valeurs de 10 à 14
for i in range(0,20,2):
print(i)
# affiche les valeurs 0,2,4,6 ... ,18
Avec cette syntaxe, nous pouvons créer une liste en une ligne ayant plusieurs valeurs selon la fonction range.
Ce procédé s’appel la compréhension qui est le fait de créer une liste conscise et stylé, je ne vous demande pas de savoir ça pour l’instant, je prèfere que vous en restez avec les synaxes ci-dessus.
# t contient une liste de 0 à 9
t = [i for i in range(10)]
Pour l’instant, je vous interdis d’utiliser les compréhension pour les exercices.
3.1 Créer un tableau ayant les valeurs de 10 à 17 en passant par une boucle.
t = []
# ... a vous de jouer
3.2 Effectuer la somme du tableau ci-dessous en utilisant la syntaxe avec la boucle while et la boucle for.
tab = [1,9,99,66,55]
# ... à vous de jouer
3.3 Créer deux listes : l’une qui contient les valeurs pairs et une autre les valeurs impairs sur l’intervalle 0 à 27.
listePair = []
listeImpair = []
# ... a vous de jouer
3.4 Remplacer la boucle for ci-dessous par la boucle while.
for i in range(10,40,3):
print(i)
Si vous avez réussi tout les exercices sans soucis jusqu’a présent, vous possédez des bases assez solide permettant de comprendre tout le reste de la programmation, il faudra seulement passer par la connaissance de la syntaxe ainsi que de sa logique.
3.1 Créer un tableau ayant les valeurs de 10 à 17 en passant par une boucle.
t = []
for i in range(10,18):
t.append(i)
3.2 Effectuer la somme du tableau ci-dessous en utilisant la syntaxe avec la boucle while et la boucle for.
Syntaxe avec la boucle while :
somme = 0
i = 0
tab = [1,9,99,66,55]
while i < len(tab):
somme = somme + tab[i]
i = i + 1
print(somme)
>>> 230
Syntaxe avec la boucle for:
somme = 0
tab = [1,9,99,66,55]
for i in tab :
somme = somme + i
print(somme)
>>> 230
3.3 Créer deux listes : l’une qui contient les valeurs pairs et une autre les valeurs impairs sur l’intervalle 0 à 27.
listePair = []
listeImpair = []
for i in range(27):
if i % 2 == 0 :
listePair.append(i)
else :
listeImpair.append(i)
3.4 Remplacer la boucle for ci-dessous par la boucle while.
i = 10
while i < 40 :
print(i)
i = i+3
Les dictionnaires sont un type particulier avec un système de clé-valeur, chaque clé est unique et est associé à une valeur. Pour faire simple pour accéder à la valeur d’un dictionnaire, on passe par sa clé.
Les dictionnaires regroupe des valeurs selon une clé donné ça permet de savoir quel valeur correspond a quel clé. Par exemple un chat a un nom, un poid, un age.
Il existe 2 procédé pour créer un dictionnaire, comme pour les listes on peu en créer par défaut en spécifiant des valeurs et également créer un dictionnaire vide.
# création d'un dictionnaire vide
dico = {}
# dictionnaire avec des valeurs par défauts
dico = {
"Nom": "Claude",
"age" : 66,
"qualiter" : "BG"
}
# Une autre manière de faire en utilisant la fonction dict
dico = dict(Nom ="Claude", age=66, qualiter = "BG")
La syntaxe pour parcourir un dictionnaire est similaire au liste sauf que ce n’est pas l’indice qu’on donne mais la clé du dictionnaire.
dico = {
"Nom": "Claude",
"age" : 66,
"qualiter" : "BG"
}
print(dico["Nom"])
>>> Claude
C’est exactement comme pour les listes, cependant pour les dictionnaires on modifie une valeur à travers la clé.
dico = dict(Nom ="Claude", age=66, qualiter = "BG")
dico["age"] = 20
# Crée une nouvelle clé qu'on associe à la valeur gros
dico["poid"] = "gros"
print(dico)
>>> {'Nom': 'Claude', 'age': 20, 'qualiter': 'BG', 'poid': 'gros'}
On peu parcourir un dictionnaire selon sa clé ou bien sa va valeur.
Parcours pour afficher les clés du dictionnaire.
dico = dict(Nom ="Claude", age=66, qualiter = "BG")
for cle in dico :
print(cle)
>>> Nom
>>> age
>>> qualiter
Parcours pour afficher les valeurs de chaque clé du dictionnaire
dico = dict(Nom ="Claude", age=66, qualiter = "BG")
for values in dico.values() :
print(values)
>>> Claude
>>> 66
>>> BG
| Méthode | Description | Exemple |
|---|---|---|
get(clé, défaut) |
Retourne la valeur associée à une clé, ou une valeur par défaut si la clé n’existe pas | mon_dict.get("âge", 0) |
keys() |
Retourne toutes les clés du dictionnaire | mon_dict.keys() |
values() |
Retourne toutes les valeurs du dictionnaire | mon_dict.values() |
pop(clé, défaut) |
Supprime une clé et retourne sa valeur, ou une valeur par défaut si la clé n’existe pas | mon_dict.pop("nom", "Inconnu") |
clear() |
Vide complètement le dictionnaire | mon_dict.clear() |
Tu te demandes peut-être l’utilité des dictionnaires et c’est normal !
A tes yeux tu ne vois qu’une collection représentant des clés et des valeurs, cependant si tu réfléchis bien les dictionnaires sont utilisés un peu partout et surtout en combinaisons avec des listes.
Au vu des exercices que te donne le prof, tu n’auras surement pas besoin de savoir ça mais je te montre quand même un exemple.
Imagine que tu es sur Amazon et que j’ai rajouté 3 produits dans mon panier voici à quoi cela ressemblerait sous formes de dictionnaire.
panier = {
"client" : "Claude",
"produits" : ["bague", "chapeau", "tapis"],
"prixDesProduits": [5,13,15],
"prixTotal": 0
}
Cette syntaxe a beau être plus complexe qu’en utilisant la fonction dict, elle reste plus facile à comprendre selon moi mais, je te conseil d’apprendre la syntaxe en utilisant la fonction dict pour l’instant (c’est plus simple).
Comme tu as pu le voir le dictionnaire ci-dessus correspond à ma commande sur amazon cependant, il faut effectuer une somme du prix des produits afin d’avoir le prix totale de ma commande.
Si tu as bien compris le fonctionnement des dictionnaires ainsi que sa syntaxe essaye de mettre à jour le dictionnaire afin que la clé prixTotal correspond à la somme des prix des produits.
Voici les étapes qu’il faut faire :
Solution :
panier = {
"client" : "Claude",
"produits" : ["bague", "chapeau", "tapis"],
"prixDesProduits": [5,13,15],
"prixTotal": 0
}
somme = 0
for i in panier["prixDesProduits"]:
somme = somme + i
panier["prixTotal"] = somme
print(panier["prixTotal"])
>>> 33
4.1 Créer un dictionnaire personne comportant les clés : nom, prenom, poid, et age, je vous laisse le choix des valeurs cependant, vous devrez le faire de 2 manières : avec un dictionnaire vide et un dictionnaire avec des valeurs par défauts.
4.2 Vérifier si, il existe une clé “nom” dans le dictionnaire ci-dessous, dans le cas ou il existerait cette clé, lui affecter la valeur “Alpha” dans le cas contraire afficher une erreur avec print().
Vérifier par la même occasion si il existe une valeur “Alpha” au sein de ce dictionnaire et dans le cas ou cette valeur existe afficher sa clé.
dico = {
"nope":"Alpha",
"prenom" : "Beta",
"age" : 56
}
# ... a vous de jouer
4.3 Dans le code ci-dessous, la valeur associé à la clé prixDesProduits est un tableau, faite en sorte qu’ils contiennent les valeurs des prix de chaque produit. Effectuer ensuite la mise a jour pour que la valeur lié a la clé “prixTotal” correspondent à la somme des prix des produits.
prixBague = 5
prixChapeau = 12
prixTapis = 22
panier = {
"client" : "Claude",
"produits" : ["bague", "chapeau", "tapis"],
"prixDesProduits": [],
"prixTotal": 0
}
# ... à vous de jouer
4.1 Créer un dictionnaire personne comportant les clés : nom, prenom, poid, et age, je vous laisse le choix des valeurs cependant, vous devrez le faire de 2 manières : avec un dictionnaire vide et un dictionnaire avec des valeurs par défauts.
# dictionnaire vide
personne = {}
personne["nom"] = "je pleure"
personne["prenom"] = "sur le poulet"
personne["poid"] = 10
personne["age"] = 5
# dictionnaire personne avec des valeurs par défauts
personne = {
"nom" :"je pleure",
"prenom" : "sur le poulet",
"poid" : 10,
"age" : 5
}
4.2 Vérifier si, il existe une clé “nom” dans le dictionnaire ci-dessous, dans le cas ou il existerait cette clé, lui affecter la valeur “Alpha” dans le cas contraire afficher une erreur avec print().
Vérifier par la même occasion si il existe une valeur “Alpha” au sein de ce dictionnaire et dans le cas ou cette valeur existe afficher sa clé.
dico = {
"nope":"Alpha",
"prenom" : "Beta",
"age" : 56
}
if "nom" in dico :
dico["nom"] = "Alpha"
else :
print("Le dictionnaire n'a pas de clé nom")
if "Alpha" in dico.values():
for cle, val in dico.items() :
if val == "Alpha":
print(f"la clé lié a la valeur alpha est : {cle}")
break
else :
print("Le dictionnaire ne comporte pas de valeur Alpha")
4.3 Dans le code ci-dessous, la valeur associé à la clé prixDesProduits est un tableau, faite en sorte qu’ils contiennent les valeurs des prix de chaque produit. Effectuer ensuite la mise a jour pour que la valeur lié a la clé “prixTotal” correspondent à la somme des prix des produits.
prixBague = 5
prixChapeau = 12
prixTapis = 22
panier = {
"client" : "Claude",
"produits" : ["bague", "chapeau", "tapis"],
"prixDesProduits": [],
"prixTotal": 0
}
panier["prixDesProduits"].append(prixBague)
panier["prixDesProduits"].append(prixChapeau)
panier["prixDesProduits"].append(prixTapis)
# il est préférable d'utiliser une boucle au lieu de le faire a la main même si cela est possible.
somme = 0
for i in panier["prixDesProduits"]:
somme = somme + i
print(somme)
>>> 39
Les fonctions récursifs est juste un terme qui signifie qu’une fonction s’appel elle même. Une fonction récursif a le même objetif qu’une boucle qui est d’executer plusieurs fois un bloc d’instruction.
Il faut donc comme pour une boucle while, un point d’arrêt permettant de sortir d’arreter notre fonction lorsque la tâche a été effectué, dans le cas contraire la fonction s’appelerait elle même jusqu’a l’infini.
Par exemple si l’on souhaite afficher 10 fois le message “je pleure” en utilisant une fonction récursif, on aurait quelque chose comme ça :
def recursif(n):
print("je pleure")
if n == 0 :
print("fin de la fonction")
else :
recursif(n -1)
recursif(10)
Ce qui est bien avec les fonctions récursifs c’est que le code est similaire a la demande par exemple si on vous demande d’effectuer le factorielle d’un nombre avec une fonction récursif. Il suffit d’un point d’arret et d’effectuer le return de la formule.
Voici la formule du factorielle d’un nombre :
Fonction récursif d’un factorielle d’un nombre :
def factorielle(n):
if n == 0:
return 1
return n * factorielle(n-1)
La logique est la même avec d’autres formules, je vous mets ici quelques exemples :
F(n)=F(n−1)+F(n−2)S(n)=n+S(n−1)def fibonnaci(n):
if n == 0 :
return 0
elif n == 1:
return 1
return fibonnaci(n - 1) + fibonnaci(n - 2)
def somme(n):
if n == 0:
return 0
return n + somme(n - 1)
Comme tu as pu le voir, on ne se casse pas vraiment la tête, il suffit d’un point d’arret pour arreter la fonction puis de littéralement copier coller la formule donné dans le return.
Malheuresement pour toi, il est possible que tu es affaire à des exercices n’ayant pas forcément de formule. C’est à ce moment la ou, il faudra se servir de sa petite tête pour réfléchir a comment effectuer cette exercice.
4.1 Calculer la puissance d’un nombre par n
Formule de la puissance d’un nombre par n :

4.2 Calculer la somme d’une liste
def somme(liste):
# ... a vous de jouer
t = [1,2,3,4,77,-5]
print(somme(t))
# la fonction doit afficher 82
>>> 82
4.3 Vérifier si le caractère "t" est dans la chaine de caractère, si le caractère est présent renvoyé True dans le cas contraire False
def is_character_present(chaine,caractere):
# ... a vous de jouer
print(is_character_present("Wallah je souffre trop","t"))
>>> True
4.4 Vérifier si une chaine de caractère est un palindrome, c’est à dire qu’il se lit dans les deux sens. Par exemple radar, non, kayak sont un palindrome. Si il s’avère que la chaine de caractère est un palindrome renvoyé True sinon False.
def is_palindrome(chaine):
# ... a vous de jouer
print(is_palindrome("kayak"))
>>> True
print(is_palindrome("shifumi"))
>>> False
4.1 Calculer la puissance d’un nombre par n
def puissance(x, n):
if n == 0:
return 1
return x * puissance(x, n-1)
4.2 Calculer la somme d’une liste
def somme(liste):
if len(liste) == 0:
return 0
return liste[0] + somme(liste[1:len(liste)])
t = [1,2,3,4,77,-5]
print(somme(t))
>>> 82
On peu récupérer une partie d’une liste en la spécifiant comme une intervalle de cette manière liste[start : end]. Etant donné que c’est une somme, il faut forcément la sauvegarder quelque part, on va la sauvegarder directement dans le return a travers liste[0] qui va sauvegarder l’addition des éléments. Et enfin, il faut forcément désincrementer ou incrémenter afin de sortir de la fonction récursif, dans notre cas on va désincrementer. La désincrémentation se fait à travers liste[1:len(liste)] qui peu également être fait sans spécifier le end (optionnel) de cette manière : liste[1:]. Ici on enleve a chaque fois le premièr indice ce qui nous permet de réduire la taille de notre tableau (désincrémenter).
Cette logique sera utilisé pour les prochains exercices également.
4.3 Vérifier si le caractère "t" est dans la chaine de caractère, si le caractère est présent renvoyé True dans le cas contraire False
def is_character_present(chaine,caractere):
if len(chaine) == 0 :
return False
elif chaine[0] == caractere:
return True
return is_character_present(chaine[1:],caractere)
print(is_character_present("Wallah je souffre trop","t"))
>>> True
4.4 Vérifier si une chaine de caractère est un palindrome, c’est à dire qu’il se lit dans les deux sens. Par exemple radar, non, kayak sont un palindrome. Si il s’avère que la chaine de caractère est un palindrome renvoyé True sinon False.
def is_palindrome(chaine):
if len(chaine) <= 1:
return True
if chaine[0] != chaine[len(chaine)-1]:
return False
return is_palindrome(chaine[1:len(chaine)-1])
print(is_palindrome("kayak"))
>>> True
print(is_palindrome("shifumi"))
>>> False
On compare au fur et a mesure le premier et le dernier caractère et dans le cas ou celle-ci ne sont pas égale on renvoie False, dans le cas contraire on reduit la taille de la chaine de 2 (1 pour le premier indice et 1 autre pour le dernier indice). Lorsqu’on arrive à une longueur inférieur ou égal a 1 cela signifie que notre chaine de caractère est un palindrome.
Les fonctions récursives demandent énormément de réflexion contrairement aux boucles cependant celle-ci peu s’averer plus lisible notamment dans le cas ou on aurait besoin d’utiliser des formules mathématiques.
Liste des conditions à impérativement savoir sur les fonctions récursives :
| Condition | Description | Exemple |
|---|---|---|
| Condition d’arrêt | La fonction doit savoir quand s’arrêter pour éviter une boucle infinie. | Retourner 1 si n == 0 pour une factorielle. |
| Appel récursif | La fonction doit s’appeler sur un sous-problème plus petit. | Appeler fibonacci(n-1) pour réduire l’échelle du problème. |
| Transformation du problème | Le problème doit être réduit à chaque étape pour converger vers la condition d’arrêt. | Réduire une liste avec liste[1:] ou un entier avec n-1. |
| Retour du résultat | Chaque appel récursif doit retourner un résultat pour construire la solution finale. | Retourner x * puissance(x, n-1) pour une puissance. |