
Apprendre à programmer avec
Cet après-midi, vous saurez parler une nouvelle langue
Cet après-midi, vous aurez créé un jeu avec Python
Bienvenue dans le quiz ultime!
Je pense à un nombre entre 0 et 15… devine-le !
Entre un nombre: 5
Trop petit !
Entre un nombre: 8
Trop grand !
Entre un nombre: 6
Wowwww tu as deviné en 3 essais, pas mal ! 🎉
Cet après-midi, vous aurez envie de continuer à programmer avec Python
Bonjour, moi c’est Sylvain

- 👨🎓 Ingénieur logiciel
- 👨💻 Développeur web depuis 20 ans
- 💘 J’a(n)ime (des ateliers de) la programmation
- 📖 PS : j’ai écrit un livre pour apprendre à programmer

PPS : j’aime bien les emojis 😊👍
C’est quoi un
programme ?







class LinuxArtifactJob(ArtifactJob):
package_re = r"public/build/target\.tar\.bz2"
product = "firefox"
_package_artifact_patterns = {
"{product}/crashreporter",
"{product}/dependentlibs.list",
"{product}/{product}",
"{product}/{product}-bin",
"{product}/minidump-analyzer",
"{product}/pingsender",
"{product}/plugin-container",
"{product}/updater",
"{product}/**/*.so",
}
@property
def package_artifact_patterns(self):
return {p.format(product=self.product) for p in self._package_artifact_patterns}
def process_package_artifact(self, filename, processed_filename):
added_entry = False
with JarWriter(file=processed_filename, compress_level=5) as writer:
with tarfile.open(filename) as reader:
for p, f in UnpackFinder(TarFinder(filename, reader)):
if not any(
mozpath.match(p, pat) for pat in self.package_artifact_patterns
):
continue
# We strip off the relative "firefox/" bit from the path,
# but otherwise preserve it.
destpath = mozpath.join("bin", mozpath.relpath(p, self.product))
self.log(
logging.DEBUG,
"artifact",
{"destpath": destpath},
"Adding {destpath} to processed archive",
)
writer.add(destpath.encode("utf-8"), f.open(), mode=f.mode)
added_entry = True
if not added_entry:
raise ValueError(
'Archive format changed! No pattern from "{patterns}" '
"matched an archive path.".format(
patterns=LinuxArtifactJob.package_artifact_patterns
)
)
class MacArtifactJob(ArtifactJob):
package_re = r"public/build/target\.dmg"
product = "firefox"
# These get copied into dist/bin without the path, so "root/a/b/c" -> "dist/bin/c".
_paths_no_keep_path = (
"Contents/MacOS",
[
"crashreporter.app/Contents/MacOS/crashreporter",
"{product}",
"{product}-bin",
"*.dylib",
"minidump-analyzer",
"pingsender",
"plugin-container.app/Contents/MacOS/plugin-container",
"updater.app/Contents/MacOS/org.mozilla.updater",
# 'xpcshell',
"XUL",
],
)
Programme
Code source
- Allumer les moteurs
- Ajuster la vitesse à 18km/h
- Attendre de toucher le sol
- Couper les moteurs
- Planter le drapeau
Programme d’alunissage
⛳
- Mettre du sucre, de la farine et du cacao dans un saladier
- Ajouter de l’huile et des pépites de chocolat
- Mélanger
- Mettre au four 23 minutes à 180°
- Sortir du four et manger
Brownies double chocolat
🤤
Conclusion
Un programme est une recette de cuisine
écrite dans une langue appelée langage de programmation
On appelle cette suite d’instructions un « algorithme »
Python c’est…
- 💻 Un langage de programmation interprété
- 🎂 Créé en 1991
- 🧔🇳🇱 Par un néerlandais
- 📈 Un des langages les plus populaires¹
- 🆓 Et libre
- 👩🎓👩💻 Et utilisé dans le monde académique et professionnel
¹Source: TIOBE index, septembre 2021
Avec Python on peut créer…
- 🌐 Des sites web (par exemple YouTube)
- 🎮 Des jeux
- 🆒 Des applications graphiques
- 📊 Des programmes de statistique et d’analyse (machine learning)
- 💡 À peu près n’importe quoi!
C’est quoi un
langage interprété ? 🤔
Instructions
(langage plus ou moins compréhensible)
name = input("Quel est ton nom?")
print("Salut " + name + "!")
print("Bienvenue dans mon premier programme.")
Instructions
(code machine / binaire)

