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 ! 🎉
PPS : j’aime bien les emojis 😊👍
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
Programme d’alunissage
⛳
Brownies double chocolat
🤤
Conclusion
Python c’est…
¹Source: TIOBE index, septembre 2021
Avec Python on peut créer…
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 ⁉️
É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
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 🛠
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 🛠️
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
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?
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 ➡️ print
Poser une question ➡️ input
🛠️ Outil : les conditions 🛠️
Exemple d’embranchement
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")
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.")
Bon on écrit du code ou quoi ⁉️
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 catégories dans le monde « réel »
3 types de base importants
type("Bonjour")
# <class 'str'>
type(42)
# <class 'int'>
type(True)
# <class 'bool'>
guess = input("Entre un chiffre: ")
print(guess)
# '4'
type(guess)
# <class 'str'>
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'
… 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
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
(indice : convertissez le retour de la fonction input en nombre avec la fonction int)
🛠️ Outil : la bibliothèque Python 🛠️
https://docs.python.org/fr/3/library/index.html
(le lien le plus important de cette présentation)
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 !
(astuce: utilisez random.randint(low, high))
🛠️ Outil : les boucles 🛠️
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
Modifiez votre programme pour qu’il corresponde à ça
💡 Indices :
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 🛠️
À 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
while True:
try:
guess = input("Entre un nombre: ")
except ValueError:
print("Ce n’est pas un nombre!")
continue
try:
...
except ValueError:
...
continue
Rappel de la syntaxe :
🛠️ Outil : les listes 🛠️
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))
C’EST MOCHE 👎
2/10
Ne faites pas ça à la maison
Amélioration du code grâce aux listes
😌
Utilisation des listes
guess_history = []
while True:
guess = input("Entre un nombre: ")
guess_history.append(guess)
print("Historique: " + ", ".join(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
ma_liste = []
ma_liste.append("Bonjour")
ma_liste.append("Sylvain")
print(", ".join(ma_liste))
# Bonjour, Sylvain
Rappel:
Comment écrire le programme suivant ?
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
my_list = ["La Powerhouse", "Yannick", "Magaly"]
for item in my_list:
print(item + " est cool")
😍
🛠️ Outil : les objets 🛠️
Rappel
"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'
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'
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
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 ?