Interpréteur
(Python)
1000010110111111011101101010110111111101011110010
L’ordinateur exécute les instructions
💻
Exécution d’un programme Python
1️⃣
2️⃣
3️⃣
4️⃣
🎉
⚠️
C’est de la culture générale, pas besoin de connaître ça par cœur !
Bon on écrit du code ou quoi ⁉️
Ouvrez votre navigateur et allez sur
https://repl.it/languages/python3
Éditeur de code (écrivez ici !)
Zone d’affichage
Cliquez pour exécuter votre code

print("Salut!")
print("C'est mon premier programme!")
Votre premier programme

print("Salut!")
print("C'est mon premier programme!")
Code Python
Exécution
- Afficher "Salut!"
- Afficher "C’est mon premier programme!"
C’est quoi ce print ?
print("Quel est ton nom?")
Fonction
Paramètre

Certaines fonctions renvoient une valeur

max(5, 8, 2, 1, -2)
🛠 Outil : les fonctions 🛠
Une fonction est un raccourci pour exécuter plusieurs instructions
On peut créer ses propres fonctions
(mais pas aujourd’hui)
-
check_password("Sylvain", "1234")
-
fire_thrusts(90)
-
play_music("Idioteque.mp3")
Quelques fonctions de Python
-
print("Bonjour")
-
input("Entrez un nombre: ")
-
max(5, -3, 1)
-
round(3.1415, 2)
Liste complète: https://docs.python.org/fr/3/library/functions.html
🛠️ Outil : les variables 🛠️
Une variable est un nom donné à une valeur
Exemples de variables
-
my_name = "Sylvain"
-
secret = "1234"
-
current_date = "04.10.2021"
Nom de la variable
Valeur
« Hé Python, mets cette étiquette sur cette valeur »
Bien choisir le nom de ses variables
- Réfléchir à ce que la variable représente
- Trouver un nom en anglais qui correspond
- Tout mettre en minuscule et séparer les mots par des sous-tirets
- Le nombre que la personne doit deviner
- "Number to guess"
-
number_to_guess
Par exemple
Pas d’espaces ni de caractères spéciaux dans les noms de variables !
🐿
⚠️
Utilisation des variables
« Hé Python, utilise la valeur qui a cette étiquette »
my_name = "Sylvain"
secret = "1234"
max_number = max(8, 1, -5, 42)
print(my_name)
print("Mon mot de passe est " + secret)
print(max_number + 5)
Pourquoi on utilise des variables?
- Pour éviter d’exécuter plusieurs fois une fonction
- Pour exécuter une fonction et utiliser son résultat plus tard
print("Bienvenue " + input("Entre ton nom: "))
print("Hey " + input("Entre ton nom: ") +
", et si tu me donnais aussi ton mot de passe?")
print(input("Entre ton mot de passe: "))
Bienvenue Entre nom nom: Sylvain Sylvain Hey Entre ton nom: Cyril Cyril, et si tu me donnais aussi ton mot de passe? Entre ton mot de passe: 1234 1234
😕
Les variables à la rescousse
name = input("Entre ton nom: ")
print("Bienvenue " + name)
print("Hey " + name + ", et si tu me donnais aussi ton mot de passe?")
password = input("Entre ton mot de passe: ")
print(password)
Entre ton nom: Sylvain Bienvenue Sylvain Hey Sylvain, et si tu me donnais aussi ton mot de passe? Entre ton mot de passe: 1234 1234
💪🥳🤳
Bon on écrit du code ou quoi ⁉️
print("Bienvenue dans mon programme!")
password = input("Entrez le code secret pour l’utiliser: ")
print("Vous avez entré le code " + password)
- Afficher "Bienvenue dans mon programme!"
- Poser la question "Entrez le code secret pour l’utiliser: " et mettre le résultat dans la variable password
- Afficher "Vous avez entré le mot de passe " + password
Afficher ➡️ print
Poser une question ➡️ input
🛠️ Outil : les conditions 🛠️
Les conditions servent à créer des embranchements
Exemple d’embranchement
- Poser la question "Entre le mot de passe: " et le mettre dans la variable password
- Si la valeur de la variable password est "trèsSecret", alors
- Afficher "C’est le bon mot de passe!"
- Sinon
- Afficher "Ce n’est pas le bon mot de passe"
Exemple de programme avec une condition
if password == "trèsSecret":
print("C’est le bon mot de passe!")
else:
print("Ce n’est pas le bon mot de passe")
- 4 espaces
- Exécuté seulement si la condition est vraie
Les gens cool utilisent la touche tabulation (⭾) pour insérer les espaces (indentation) !
🍸😎🤳
Ne pas oublier les deux-points !
Bon on écrit du code ou quoi ⁉️
password = input("Entrez le mot de passe: ")
if password == "trèsSecret":
print("Bienvenue!")
else:
print("Ce n’est pas le bon mot de passe.")
- Poser la question "Entre le mot de passe: " et le mettre dans la variable password
- Si la valeur de la variable password est égale à "trèsSecret", alors
- Afficher "C’est le bon mot de passe!"
- Sinon
- Afficher "Ce n’est pas le bon mot de passe"
Bon on écrit du code ou quoi ⁉️
- Mettre "4" dans la variable number
- Poser la question "Entre un chiffre: " et mettre le résultat dans la variable guess
- Si la valeur de la variable guess est égale (==) à number, alors
- Afficher "Bravo!"
- Sinon, si guess est < number, alors
- Afficher "Trop petit!"
- Sinon
- Afficher "Trop grand!"
if condition1:
...
elif condition2:
...
else:
...
Transformons le programme de demande de mot de passe en jeu !
Modifiez le programme pour faire deviner un nombre plus grand que 9. Que se passe-t-il ?
(le nombre à deviner est 14) Entre un nombre: 2 Trop grand!

🛠️ Outil : les types 🛠️
Les types servent à catégoriser des valeurs
Les catégories dans le monde « réel »
- Chien
- Livre
- Nombre
- …
3 types de base importants
- Chaînes de caractères (délimitées par des guillemets, p.ex. "Salut!")
- Nombres (sans guillemets, p.ex. 42)
- Booléens (valeur vraie au fausse, mots-clés True et False)
La fonction type permet de connaître le type d’une valeur
type("Bonjour")
# <class 'str'>
type(42)
# <class 'int'>
type(True)
# <class 'bool'>
guess = input("Entre un chiffre: ")
print(guess)
# '4'
type(guess)
# <class 'str'>
Le type d’une valeur influence son comportement
Par exemple pour les comparaisons
"14" < "2"
# True
14 < 2
# False
14 > "2"
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# TypeError: '>' not supported between instances of 'int' and 'str'
guess = input("Entre un nombre: ")
14 > guess
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# TypeError: '>' not supported between instances of 'int' and 'str'
Le type d’une valeur influence son comportement
… et pour d’autres opérations
2 + 2
# 4
"Salut " + "Sylvain"
# Salut Sylvain
"2" + "2"
# 22
"2" + 2
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# TypeError: can only concatenate str (not "int") to str
On peut convertir un type à un autre grâce à des fonctions
int("45")
# 45
type(int("45"))
# <class 'int'>
int("14") > int("2")
# True
int("Bonjour")
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# ValueError: invalid literal for int() with base 10: 'Bonjour'
guess = int(input("Entre un nombre: "))
print(guess)
# 4
14 > guess
# True
Modifiez votre programme pour que la comparaison avec des nombres plus grands que 9 fonctionne
(indice : convertissez le retour de la fonction input en nombre avec la fonction int)
- Créer une variable number avec la valeur 42
- Poser la question "Entre un nombre: ", convertir le résultat en nombre, et le mettre dans la variable guess
- Si guess == number, alors:
- Afficher "Bravo!"
- Si guess < number, alors:
- Afficher "Trop petit!"
- Sinon:
- Afficher "Trop grand!"
🛠️ Outil : la bibliothèque Python 🛠️
Dans Python, les piles sont incluses
https://docs.python.org/fr/3/library/index.html
(le lien le plus important de cette présentation)
Le but : faire plein de trucs sans avoir à les programmer nous-mêmes !
- Manipulation de dates
- Accès aux fichiers
- Statistiques
- E-mails
- Web
- Aléatoire
- …
Plein de trucs comme :
import datetime
print(datetime.date(1986, 4, 11).strftime("%A"))
# Friday
Exemple : le module datetime
import random
print(random.randint(0, 42))
# 39
print(random.randint(0, 42))
# 18
Exemple : le module random
Comme de par hasard c’est pile ce qu’il nous faut !
Modifiez votre programme pour faire deviner un nombre aléatoire
(astuce: utilisez random.randint(low, high))
🛠️ Outil : les boucles 🛠️
Les boucles permettent d’exécuter un bout de code plusieurs fois
- Générer un nombre entre 0 et 42
- Tant que le nombre n’a pas été trouvé:
- Demander d’entrer un nombre
counter = 0
while counter < 5:
print("Le compteur est à " + str(counter))
counter = counter + 1
print("Le compteur est terminé")
# Le compteur est à 0
# Le compteur est à 1
# Le compteur est à 2
# Le compteur est à 3
# Le compteur est à 4
# Le compteur est terminé
Deux-points, comme pour les if
4 espaces, comme pour les if
Exemple de boucle : un compteur
while True:
print("Oups")
print("Le compteur est terminé")
# Oups
# Oups
# Oups
# Oups
# Oups
# Oups
# Oups
# Oups
# Oups
# Oups
# Oups
# Oups
# Oups
# Oups
# ...
Une boucle infinie
😱
Jamais affiché !
counter = 0
while True:
if counter >= 5:
break
print("Le compteur est à " + str(counter))
counter = counter + 1
print("Le compteur est terminé")
# Le compteur est à 0
# Le compteur est à 1
# Le compteur est à 2
# Le compteur est à 3
# Le compteur est à 4
# Le compteur est terminé
Sortir d’une boucle infinie
Sortie de la boucle
- Créer une variable number avec un nombre aléatoire compris entre 0 et 42
- Boucle:
- Poser la question "Entre un nombre entre 0 et 42: ", convertir le résultat en nombre, et le mettre dans la variable guess
- Si guess == number, alors:
- Afficher "Bravo!"
- Sortir de la boucle
- Si guess < number, alors:
- Afficher "Trop petit!"
- Sinon:
- Afficher "Trop grand!"
Modifiez votre programme pour qu’il corresponde à ça
💡 Indices :
- Utilisez "while True:" pour faire une boucle infinie
- Utilisez "break" pour sortir de la boucle
import random
number = random.randint(0, 42)
while True:
guess = int(input("Entre un nombre entre 0 et 42: "))
if guess == number:
print("Bravo! Le nombre à deviner était " + str(number))
break
elif guess < number:
print("Trop petit!")
else:
print("Trop grand!")
Solution
Exercice supplémentaire : affichez le nombre d’essais qu’il a fallu au joueur ou à la joueuse !
🛠️ Outil : les exceptions 🛠️
Une exception survient quand Python ne sait pas quoi faire et ne peut pas continuer l’exécution du programme
À quoi ça ressemble ?
Entre un nombre entre 0 et 42: coucou! Traceback (most recent call last): File "main.py", line 6, in guess = int(input("Entre un nombre entre 0 et 42: ")) ValueError: invalid literal for int() with base 10: 'coucou!'
Emplacement du code qui a causé l’exception
Type de l’exception
- Boucle:
- Essayer de:
- Convertir le résultat de la question en nombre
- En cas d’erreur de conversion:
- Afficher "Ce n’est pas un nombre!"
- Continuer la boucle
- Essayer de:
while True:
try:
guess = input("Entre un nombre: ")
except ValueError:
print("Ce n’est pas un nombre!")
continue
Modifiez votre programme pour qu’il ne plante pas si la personne entre autre chose qu’un nombre
try:
...
except ValueError:
...
continue
Rappel de la syntaxe :
🛠️ Outil : les listes 🛠️
Les listes permettent de regrouper plusieurs valeurs
Comment garder un historique des nombres entrés par l’utilisateur ?
Tentative sans listes
guess1 = 0
guess2 = 0
guess3 = 0
current_guess = 1
while True:
guess = input("Entre un nombre: ")
if current_guess == 1:
guess1 = guess
elif current_guess == 2:
guess2 = guess
elif current_guess == 3:
guess3 = guess
current_guess = current_guess + 1
print("Votre historique: " + str(guess1) +
", " + str(guess2) + ", " + str(guess3))
- Ne fonctionne que pour 3 essais
- Répétition de code
- Noms de variables peu explicites
C’EST MOCHE 👎
2/10
Ne faites pas ça à la maison
Amélioration du code grâce aux listes
- guess_history = liste vide
- Boucle:
- Poser une question "Entre un nombre: " et mettre le résultat dans la variable guess
- Ajouter la valeur de la variable guess à la liste guess_history
- Afficher le contenu de la liste guess_history
😌
Utilisation des listes
guess_history = []
while True:
guess = input("Entre un nombre: ")
guess_history.append(guess)
print("Historique: " + ", ".join(guess_history))
😍
- guess_history = liste vide
- Boucle:
- Poser une question "Entre un nombre: " et mettre le résultat dans la variable guess
- Ajouter la valeur de la variable guess à la liste guess_history
- Afficher le contenu de la liste guess_history
my_list = ["pain", "pommes", "chocolat"]
print(my_list[0])
# pain
print(my_list[-1])
# chocolat
my_list.append("poires")
print(my_list[-1])
# poires
"pommes" in my_list
# True
print(" / ".join(my_list))
# pain / pommes / chocolat / poires
print(len(my_list))
# 4
Exemples d’utilisation d’une liste
Modifiez votre programme pour afficher l’historique des tentatives
ma_liste = []
ma_liste.append("Bonjour")
ma_liste.append("Sylvain")
print(", ".join(ma_liste))
# Bonjour, Sylvain
Rappel:
Comment écrire le programme suivant ?
- Initialiser la variable my_list avec la valeur ["La Powerhouse", "Yannick", "Magaly"]
- Pour chaque élément de la liste my_list:
- Afficher élément + " est cool"
my_list = ["La Powerhouse", "Yannick", "Magaly"]
current_item = 0
while current_item < len(my_list):
print(my_list[current_item] + " est cool")
current_item += 1
Première tentative
- 👍 Ça marche
- 👎 Mais c’est pas très poétique
La meilleure façon de parcourir les éléments d’une liste est d’utiliser
une boucle for
my_list = ["La Powerhouse", "Yannick", "Magaly"]
for item in my_list:
print(item + " est cool")
😍
🛠️ Outil : les objets 🛠️
Un objet est une valeur d’un certain type
- "Bonjour" est un objet de type str (chaîne de caractères)
- 42 est un objet de type int (nombre)
- True est un objet de type bool (booléen)
- ["Bonjour"] est un objet de type liste
Rappel
Le type d’une valeur influence son comportement
"14" < "2"
# True
14 < 2
# False
14 > "2"
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# TypeError: '>' not supported between instances of 'int' and 'str'
guess = input("Entre un nombre: ")
14 > guess
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# TypeError: '>' not supported between instances of 'int' and 'str'
Un type peut définir des fonctions disponibles uniquement sur les objets de ce type
my_list.append("Bonjour")
On appelle ça des « méthodes »
my_list = []
my_list.append("Bonjour")
print(my_list)
# ['Bonjour']
number = 42
number.append("Bonjour")
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# AttributeError: 'int' object has no attribute 'append'
Les méthodes disponibles pour chaque type sont dans la documentation de Python
Les fonctions dir() et help() permettent d’accéder à la documentation d’un type ou d’un objet
dir("Bonjour")
# ['__add__', '__class__', ..., 'capitalize', 'count']
print("Bonjour".count("o"))
# 2
help([])
# Help on list object:
#
# class list(object)
# | list(iterable=(), /)
# |
# | Built-in mutable sequence.
# |
# | If no argument is given, the constructor creates a new empty list.
# | The argument must be an iterable if specified.
# |
# | Methods defined here:
# |
# | __add__(self, value, /)
# | Return self+value.
# ...
Naviguer dans l’aide
- Espace : afficher plus
- q : quitter l’aide
Exercice 1
Écrivez un programme qui demande un mot ou une phrase, et qui affiche le nombre de "e" qu’il contient.
S’il n’y en a pas, le programme doit afficher "Il n’y a aucun e dans ce texte!"
Exercice 2 (en groupe)
Écrivez un programme qui demande un mot ou une phrase, et qui affiche ce mot ou cette phrase en changeant la « casse » (majuscules/minuscules) des voyelles.
Par exemple, « Origami » devient « orIgAmI ».
Exercice 3
Écrivez un programme qui demande des nombres (positifs ou négatifs), séparés par des espaces, et qui affiche le nombre le plus grand et le nombre le plus petit, séparés par des espaces.
Exemple :
Entrez des nombres séparés par des espaces: 5 8 3 -2 1 5 8 -2
Indice: utilisez la méthode split() du type str
Exercice 4
Écrivez un programme qui demande une phrase, qui enlève les espaces de la phrase, et qui l’affiche avec des groupes de 3 lettres séparés par des espaces. Par exemple :
Entrez une phrase: les chaussettes de l’archiduchesse les cha uss ett esd el’ arc hid uch ess e
Indice: utilisez la méthode replace() pour enlever les espaces
Et maintenant ?
- https://geniesducode.com/intro-python (cette présentation)
- Documentation officielle Python
- Génies du code
- Tutoriel Django Girls
- Exercism.io (exercices Python)
- CodeWars (exercices Python)
Intro à Python
By Sylvain Roflmao
Intro à Python
- 440