Vous êtes sur la page 1sur 192

Sean McManus

MON COURS
VISUEL DE
PROGRAM\
MATION
SCRATCH ET PYTHON PAS-À-PAS
Traduit de l’anglais (Royaume-Uni) par
Christine Eberhardt
L’édition originale de cet ouvrage a été publiée en 2020
au Royaume-Uni par Dorling Kindersley sous le titre
Beginner’s Step-By-Step Coding Course

This edition published by arrangement


with Dorling Kindersley Limited,
a Penguin Random House Company.
All rights reserved.
Original Title : Beginner’s Step-by-Step Coding Course
Copyright © Dorling Kindersley Limited, 2020
DK, One Embassy Gardens, 8 Viaduct Gardens
London SW11 7BW
A Penguin Random House Company

Pour l’édition française :


© Dunod, 2021
11 rue Paul Bert, 92240 Malakoff
www.dunod.com
978-2-10-082801-2

Traduction : Christine Eberhardt

Interdit à la vente au Québec

For the curious


www.dk.com
SOMMAIRE À propos de ce livre

INTRODUCTION
6

Qu’est-ce que la programmation ? 8

Les langages de programmation 10


SCRATCH
Qu’est-ce que Scratch ? 16 Logique et décisions 32

L’interface de Scratch 18 Les entrées 34

Les sprites 20 Envoyer des messages 36

Blocs de couleur et scripts 22 Utiliser les fonctions 38

Le déplacement des sprites 24 Traducteur de voyage 40

Apparences et sons 26 Casse-tête 52

Gérer le déroulement du programme 28 Esquive d’astéroïdes 68

Manipuler les données 30
PYTHON®
Qu’est-ce que Python ? 82 Les bibliothèques 104

Installation de Python 84 Générateur d’équipes 106

Utilisation de IDLE 86 Débogage 118

Les variables dans Python 88 Planificateur de projet 122

Les données dans Python 90 Objets et classes 144

Opérateurs logiques et branchements 92 Gestionnaire de budget 146

Entrée et sortie 94 Pygame Zero 164

Les boucles dans Python 96 Knight’s Quest 166

Les fonctions 100


À propos de ce livre
Organisation de l’ouvrage
Deux chapitres exposent les principes fondamentaux sont présentés puis des projets vous sont proposés
des deux langages de programmation Scratch et afi n que vous puissiez tester par vous-même
Python. Pour chaque langage les principes de base les notions abordées.

Concepts
Chaque chapitre présente les concepts de
programmation de base du langage à l’aide
d’exemples de code pratiques que vous
pouvez tester pour mieux comprendre
le concept.

Les Illustrations vous


aident à comprendre
les concepts

Projets
Les projets de cet ouvrage vont vous VOUS ALLEZ APPRENDRE
apprendre à créer des jeux, des
planificateurs et des applications. Chacun Durée : Indique le temps estimé
d’eux débute par un rapide aperçu de ce 1 heure pour réaliser un projet
que vous allez apprendre, de comment le
planifier et de quoi vous aurez besoin pour Lignes de code : 58 Indique le nombre de lignes
le créer. Des instructions simples de code estimé pour
Niveau de difficulté un projet. Ce nombre varie
étape-par-étape vous guident en
expliquant chaque caractéristique du code, selon l’éditeur de code
à l’aide d’annotations détaillées. utilisé
VOUS ALLEZ APPRENDRE
Cet encadré présente les concepts Indique le niveau de difficulté
utilisés dans le projet d’un projet, 1 étant le plus facile

1.2
Les projets sont découpés 1.1
en sections avec des étapes bien
définies afin de faciliter
l’apprentissage

disponible = 2500.00
budgets = {}

ÉTAPE PAR ÉTAPE


6 7
Fenêtres de code Python
Le code Python est édité dans deux fenêtres différentes ;
la fenêtre de commande et l’éditeur. Dans cet ouvrage, Chaque rectangle de la grille
des couleurs différencient ces fenêtres à grille afin que vous représente un espace
sachiez dans laquelle vous devez saisir le code. dans le code

>>> input = 2 def reset_jeu():


>>> score = input * 3 global score, charmes
>>> print(score) score = 0
6 charmes = 0
FENÊTRE DE COMMANDE FENÊTRE DE L’ÉDITEUR

Ces chevrons n’apparaissent Chaque indentation (espace au début d’une


que dans la fenêtre de ligne) représente quatre cases de grille vides.
commande. Saisissez le code Les indentations supplémentaires sont
après l’invite >>> toujours en multiples de quatre cases

Icône « Enregistrer »
L’icône « Enregistrer » vous
rappelle à quel moment
vous devez sauvegarder
le programme au cours
du projet. ENREGISTRER

Trucs et astuces
La section Trucs et astuces en fin de projet
donne quelques astuces pour améliorer
Trucs et astuces
le code existant ou ajouter de nouvelles
fonctionnalités.

Code sur le site dunod.com Dunod


Le pack de ressources des projets de cet ouvrage
(à l’exception des sections « Trucs et astuces » et des projets www.dunod.com
créés avec Scratch) est disponible sur www.dunod.com.
Vous y trouverez le code au format original (.py)
et les images pour tous les jeux. Rendez-vous à cette adresse
pour télécharger le pack
de ressources de cet ouvrage
Qu’est-ce que la
programmation ?
Les ordinateurs et appareils électroniques
ont besoin de logiciels (ou programmes) pour
fonctionner. La programmation, ou codage, DEVENIR PROGRAMMEUR
est l’art d’écrire des instructions. Il existe des Une fois que vous maîtrisez les bases,
programmeurs professionnels mais le codage voici comment développer vos compétences
en développement.
peut aussi être un passe-temps. • Pratiquez : écrivez et testez du code
• Lisez du code : vous apprendrez beaucoup
en étudiant les programmes des autres
Les programmes informatiques sont partout • Apprenez plusieurs langages : en étudiant
La programmation ne concerne plus uniquement les systèmes les concepts sur lesquels reposent les
informatiques conventionnels. Le monde est devenu de autres langages, vous saurez lequel choisir
plus en plus numérique et presque tout fonctionne avec pour votre projet
• Publiez des projets : en publiant votre
des logiciels. Les programmes sont désormais intégrés
travail, vous bénéficierez des commentaires
dans des appareils tels que les téléphones portables des autres programmeurs et vous
et les tablettes, les équipements domestiques et même améliorerez votre code
dans les systèmes de transport.

Centre de données
Un centre de données est similaire
à une installation informatique à
l’échelle industrielle. Ses nombreux
serveurs accessibles sur Internet
stockent des données ou exécutent
un logiciel « dans le cloud ». Le « cloud » Ordinateur de bureau
est un réseau mondial de serveurs qui Les ordinateurs sont largement
fournissent des services via Internet. utilisés dans les bureaux et
les foyers pour gérer les activités
administratives et créatives
Voiture comme la musique, le design,
Un logiciel peut être le traitement de texte, Machine à laver
utilisé pour contrôler les comptes, etc. De nombreux appareils ménagers
la vitesse, la température sont équipés de programmes.
ou la consommation Les cycles de lavage, la température
d’une voiture. Le système de l’eau et les programmations
de navigation nécessite d’une machine à laver, par exemple,
également sont gérés par un logiciel.
des programmes.
INTRODUCTION
Qu’est-ce que la programmation ? 8 9
Qu’est-ce qu’un programme ? Penser comme l’ordinateur
Un programme est un ensemble d’instructions Pour écrire un programme, il faut comprendre
qu’un ordinateur suit pour effectuer une tâche. comment l’ordinateur traite les instructions.
Les programmes peuvent être extrêmement Chaque tâche doit être décomposée. On ne
complexes. Microsoft Windows, par exemple, peut pas simplement demander à un robot de
se compose de millions de lignes d’instructions. « faire griller des toasts », par exemple. Il faut
programmer des instructions précises et
Les applications, comme détaillées pour chaque étape du processus.
les traitements de texte,
s’exécutent au-dessus
du système d’exploitation
Au lieu de répéter deux fois
Les systèmes d’exploitation, 1. Ouvrir la corbeille à pain la même instruction, il sera
comme Microsoft Windows 2. Prendre le pain plus rapide et plus simple
et Mac OS, gèrent le matériel 3. Ouvrir le sac de dire dans le programme :
et les logiciels « Répéter deux fois : prendre
4. Prendre une tranche
la tranche, l’insérer
5. L’insérer dans le grille-pain
Le firmware est un logiciel dans le grille-pain »
6. Prendre une tranche
intégré au matériel, comme
7. L’insérer dans le grille-pain
le BIOS (Basic Input/Output
System) 8. Enfoncer le bouton
9. Attendre que les toasts
sautent
Le matériel représente
les éléments physiques d’un
ordinateur, comme l’écran

Console de jeux
Les consoles telles que la
PlayStation de Sony, la Xbox
Appareil photo
de Microsoft et la Nintendo Switch
Sur les appareils photo
sont des ordinateurs conçus
d’aujourd’hui, c’est un
pour offrir une excellente
logiciel qui permet
expérience de jeu.
de changer les réglages,
de revoir les photos et de
les supprimer au besoin.

Matériel industriel
Les usines sont souvent fortement
automatisées. Les robots de chaînes
d’assemblage, les systèmes de contrôle
et de planification et les caméras de contrôle
de qualité sont tous équipés de logiciels.
Les langages
de programmation
Un langage de programmation est un ensemble de mots
et de symboles qui permet d’écrire des instructions
pour un ordinateur. Il faut parfois choisir entre la facilité
d’utilisation du langage et sa puissance.

Langages de haut et de bas niveaux langage peut s’exécuter sur différents matériels.
Les langages de programmation de haut niveau Les langages de bas niveau offrent un contrôle plus
n’exigent pas de connaître le matériel informatique. Ils pointu de l’ordinateur, mais ils exigent une
emploient souvent des mots proches du langage humain compréhension plus approfondie de son fonctionnement.
et gèrent automatiquement certaines fonctions de Les programmes écrits dans ces langages peuvent ne
l’ordinateur. Souvent, un programme écrit dans ce pas fonctionner sur d’autres matériels.

Instruction pour
LANGAGES DE HAUT NIVEAU afficher du texte
••Écriture assez rapide
••Facile à comprendre
••Rapidité d’exécution acceptable print("Bonjour!")
••Programmes compatibles avec
différents matériels Python
••Aucune connaissance informatique Langage populaire de haut niveau,
requise Python est facile à lire et à écrire.
Cette instruction affiche
« Bonjour ! » sur l’écran.

Nombre
hexadécimal,
un système d’écriture
en base 16 courant
en informatique
LANGAGES DE BAS NIVEAU
••Contrôle direct des fonctionnalités
matérielles MOV AX, 66H
••Vitesse d’exécution supérieure
avec du code bien écrit Assembleur
••Nécessite une bonne connaissance Ce langage est très proche
du matériel du code machine du processeur.
••Programme uniquement compatible Cet exemple prend un nombre
avec le même processeur ou un et le place dans l’accumulateur
processeur similaire du processeur.
INTRODUCTION
Les langages de programmation 10 11
Code machine Comment l’ordinateur comprend
Le code de bas niveau qui est directement reconnu un langage de programmation
par le matériel informatique et le processeur est Tous les programmes finissent sous forme de
appelé code machine, ou langage machine. C’est une code machine. La plupart sont écrits dans des
collection de chiffres binaires – 0 et 1 – que le langages conviviaux qui doivent être traduits en
processeur lit et interprète. Les instructions en code bits pour pouvoir être exécutés par un processeur.
machine se composent d’un nombre appelé opcode, Un interpréteur traduit et exécute les instructions
ou code opération, qui détermine la nature pendant l’exécution du programme, alors que les
de l’instruction, et d’un ou plusieurs opérandes, compilateurs traduisent le programme une fois
qui indiquent quelles données utiliser. pour toutes avant qu’il ne s’exécute.

Microprocesseur
Le microprocesseur est le
« cerveau » de l’ordinateur :
il contrôle la plupart
des opérations. Il exécute
01101000
les commandes et les 01101001
instructions de code machine.
00001101
00001010
CODE CONVERSION EXÉCUTION
CONVIVIAL EN INSTRUCTIONS DES INSTRUCTIONS

Utilisation d’un environnement APPLICATIONS


de développement intégré (EDI)
Un EDI est un ensemble d’outils pour les Une fois que vous avez appris à programmer,
programmeurs. Il contient un éditeur de code et ces compétences peuvent être utilisées pour
fournit souvent des fonctions telles que la saisie un large éventail de projets créatifs.
semi-automatique et l’affichage en couleurs pour •• Domotique : pour contrôler certaines choses à
faciliter sa lecture. Certains EDI proposent aussi distance comme l’éclairage ou les volets roulants
•• Jeux : c’est un excellent moyen d’expérimenter
un débogueur et un compilateur ou un interpréteur
le codage car ils sont faciles à partager et on
pour tester et exécuter les programmes. peut donc obtenir un bon retour dessus
Zone de code pour écrire (voir pages 68‑79, 166‑191)
et modifier les programmes •• Robots : grâce aux cartes Arduino ou
Raspberry Pi combinées à des kits ou
composants électroniques, on peut
programmer ses propres robots.
Explorateur •• Sites web et applications web : apprendre à
pour les fichiers coder en HTML, CSS ou JavaScript permet aussi
du projet
de créer des programmes exécutables
directement depuis un navigateur Internet

Exemple d’interface
Avec certains IDE, vous pouvez configurer
votre environnement de travail. Ici le
Débogueur pour programmeur parcourt les fichiers du projet
corriger les erreurs à gauche, écrit et modifie le code à droite
du programme et contrôle ses erreurs en bas.
Types de langages de programmation
De nombreuses philosophies ou paradigmes ont été utilisés pour concevoir
des langages de programmation. N’étant pas mutuellement exclusifs,
ils incarnent souvent différentes notions fondamentales. Ils peuvent aussi
être utilisés en fonction de l’approche choisie par le programmeur.
Python, par exemple, peut être utilisé en programmation orientée objet ou
procédurale. JavaScript peut être utilisé en programmation événementielle
ou orientée objet. L’approche et le langage choisis sont souvent une question
de préférence du programmeur. Voici quelques définitions et classements
des langages de programmation.

PROGRAMMATION IMPÉRATIVE PROGRAMMATION DÉCLARATIVE


Ces langages se traduisent par une liste d’instructions En programmation déclarative, les programmeurs indiquent à
à exécuter par l’ordinateur. Le programmeur doit l’ordinateur le résultat souhaité, sans avoir besoin de préciser
d’abord déterminer comment la tâche peut être comment il sera atteint. Avec Wolfram, par exemple, un nuage
effectuée, puis fournir les instructions étape par de mots basé sur les mots de la page Musique de Wikipédia peut
étape. Les langages impératifs sont courants et être créé en utilisant une seule ligne. D’autres langages déclaratifs
incluent Python (voir page 80), C, C ++ et Java. incluent SQL, qui est utilisé pour les bases de données.

user = input("Quel est votre nom ?") WordCloud[WikipediaData["music"]]


print("Hello", user) SAISIE DANS WOLFRAM

SAISIE DANS PYTHON Programme python qui


souhaite la bienvenue
à l’utilisateur classical work western musicians
styles bass blues
pop history
Quel est votre nom ? Marius genres
songs
pitch
study Music styles
period
art
melody traditional
Hello Marius era culture
note theory instruments
SORTIE DE PYTHON
SORTIE DE WOLFRAM

PROGRAMMATION
ÉVÉNEMENTIELLE Crée un bouton
En programmation événementielle, de page web
le programme surveille l’apparition d’un
événement puis démarre la séquence
d’instructions appropriée quand il se <input type="button" value="Cliquez ici!"
produit. Par exemple, un programme peut
réagir aux actions de l’utilisateur, à l’entrée onClick="showMessage();">
d’un capteur ou aux messages d’autres
systèmes informatiques. JavaScript et
Scratch (voir page 14), entre autres, peuvent
Un clic sur le bouton
être utilisés pour écrire des programmes Cette icône signale que la ligne
déclenche l’exécution des
orientés événements. de code a été coupée
instructions Javascript de
et continue sur une seconde ligne
showMessage()
INTRODUCTION
Les langages de programmation 12 13
CHOIX DU LANGAGE
Parfois, les programmeurs PYTHON SCRATCH
choisissent leur langage en fonction
Langage flexible dont le code est facile Parfait pour débuter, Scratch est
du matériel, de l’équipe avec laquelle à comprendre idéal pour les jeux simples.
ils programment ou du type
d’application qu’ils souhaitent créer.
JAVA JAVASCRIPT
Ils ont souvent le choix.
Largement utilisé dans la finance, les Utilisé pour l’interactivité
petits appareils et téléphones Android des pages web.

PROGRAMMATION PROCÉDURALE PROGRAMMATION ORIENTÉE OBJET


Programmation basée sur des fonctions, En programmation orientée objet, les données et les instructions associées
qui constituent des éléments de programme sont stockées dans des « objets ». Ceux-ci peuvent interagir pour répondre
réutilisables. Les fonctions peuvent exécuter aux besoins du programme. L’objectif est de rendre le code plus modulaire,
d’autres fonctions et même se relancer. Elles donc plus facile à gérer et réutilisable. De nombreux langages de
simplifient le développement, le test et la gestion programmation courants, tels que C++, JavaScript et Python, prennent en
des programmes. De nombreux langages tels charge la programmation orientée objet.
que Java et Python (voir page 80) prennent en
charge la programmation procédurale.
OBJET

PROGRAMME PRINCIPAL
Données pour cet objet

Instructions pour cet objet

Interfaces de communication

FONCTION 1

FONCTION 3

LANGAGES DE PROGRAMMATION VISUELS


Ces langages facilitent le développement grâce à leurs interfaces basées
FONCTION 2 sur le glisser-déposer. La programmation s’effectue plus rapidement et avec
moins d’erreurs. Visual Basic, par exemple, propose des outils pour
concevoir visuellement des interfaces utilisateur. Scratch (voir page 14)
est un autre langage très visuel, souvent utilisé pour apprendre la
programmation.

Programme Scratch
qui réagit lorsqu’on clique
sur un bouton

Quand ce sprite est cliqué

dire Le bouton a été cliqué ! pendant 2 secondes


SCRATCH
Qu’est-ce que Scratch ?
Scratch est un langage de programmation visuel qui n’implique
aucune saisie de code. Les programmes sont construits à l’aide de
blocs colorés qui représentent des instructions. Scratch met l’accent
sur l’aspect créatif du codage et permet aux utilisateurs de créer
des jeux interactifs, des histoires et d’autres applications visuelles.

Fonctionnalités
Les fonctionnalités de Scratch en font
un langage idéal pour les débutants.
L’utilisation de blocs de code prêts
à l’emploi, en particulier, le distingue Com
de la plupart des autres langages. L e s u mu n a u
t
com tilisateu é
mun r s de
com
m ique Scra
peuv unauté r entre e tch peu
p ou e nt p ar S c ratch ux via u vent
r t n
avec que d’a ager leu intégrée e
u r
Ils p , les mod tres pui s progra . Ils
e s
en é uvent é ifier ou sent jou mmes
tudi g l
ant l alemen es remix er
es p
roje t appren er.
t s de d
s aut re
re s .
posé
Glissé-dé Scratch sont
de
Les blocs posés dans la

glissés et é er
e d e co de pour cr très
zon e s. Il y a
mm
des progra pe, les utilisateurs
fr ap eptibles
peu de
nt do n c moins susc
so .
es erreurs
de faire d

sant
Langage puis à utiliser,
h es t faci le
Scratc
des concepts
mais applique
tiques à ceux
de base iden s.
professionnel
des langages nc
do
Il représente
troduction
une bonne in ion.
m at
à la program

Conceptio
n
Les blocs d en puzzle
’in
s’emboîten structions
t comme d
de puzzle, es
il n’est don pièces
possible de c pas
cr
combinaiso éer de mauvaises
n
logique so s. Les erreurs de
nt ainsi min
imisées.
SCRATCH
Qu’est-ce que Scratch ? 16 17
Apprendre à programmer avec Scratch de blocs de code colorés qui
Scratch a été créé par le groupe Lifelong s’assemblent pour former des scripts.
Kindergarten du Massachusetts Institute of Ces derniers peuvent intégrer des images
Technology (MIT) aux États-Unis en 2007. et du son pour créer une action à l’écran.
Scratch est ludique et très facile à utiliser pour Scratch fournit une plateforme très
débuter, c’est pourquoi il est largement utilisé dans performante (voir pages 18-19) pour
l’éducation. Son interface très visuelle se compose l’apprentissage de la programmation.

Support matériel
La dernière version de Scratch fonctionne avec
Windows, macOS, Linux et même sur tablette.
grées
Ressources inté ue Des extensions fournissent l’interaction avec
rat ch es t liv ré av ec une bibliothèq
Sc ma ge s
préinstallée de so
ns et d’i des périphériques matériels.
ir pages 20-21).
(appelés sprites, vo e
ga ge s n’offrent pas un
Les autres lan uven t cré er ou
t so
telle facilité, il fau
ages avant d’écrire Raspberry Pi
télécharger les im Scratch peut utiliser un Raspberry Pi pour
un program me .
se connecter à d’autres capteurs ou moteurs.

micro:bit
Scratch peut être utilisé avec un BBC micro:bit
doté d’un écran LED intégré, de boutons
et de capteurs d’inclinaison.

Lego®
Scratch peut se connecter à Lego® WeDo et Lego®
Mindstorms™ pour contrôler des moteurs,
capteurs et robots.

Webcam
Scratch est capable d’accéder à une webcam
pour superposer des images à un flux vidéo afin
de créer des applications en réalité augmentée.

OÙ TROUVER SCRATCH
Coda
g
L’environnement de développement Scratch est
Chaqu e par coul requis pour utiliser Scratch. Il est accessible
e
pour e bloc d’ins urs en ligne et hors ligne.
le t
le con mouveme ruction
t n
(entre rôle et la d t, le son,
é
une c autres) pos tection Dans votre navigateur
o s
identifi uleur facile ède Rendez-vous sur site Web Scratch
m
créatio able lors d ent https://scratch.mit.edu/ et cliquez sur
n d’un e la Rejoindre pour créer un compte.
progr
amme
.
Hors ligne
Vous pouvez télécharger Scratch
pour travailler hors ligne depuis le site
https://scratch.mit.edu/download.
L’interface de Scratch
C’est dans l’interface de Scratch que vous créez des programmes,
que vous les éditez et que vous en affichez le résultat. L’interface est
divisée en plusieurs sections, chacune ayant un objectif particulier.
Ce livre utilise Scratch 3.0 – la dernière version de Scratch.
Création d’un nouveau Cliquez sur l’onglet Son
projet, chargement Modification pour ajouter des effets
Comprendre l’interface Choix depuis ou enregistrement des projets sonores ou de la
L’interface de Scratch se compose des sections de la langue sur l’ordinateur existants musique aux sprites
suivantes :
•• Palette des blocs : elle contient les instructions,
SCRATCH Fichier Modifier Tutoriels
ou blocs de code, nécessaires pour construire
un programme Code Costumes Sons
•• Zone du code : c’est là que les blocs de code sont
assemblés pour créer un script Cliquez sur l’onglet
Mouvement Costumes pour
•• Scène : zone d’interaction de l’utilisateur avec Mouvement changer
le programme avancer de 10 pas l’apparence
•• Liste des sprites : affiche et gère toutes du sprite
les images, ou sprites, du programme Apparence
tourner 15 degrés
•• Info scène : gère les images d’arrière-plan
Son tourner 15 degrés

Événements
aller à position aléatoire
SCÈNE
PALETTE
ZONE Contrôle aller à x: 0 y: 0
DES
DE CODE
BLOCS
glisser en 1 secondes à position aléatoire
Capteurs
LISTE
DES SPRITES glisser en 1 secondes à x: 0 y: 0
Opérateurs
INFO SCÈNE
s’orienter à 90
Variables
VERSIONS DE SCRATCH s’orienter vers pointeur de souris
Mes blocs
Scratch existe actuellement en trois versions, Faites glisser les blocs
chacune avec une disposition d’écran différente. d’instructions dans la zone
de code et emboîtez-les
Les fonctionnalités et blocs d’instructions les plus
pour construire un programme
récents ne fonctionnent pas tous avec
Contient les blocs d’instruction
les versions antérieures.
disponibles
•• Scratch 1.4 : Interface similaire à celle
de Scratch 3.0, la zone de code s’appelait
l’espace des scripts
•• Scratch 2.0 : La scène se trouvait à gauche.
Introduction du clonage des sprites et Sac à dos
réorganisation de certains blocs d’événements.
Utilisez le bouton « Ajouter Stockez le code, les sprites, les costumes
•• Scratch 3.0 : Introduction des extensions et
une extension » pour ajouter et les sons intéressants dans le sac à dos
déplacement des blocs stylo dans ces derniers. de nouvelles catégories de pour les réutiliser dans d’autres projets
blocs à la palette des blocs
SCRATCH
L’interface de Scratch 18 19

La scène montre les Cliquez sur un


Partage des sprites qui bougent sprite sur la scène Modification
projets avec Accès à la page et interagissent ou dans la liste du profil et accès
Nom la communauté d’un projet de lorsqu’un projet est des sprites pour aux projets
du projet de Scratch la communauté exécuté le sélectionner sauvegardés

Untitled Partager Voir la page du projet scratch-cat


Changement de la taille
Exécution Arrêt du de la scène
du programme programme ou de l’espace du code

Quand est cliqué

répéter indéfiniment

glisser en 3 secondes à x: 0 y: –150


glisser en 3 secondes à x: 200 y: 100
glisser en 3 secondes à x: –200 y: 100

Les blocs s’emboîtent.


Faites-les bouger avec la souris

Scène
Sprite Sprite1 x -90 y -10

Afficher Taille 100 Direction 90

Informations associées Arrière-plans


au sprite sélectionné
2

Sprite 1 Cactus

Faites glisser les blocs d’instructions Le cadre bleu Cette fenêtre montre les sprites Ajout Choix de
dans la zone de code et emboîtez-les signale le sprite utilisés dans le programme. de nouveaux l’arrière-plan
pour créer le script d’un programme sélectionné Sélectionnez-en un pour afficher sprites au projet
son code dans l’espace code
Les sprites
Les sprites sont les composants de base de Scratch. Comme les personnages
d’un jeu vidéo, ils peuvent se déplacer sur la scène, changer d’apparence et
interagir avec d’autres sprites. Chaque sprite utilise une ou plusieurs images
et est contrôlé par des scripts.

Comment fonctionnent les sprites ?


La plupart des sprites ont plusieurs images, appelées
costumes, qui peuvent être utilisées pour les animer
dans un programme. Le sprite chat, par exemple, a deux
costumes qui montrent ses pattes dans des positions Sprite par défaut
différentes. Passer d’un costume à l’autre donne Chaque projet commence avec
le sprite chat. Supprimez-le
l’impression que le chat marche sur la scène. Scratch en cliquant sur la croix de sa Sprite1
est livré avec une bibliothèque préchargée de sprites. vignette dans la liste des sprites.

Créer un sprite
Le bouton Choisir un sprite en bas à droite de la liste des sprites propose
des options pour ajouter, créer ou télécharger de nouveaux sprites
dans un projet.

Importer un sprite
Les utilisateurs peuvent Surprise
importer leurs propres images Scratch propose aussi d’ajouter
dans l’interface Scratch un sprite choisi au hasard dans
pour les utiliser comme sprites. la bibliothèque des sprites.
Cela inclut des photographies, Cela permet d’expérimenter
qui peuvent être utiles ou de générer de nouvelles
pour créer ou personnaliser idées de jeu.
des jeux.

Choisir un sprite Peindre


Scratch propose de Les utilisateurs peuvent
nombreux sprites dans sa créer leurs propres images
bibliothèque. Ils sont classés par dans l’éditeur de dessin de
catégories telles que Animaux, Scratch (illustré à droite). Cet
Personnes et Fantaisie. Le survol éditeur est assez polyvalent et
d’un sprite dans la bibliothèque peut être utilisé pour modifier
fait défiler ses costumes. les costumes des sprites
de la bibliothèque.
SCRATCH
Les sprites 20 21
Dessiner le costume d’un sprite
Vous pouvez créer de nouveaux sprites ou des ce qui facilite leur modification. L’utilisateur peut
costumes supplémentaires à l’aide de l’éditeur de passer en mode bitmap, qui stocke la couleur de
dessin. Les images sont stockées par défaut en chaque bit de l’image. Ci-dessous, l’éditeur est en
mode vectoriel, sous forme de formes et de lignes, mode vectoriel.

Cliquez sur cet onglet Nommer le costume


pour ouvrir l’éditeur Annuler/rétablir
Contrôler l’ordre
Grouper ou dissocier d’empilage
Code Costumes Sons les formes des éléments

1 Costume Costume1
Grouper Dégrouper Avancer Reculer Avant- Arrière-
plan plan

costume1 Remplissage Contour 2


239 x 315 Copier Coller Supprimer Retourner Retourner
Choix du costume horizontalement verticalement
à modifier
Sélection d’une
couleur de contour Épaisseur Retourne
Sélection du trait horizontalement
2 d’une couleur ou verticalement
de remplissage l’élément
Outil sélectionné
costume 2 sélection
239 x 315
Outil gomme pour
L’outil pinceau effacer l’élément
dessine une sélectionné
forme à la main Outil texte pour ajouter
L’outil du texte sur une image
remplissage
colore une forme

Utilisez les outils


ligne, cercle
et rectangle
pour dessiner
des formes

Convertir en bitmap

Ajouter Conversion du mode Servez-vous du canevas Contrôle


un costume vectoriel au mode bitmap pour dessiner une image du zoom
Blocs de couleur
et scripts
Les instructions de Scratch sont disponibles sous forme de blocs
colorés qui peuvent être assemblés pour former des « scripts ».
Ces blocs peuvent être utilisés pour collecter des informations
d’entrée, traiter et afficher un résultat à l’écran.

Exécution du programme
Un programme peut recevoir des informations de capteurs. La sortie peut être transmise à l’écran,
(l’« entrée »), les traiter, puis fournir un résultat à une imprimante ou à une autre interface.
(la « sortie »). Dans un jeu, l’entrée peut être les touches Dans Scratch, les instructions du programme sont
pressées par le joueur et la sortie le mouvement à construites à l’aide des blocs de code. Ces instructions
l’écran. L’entrée d’un programme peut provenir des s’exécutent toujours de haut en bas, sauf indication
utilisateurs, d’autres systèmes informatiques ou contraire.

Blocs d’entrée Blocs de traitement

touche le pointeur de souris ? quand l’arrière-plan bascule sur backdrop1

Blocs de capteur Blocs d’événements


Ces blocs vérifient si des sprites ou des Les blocs d’événements en forme de chapeau (voir p. 28) peuvent
couleurs se touchent, si des touches sont également être utilisés pour commencer à traiter des scripts
pressées ou pour demander à l’utilisateur lorsque quelque chose se produit, par exemple lorsque
de saisir du texte (entre autres). l’utilisateur appuie sur une touche ou qu’un sprite envoie
un message à d’autres sprites.

attendre jusqu’à ce que

Blocs de contrôle
Les blocs de contrôle sont utilisés pour choisir
ce qu’il faut faire ensuite. Ils indiquent aussi
combien de fois un ensemble de blocs doit se
répéter et quand le script doit s’arrêter.
Quand ce sprite est cliqué

Blocs d’événements
Ces blocs détectent si on clique
sur le drapeau vert, sur une touche
ou un sprite.
SCRATCH
Blocs de couleur et scripts 22 23
Utilisation de la palette Sélectionnez cet onglet pour commencer

des blocs Code Costumes Sons


La palette des blocs se trouve à gauche Mouvement Sélectionnez un bloc
de l’interface Scratch. Elle contient neuf Mouvement
avancer de 10 pas
et faites-le glisser
types différents de blocs et un bouton dans la zone de code
Apparence
« Ajouter une extension » pour ajouter tourner de 15 degrés
des blocs supplémentaires à la palette. Son quand est cliqué
Les blocs peuvent être consultés tourner de 15 degrés
en passant d’une catégorie colorée Événements avancer de 10 pas
à l’autre et en faisant défiler la liste aller à position aléatoire
qui s’affiche. Contrôle Emboîtez les blocs
aller à x: 0 y: 0
Capteurs
Création de scripts
Pour créer un script, cliquez sur un bloc et Opérateurs
faites-le glisser dans la zone de code. Déposez Cliquez sur une catégorie
le bloc sous un autre et ils vont s’emboîter pour pour afficher la liste
Variables
faire un script. Si les blocs ne s’emboîtent de blocs correspondante
pas c’est que la combinaison n’est pas bonne
ou qu’ils ne sont pas suffisamment proches. Mes blocs

Blocs de sortie

+ avancer de 10 pas

Blocs opérateurs Blocs de mouvement


Ces blocs sont utilisés pour les mathématiques, pour comparer Les blocs de mouvement affichent le
des nombres et des extraits de texte, ainsi que pour analyser résultat d’un programme en déplaçant
du texte. Ils peuvent aussi générer des nombres aléatoires, et en contrôlant les sprites sur la scène.
et sont parfaits pour ajouter des surprises à un jeu.
basculer sur le costume costume 1
mettre ma variable à 1
Les blocs d’apparence
Blocs de variables Ces blocs peuvent modifier le costume d’un sprite
Les blocs de variables permettent de stocker ou l’image d’arrière-plan, et afficher des
des informations, telles que le score actuel d’un jeu informations dans une bulle. Ils peuvent
ou du texte. Certains blocs de cette catégorie peuvent également modifier la taille et la visibilité
augmenter ou diminuer le contenu d’une variable. d’un sprite et appliquer des effets spéciaux.

jouer le son Miaou

Les blocs de son


Les blocs de son sont utilisés pour ajouter des
effets sonores à un programme. Ils fournissent
la sortie audio en diffusant les sons enregistrés.
Le déplacement
des sprites
Scratch est un langage idéal pour la programmation de jeux et d’applications
simples qui font bouger des images sur l’écran. Il dispose d’un ensemble de blocs
de mouvement bleus permettant de contrôler les mouvements d’un sprite.
axe x Grille x et y
–240 0 240 La scène ci-contre est
Coordonnées 180
quadrillée de lignes
Dans Scratch, n’importe quelle position sur la espacées de 60 pas.
(x=180, y=120) Testez ces positions dans
scène peut être identifiée à l’aide des coordonnées les blocs de mouvement
x et y. L’axe x passe de -240 sur la gauche à 240 (x=–120, y=60)

axe y
(ci-dessous) pour
0
sur la droite, et l’axe y passe de -180 en bas à 180 déplacer un sprite
à l’aide de
en haut. Quand vous créez un programme,
(x=–180, y=60) coordonnées.
ces coordonnées permettent de positionner
précisément un sprite sur la scène. (x=60 y=−120)
–180

Déplacement des sprites


à l’aide des coordonnées
Ces blocs de mouvement permettent Ajouter 10 à x Mettre y à 0
de déplacer un sprite vers une position
particulière sur la scène. Les blocs aller Modifie la composante x Change la composante y de la position
de la position Déplace le sprite vers un emplacement
à x : y :, mettre x à et mettre y à sont de coordonnée y, sans changer sa
Change la valeur de x par le nombre
souvent utilisés pour définir la position saisi dans le bloc, sans changer y. coordonnée x. Comme pour le bloc x
de départ d’un sprite. Le sprite se déplace latéralement. analogue, le sprite saute à cet
emplacement.

Mettre x à 0 Abscisse x
aller à x: 0 y: 0
Change la composante x Affiche la valeur de x
Définit la position du sprite de la position Ce bloc ne produit pas de déplacement,
Fait sauter le sprite à un emplacement Déplace le sprite vers un il affiche la coordonnée x du sprite
particulier sur la scène. Les chiffres du bloc emplacement de coordonnée x, sans sélectionné. Déposez-le dans d’autres
peuvent être modifiés pour choisir d’autres changer sa coordonnée y. Le sprite blocs pour utiliser cette coordonnée
coordonnées. saute à cet emplacement. dans un script.

Ordonnée y
Glisser en 1 secondes à x: 0 y: 0 Ajouter 10 à y
Affiche la valeur de y
Déplace le sprite en un temps donné Modifie la composante y Ne déplace pas un sprite, mais affiche sa
Ce bloc fait glisser le sprite de la position coordonnée y. Il peut également être
à un emplacement donné. Vous spécifiez Change la valeur de y par utilisé avec d’autres blocs. Par exemple,
la durée en secondes du mouvement le nombre saisi dans le bloc, on peut demander à un sprite d’indiquer
dans la zone d’entrée. sans changer x. sa coordonnée y (voir page 26).
SCRATCH
Le déplacement des sprites 24 25
0
Déplacer des sprites à l’aide des directions
-45 45
Dans Scratch, chaque position sur la scène correspond à un pas. Pour
déplacer un sprite, il faut lui donner une direction puis le faire avancer. -90 90
La direction 90 degrés orientera le visage d’un sprite vers la droite.
C’est la direction par défaut pour la plupart des sprites. -135 135
180

Avancer de 10 pas Tourner de 15 degrés


Déplacement d’un sprite Faire pivoter un sprite dans le sens inverse des aiguilles
Ce bloc déplace le sprite de 10 pas sur la scène. Cependant, puisqu’il d’une montre
s’agit d’un seul mouvement, le sprite semble sauter, pas marcher. Change la direction du sprite de 15 degrés dans l’autre sens.
Le nombre de degrés peut être modifié par l’utilisateur.

Tourner de 15 degrés
S’orienter à 90
Faire pivoter un sprite dans le sens
des aiguilles d’une montre Change la direction du sprite
Change la direction du sprite de 15 degrés dans le sens des Définit la direction du sprite. Un nombre entre 0
aiguilles d’une montre. Comme pour tous les blocs qui et 180 oriente dans le sens des aiguilles d’une montre,
acceptent une entrée, le nombre de degrés peut être modifié. entre 0 et — 180 il oriente dans l’autre sens.

Le sprite se positionne
au départ sans tracer
de ligne

Dessiner avec les blocs stylos relever le stylo


Chaque sprite a un stylo, qu’il peut utiliser
aller à position aléatoire
pour tracer une ligne lorsqu’il se déplace
sur la scène. La largeur (ou la taille) et la On active
stylo en position d’écriture le stylo
couleur de la ligne sont modifiables. Le bloc
Stylo en position d’écriture est utilisé pour ajouter 10 à la couleur du stylo
dessiner, tandis que le bloc Relever le stylo
avancer de 100 pas Le script change
le désactive. Les blocs stylo sont la couleur du
une extension dans Scratch 3.0. stylo chaque
Vous les trouverez dans la section Ajouter tourner de 120 degrés fois qu’il
s’exécute
une extension de la palette des blocs.
avancer de 100 pas 100 est
la longueur
du côté
tourner de 120 degrés
Dessiner un triangle
Testez ce script pour dessiner un triangle
à l’aide de blocs stylo et mouvement.
avancer de 100 pas 120 correspond
Cliquez sur le script pour l’exécuter. Le bloc à l’angle
effacer tout dans la palette des blocs tourner de 120 degrés du triangle
permet d’effacer la scène.
Apparences et sons
Dans un jeu, les effets sonores indiquent souvent aux joueurs
ce qui se passe. Changer l’apparence d’un sprite ou jouer
des sons peut aussi être utile dans d’autres programmes.
Cela permet d’avertir les utilisateurs ou d’attirer leur attention
sur quelque chose d’important.

Affichage des messages Dire bonjour ! Dire Bonjour ! Pendant 2 secondes


Dans Scratch, les sprites peuvent
afficher des messages dans Bulle de parole Bulle de parole temporisée
Ce bloc affiche une bulle contenant Ce bloc déclenche l’affichage d’un message
des bulles de parole ou de pensée. « Bonjour ! » jusqu’à ce qu’un nouveau qui disparaît au bout de deux secondes. Le message
Ceux-ci sont créés en utilisant bloc dire ou penser à soit utilisé. et sa durée peuvent être modifiés.
les blocs dire et penser à
de la section Apparence dans Penser à Hmm... Penser à Hmm... pendant 2 secondes
la palette des blocs. Les trous
dans ces blocs permettent Bulle de pensée temporisée Bulle de pensée temporisée
Ce bloc affiche une bulle contenant Ce bloc affiche une bulle de pensée qui disparaît au
de modifier le message « Bonjour ! » jusqu’à ce qu’un nouveau bout de deux secondes. Encore une fois, il est
ou d’y glisser un autre bloc. bloc dire ou penser à soit utilisé. possible de modifier à la fois le message et sa durée.

Changer l’apparence d’un sprite


Annule les effets graphiques
Les blocs d’apparence montrent la réaction d’un sprite
à un événement de jeu en lui attribuant un effet spécial. Ils peuvent Supprime les effets
également afficher un message. Certains peuvent même rendre Dans Scratch, chaque sprite peut avoir
ses propres effets spéciaux. Ce bloc
un sprite visible ou invisible.
supprime tout effet spécial appliqué.

Basculer sur le costume costume1 Mettre la taille à 100 % de la taille initiale Cacher

Changement de costume Change la taille Masque le sprite


Ce bloc remplace le costume d’un sprite Modifie la taille du sprite du pourcentage indiqué, Rend un sprite invisible sur la scène.
par l’image que vous choisissez dans la liste 100 % étant sa taille par défaut. Il peut toujours se déplacer à l’aide
déroulante. des blocs de mouvement.

Costume suivant Ajouter 25 à l’effet couleur montrer

Affiche le costume suivant Change l’effet Affiche le sprite


Parfait pour l’animation, il passe au prochain Augmente (ou diminue) un effet spécial Affiche de nouveau un sprite rendu
costume ou réaffiche le premier, selon à l’aide d’un nombre positif (ou négatif). invisible par le bloc cacher.
le costume actuel du sprite. Ce nombre et l’effet sont modifiables.

Ajouter 10 à la taille Mettre l’effet couleur à 0

Change la taille Définit l’effet


Modifie la taille du sprite du pourcentage Applique une valeur à un effet spécial,
saisi dans le bloc. Un nombre négatif réduit quelle que soit la valeur en cours.
la taille du sprite. 0 annule l’effet.
SCRATCH
Apparences et sons 26 27

BLOCS DE MUSIQUE
Les blocs de musique dans Scratch doivent
mettre le tempo à 120
être ajoutés à l’aide du bouton Ajouter
une extension, en bas à gauche de la palette choisir l’instrument n° (20) Lead synthétisé
des blocs. Ils permettent aux programmeurs
de jouer de la musique. Il n’est pas nécessaire jouer la note 60 pendant 0.25 temps
de connaître le numéro de chaque note.
Un clavier de piano s’affiche dès que jouer la note 62 pendant 0.25 temps
vous cliquez sur ce numéro et vous choisissez
la note. jouer la note 64 pendant 0.25 temps

Le bloc choisir l’instrument jouer la note 62 pendant 0.25 temps


de Scratch propose
21 instruments de musique jouer la note 67 pendant 1 temps

Diffuser du son Jouer le son Miaou jusqu’au bout Ajouter 10 à l’effet hauteur
Les sons sont un excellent
moyen de fournir des Met le script en pause pour diffuser le son Change la hauteur
Définit un son à diffuser, puis interrompt Modifie la hauteur d’un effet sonore.
commentaires dans un jeu le script jusqu’à ce qu’il soit terminé. Le choix Les nombres positifs l’augmentent alors que
ou de déclencher du son se fait dans la liste déroulante. les nombres négatifs la réduisent. Le menu
une alerte dans un propose aussi le réglage stéréo.
programme. Pour qu’un
son puisse être utilisé, jouer le son Miaou Mettre l’effet hauteur à 100
il doit être ajouté au sprite
Diffuse le son en arrière-plan Réinitialisation de la hauteur
à partir du bouton Choisir Diffuse un son en arrière-plan pendant Réinitialise la hauteur ou la rétablit à la valeur
un son sous l’onglet Sons. que le script s’exécute. spécifiée par le programmeur. Ce bloc peut
aussi régler la stéréo gauche/droite.
Les sons proviennent de
la bibliothèque de Scratch
ou sont enregistrés ou Arrêter tous les sons Annuler tous les effets sonores
téléchargés. Stoppe la diffusion de tous les sons Supprime les effets sonores
Ce bloc arrête tous les sons, Ce bloc réinitialise tous les effets sonores
quel que soit leur nombre ou le sprite précédemment appliqués sur des sprites
qui les a démarrés. ou arrière-plans.
Gérer le déroulement
du programme
Les programmeurs doivent non seulement dire à l’ordinateur ce qu’il faut faire,
mais aussi quand le faire. Dans Scratch, les blocs de contrôle et d’événements
sont utilisés pour indiquer quand une instruction doit être exécutée.

Programmation événementielle
En programmation événementielle, les actions du programme sont
déclenchées par des événements tels qu’une manipulation de l’utilisateur Quand est cliqué
ou une alerte d’un capteur (voir pages 34-35), ou par des messages envoyés
par d’autres programmes ou parties du programme. La section Événements Démarrage avec le drapeau vert
Simplifie le démarrage du programme par
de la palette des blocs propose des blocs pour démarrer des scripts lorsque l’utilisateur. Des copies de ce bloc peuvent
quelque chose se produit. Ces blocs fournissent de nombreuses façons de être utilisées pour démarrer plusieurs
commencer les scripts autrement qu’en cliquant sur eux. scripts simultanément.

Quand ce sprite est cliqué Quand le volume sonore > 10 Quand je reçois message1

Démarrage avec un clic de souris Démarrage avec le son Démarrage avec un message
Ce bloc lance le script associé lorsqu’un sprite Le script est activé dès que le microphone Les scripts peuvent s’envoyer des messages
est cliqué. Il est parfait pour créer des boutons à détecte un volume supérieur à 10 (sur une les uns aux autres (voir pages 36-37). Ce bloc
l’écran sur lesquels les utilisateurs vont cliquer. échelle de 0 à 100). démarre un script à la réception d’un
message particulier.

Quand la touche espace est pressée Quand l’arrière-plan bascule sur Arrière-plan1

Démarrage avec la touche d’espace Démarrage en fonction de l’arrière-plan


Démarre un script lorsqu’une touche est Ce bloc est parfait quand le projet est basé sur
pressée. Vous précisez laquelle dans le menu une histoire. Il permet aux scripts de démarrer
du bloc. quand la scène (ou l’image d’arrière-plan) change.

Créer un tambour cliquable 2 Ajouter le script


Cet exemple utilise un bloc d’événements pour créer Dans l’onglet Code, ajoutez le script
suivant au sprite. Cliquez sur le sprite sur la scène
un tambour cliquable simple. Lorsque l’utilisateur pour entendre le son et voir le costume associé
clique ou tape dessus sur la scène, le script joue pendant une demi-seconde.
un son et change brièvement l’image (ou le costume)
pour accompagner ce son.
L’encadré bleu indique qu’il Ce costume indique
s’agit du sprite sélectionné que le drum-kit joue
Quand ce sprite est cliqué

1 Ajouter le sprite tambour


Survolez l’icône Choisir un Sprite Basculer sur le costume drum-kit-b
dans la liste des sprites et sélectionnez
la loupe pour afficher la bibliothèque. jouer le son Drum Bass1
Faites défiler vers le bas pour trouver
le sprite Drum Kit et cliquez dessus pour attendre 0,5 secondes On revient
l’ajouter. au costume
Drum Kit Basculer sur le costume drum-kit original
SCRATCH
Gérer le déroulement du programme 28 29
Répéter avec des boucles Répéter indéfiniment
Une boucle est une partie de programme qui doit Parfois, un programme doit se répéter jusqu’à
être répétée. Dans Scratch, ces blocs sont insérés ce qu’il soit stoppé explicitement. Une
dans un bloc répéter, de sorte que Scratch sait animation ou un jeu peut jouer indéfiniment,
où la section de répétition commence et où elle par exemple. Le bloc Répéter indéfiniment
se termine. Le support s’ajuste au nombre de blocs exécute un ensemble d’instructions sans fin.
à répéter. Vous ne pouvez emboîter aucun bloc sous ce
dernier puisqu’il ne se termine jamais.
répéter 10 fois Il est possible de changer Pour terminer le script, cliquez sur le bouton
le nombre de répétitions Stop rouge ou prévoyez un bloc stop tout.

Quand est cliqué


Encadre les blocs à
répéter indéfiniment répéter indéfiniment

Quand est cliqué aller à position aléatoire


Ces blocs
aller à position aléatoire stylo en position d’écriture de mouvement
dessinent
stylo en position d’écriture Le sprite commence
répéter 3 fois le triangle
à dessiner
répéter 3 fois Les instructions avancer de 100 pas
de mouvement le font
avancer de 100 pas dessiner puis se retourner tourner de 120 degrés
tourner de 120 degrés
Stop le dessin du
Fin de la section relever le stylo programme pendant qu’il
de répétition se déplace vers la prochaine
relever le stylo position de départ

Dessiner un triangle Dessiner des triangles à l’infini


Dans l’exemple précédent de dessin d’un triangle Ce script dessinera à l’infini des triangles à
(voir page 25), il y avait trois copies des instructions des positions aléatoires. Comme indiqué ci-dessus,
de déplacement et de rotation. Le script ci-dessus utilise une boucle de répétition peut être insérée dans
une boucle, qui est beaucoup plus facile à lire et à écrire. une boucle indéfiniment, c’est une boucle imbriquée.

AJOUT D’UN DÉLAI


Il est souvent nécessaire de
ralentir un programme afin que Quand est cliqué
les utilisateurs puissent voir ce qui
se passe et avoir le temps de Quand est cliqué avancer de 10 pas
répondre. Les jeux sont souvent
ralentis artificiellement pour que avancer de 10 pas attendre 1 secondes
les joueurs puissent suivre.
avancer de –10 pas avancer de –10 pas

Mouvement normal Mouvement ralenti


Dans cet exemple, le programme L’introduction d’un bloc d’attente
s’exécute si vite que les mouvements permet de voir le sprite se
du sprite ne sont pas visibles. déplacer de droite à gauche puis
Rien ne semble se passer. de nouveau à droite.
Manipuler
les données
On a souvent besoin de programmes pour gérer et traiter
les données. Ces données sont fournies par l’utilisateur
ou collectées à partir d’autres systèmes informatiques.
Dans Scratch, les blocs d’opérateurs permettent de manipuler
les nombres et le texte stockés dans des variables.

Les variables
De nombreux langages de programmation utilisent Les chaînes de caractères
des variables pour stocker des informations. Une Un extrait de texte dans un programme s’appelle
variable peut stocker soit du texte, soit un nombre. une « chaîne de caractères ». Elle peut stocker
Dans un jeu, par exemple, deux variables peuvent un nom, par exemple, la réponse à une question
être utilisées pour stocker le nom et le score du joueur. ou une phrase entière. Dans Scratch, n’importe
Créer une variable quelle variable peut stocker un nombre
1 Pour créer une variable dans Scratch, sélectionnez Variables ou une chaîne, et sa valeur peut changer.
dans la palette des blocs et cliquez sur le bouton Créer une variable.
Donnez-lui un nom significatif, tel que score, pour simplifier
regrouper pomme et banane
la lecture du code. La plupart du temps, les variables sont créées
pour tous les sprites, ce qui signifie que tous les sprites peuvent voir Regrouper des chaînes de caractères
et modifier la variable. Ce bloc permet de regrouper deux chaînes, sans espace,
de sorte que le résultat pour cet exemple sera
« pommebanane ». Des blocs de variables peuvent également
Créer une variable être utilisés plutôt que de saisir des mots dans un bloc.

ma variable Lettre 1 de pomme


La nouvelle
variable Extraction de lettres
score sera affichée ici Ce bloc extrait une lettre d’une chaîne. Dans cet exemple,
la première lettre de la chaîne « pomme » est extraite.

Utiliser des blocs avec votre variable Longueur de pomme


2 Utilisez le bloc mettre [nom de la variable] Compte les caractères d’une chaîne
à pour réinitialiser la valeur de la variable, pour définir Ce bloc compte le nombre de caractères dans une chaîne.
le score à 0 par exemple. Le bloc ajouter 1 à [nom Le résultat est affiché en cliquant sur le bloc. Il peut également
de la variable] augmente ou diminue sa valeur. être déposé dans d’autres blocs à utiliser dans un script.

mettre Score Pomme contient p ?


à 0 ajouter 1 à Score
Contrôle de chaînes de caractères
Ce bloc vérifie si la chaîne saisie à droite est contenue dans la
première, et donne la réponse vrai ou faux. Il est également
possible de vérifier pour plusieurs lettres : pomme contient pom ?
SCRATCH
Manipuler les données 30 31

LISTES
Une liste permet de stocker des informations similaires, telles
qu’une liste de noms. Dans Scratch, vous créez une liste à partir
de la section Variables de la palette des blocs. Vous insérez et
supprimez des éléments dans la liste en indiquant leur
position. Par exemple, le bloc supprimer l’élément 2 de [nom
de liste] va supprimer le deuxième élément de la liste.

La longueur des côtés


Les nombres est cliqué
de la forme est choisie
Quand
Les blocs d’opérateurs sont essentiels de façon aléatoire
L’angle de rotation est
entre 10 et 100
dans Scratch, et peuvent être utilisés aller à x: 0 y: 0 fixé à 360 degrés divisé
par le nombre de côtés
pour les opérations arithmétiques, effacer tout
les comparaisons, et pour choisir
mettre longueur des côtés à nombre aléatoire entre 10 et 100
des nombres aléatoires. Certains
blocs d’opérateur fonctionnent même à nombre aléatoire entre 3 et 8
mettre nombre de côtés
avec les chaînes de caractères.
à 360 / nombre de côtés
Soustraction
mettre angle de rotation
Addition
On répète le code
7 – 2 stylo en position d’écriture pour dessiner
7 + 2
nombre de côtés chaque côté
répéter
longueur des côtés pas
avancer de
7 * 2 7 / 2
angle de rotation degrés
tourner de
* est la / est la division
multiplication en informatique
en informatique Déposez les blocs de
relever le stylo
Déplace le sprite variables dans le menu
avancer de 150 pas après le dessin du bloc de mouvements

nombre aléatoire entre 1 et 10


Dessiner des formes aléatoires
aléatoire chaque
Choix d’un nombre Le programme ci-dessus dessine une forme
encez par créer les
aléatoire entre 1 et 10 fois que le drapeau vert est cliqué. Comm
de côtés et angle de
variables longueur des côtés, nombre
ez plusie urs fois sur le drape au vert pour tester.
rotation. Cliqu
Prendre des décisions
Les décisions dans Scratch sont prises à l’aide du bloc si-alors ou du bloc si-alors-
sinon. La condition requise, qui est une expression « booléenne », est placée dans
le trou en forme de diamant. Si l’expression est vraie, les blocs à l’intérieur du
support du bloc s’exécutent, sinon, ils sont ignorés.

Créer un enregistreur
du meilleur score si score > meilleur score alors
Ce script vérifie si le score du joueur
est supérieur au meilleur score. mettre meilleur score à score
Si c’est le cas, la variable meilleur Ces blocs ne
score est modifiée avec le score dire Nouveau meilleur score pendant 2 secondes s’exécutent que si
du joueur. la variable score
est supérieure
à meilleur score

Utilisation du bloc si-alors-sinon Ces blocs ne


Le bloc si-alors-sinon peut être si score > meilleur score alors s’exécutent que si la
utilisé pour ajouter des instructions variable score est
qui sont exécutées si la condition est mettre meilleur score à score inférieure ou égale
fausse. Dans l’exemple ci-dessus, au meilleur score
un message s’affiche si le score du dire Nouveau meilleur score pendant 2 secondes
joueur n’a pas atteint le meilleur score.
sinon

dire Vous n’avez pas atteint le meilleur score cette fois-ci ! pendant 2 secondes

Expressions booléennes
15 < 50
Utilisée pour prendre des
décisions dans les programmes,
une expression booléenne vrai
renvoie une valeur qui est
« vraie » ou « fausse ». Le bloc
15 > 50
de l’opérateur <, par exemple,
vérifie si le nombre à gauche est
inférieur à celui de droite. faux

Logique
et décisions
Les programmes seront plus souples et réactifs
s’ils sont codés pour prendre des décisions.
Ils peuvent se servir de variables pour contrôler
l’instruction à exécuter et quand l’exécuter.
SCRATCH
Logique et décisions 32 33
Combiner des expressions
Vous pouvez combiner les expressions booléennes
pour prendre des décisions fondées sur plusieurs facteurs.
Voici quelques exemples avec le bloc de détection de l’année
en cours. Son menu permet de choisir d’autres unités de temps.

Le bloc ET
Le bloc et comporte deux emplacements pour des expressions booléennes,
et il vérifie si les deux expressions sont vraies. Dans cet exemple, le programme
vérifie le mois et la date pour afficher un message spécial pour la Saint-Valentin.

si mois actuelle = 2 et date actuelle = 14 alors

dire Joyeuse saint Valentin pendant 2 secondes

Vous trouverez ce bloc


Le bloc OU dans la section Apparence
Le bloc ou vérifie si l’une ou l’autre expression est vraie. Dans Scratch, de la palette des blocs
la semaine commence le dimanche, qui est le jour 1. Cet exemple vérifie
la journée et affiche un message s’il s’agit du samedi ou du dimanche.

si jour de la semaine actuelle = 1 ou jour de la semaine actuelle = 7 alors

dire Super, c’est le week-end ! Pendant 2 secondes

Le bloc NON
Le bloc non permet d’exécuter des instructions si non mois actuelle = 12 alors
si une expression n’est pas vraie. Cet exemple
montre comment afficher un message si le mois dire Il est trop tôt pour parler de Noël pendant 2 secondes
n’est pas décembre.

UTILISATION DES BOOLÉENS


Il existe d’autres façons Inclure des booléens dans
d’utiliser les expressions des boucles répéter jusqu’à ce que vies restantes = 0
booléennes. Cliquez dessus Le bloc répéter jusqu’à ce que
dans la zone de code pour répète une ou plusieurs
instructions jusqu’à ce qu’une
afficher leurs résultats lors expression soit vraie. Dans ce cas,
de la programmation. Elles la boucle continuera jusqu’à ce
peuvent également être que le joueur n’ait plus de vie.
combinées avec des blocs attendre jusqu’à ce que score = 50
Attendre à l’aide des booléens
de répétition et d’attente L’utilisation du bloc attendre
pour répéter ou faire une jusqu’à ce que interrompt un script Le programme ne fait rien tant que
pause jusqu’à ce que jusqu’à ce qu’une expression soit le score n’est pas de 50
quelque chose change. vraie. Cependant, il est souvent
préférable de diffuser à tous un
message (voir pages 36-37).
Les entrées
Les programmes ont quelquefois besoin de recevoir de
l’information afin de produire un résultat ou une sortie. Scratch
a plusieurs méthodes pour obtenir des entrées, notamment
par les touches du clavier, en détectant
des interactions à l’écran, ou en demandant
aux utilisateurs de saisir des informations.
Interactions de l’utilisateur
Les utilisateurs peuvent saisir des informations
dans l’ordinateur ou utiliser le clavier ou
Types d’entrée la souris pour fournir des instructions
Il existe de nombreuses méthodes pour saisir des de mouvement ou de positionnement.
informations à traiter. Dans Scratch, l’entrée dans
un script prend généralement la forme d’un bloc Informations provenant de l’extérieur
arrondi qui contient des informations ou d’un bloc Scratch est capable de récupérer le nom
de l’utilisateur connecté, la date et l’heure
pointu qui contient une expression booléenne actuelles, et il peut obtenir des traductions
(voir page 32). à partir de Google Traduction à l’aide d’une
extension.

Entrée par capteur Informations à traiter


Certains systèmes informatiques peuvent Parfois, les programmes reçoivent
ressentir le monde extérieur. Dans Scratch, il est des informations avec lesquelles ils doivent
possible de détecter l’intensité sonore des sons travailler. Par exemple, un programme peut
et les mouvements de la caméra vidéo. avoir à additionner une liste d’articles
Les sprites peuvent se détecter les uns les autres. pour une caisse d’achat.

Déplacer avec le clavier


Quand est cliqué Si la touche flèche vers le
Dans de nombreux jeux et autres programmes, haut est pressée, la position
l’utilisateur appuie sur les touches du clavier pour stylo en position d’écriture y du sprite augmente de 10
déplacer des objets ou produire une action.
répéter indéfiniment
Scratch dispose d’un bloc d’événements qui
démarre un script lorsqu’une touche est pressée. si touche flèche haut pressée ? alors
Toutefois, le mouvement sera plus fluide si le script ajouter 10 à y
utilise une boucle qui vérifie en permanence
quelles touches sont pressées.
si touche flèche bas pressée ? alors

Ce bloc déplace ajouter −10 à y


le sprite vers le bas

si touche flèche gauche pressée ? alors


Script de mouvement
Ce script illustre ajouter −10 à x
comment déplacer
un sprite à l’aide
des touches fléchées si touche flèche droite pressée ? alors
du clavier. Le sprite
dessine son parcours, ajouter 10 à x
de sorte que vous
pouvez l’utiliser comme
programme de dessin
simple.
SCRATCH
Les entrées 34 35
Détection de collision
touche le pointeur de souris ?
Les jeux vidéo ont souvent besoin de détecter
quand deux objets se touchent, ce qui peut Ce bloc se trouve dans
entraîner des calculs compliqués. Scratch a cette pointeur de souris la catégorie Capteurs
de la palette des blocs.
capacité intégrée. Le bloc touche le pointeur de
bord
souris dispose d’un menu déroulant qui propose
de détecter si un sprite touche le pointeur de la Sprite1 Le menu déroulant présente
souris, le bord de l’écran ou un autre sprite. les options disponibles

Création du jeu de la balle au prisonnier Ajouter le code du chat


Voici un jeu simple pour démontrer la détection
2 Ajoutez ces deux scripts au sprite Cat. Le premier
des collisions dans Scratch. Démarrez un nouveau script vérifie si la balle a touché le chat. Si c’est le cas,
projet et ajoutez le script de contrôle avec le clavier il diffuse à tous un message (voir pages 36-37) qui
de la page précédente au sprite Cat. déclenche le deuxième script qui va afficher un message.

Ajouter le sprite Ball quand est cliqué Détecte si la balle


1 Sélectionnez la balle dans la bibliothèque a touché le chat
des sprites et ajoutez-la au projet. répéter indéfiniment
Cliquez ensuite sur ce sprite dans la liste
des sprites et affectez-lui ce script : si touche le Ball ? alors

Ajoute un délai envoyer à tous ouch


aléatoire avant
quand est cliqué le déplacement

répéter indéfiniment
Affiche un message
attendre nombre aléatoire entre 1 et 3 quand le chat est
glisser en 0.5 secondes à Sprite1 touché
quand je reçois ouch

Se déplace vers dire Ouch ! Pendant 2 secondes


le sprite du joueur

Collision avec les couleurs couleur touchée ?


Scratch a également la capacité de détecter si un sprite
touche une couleur particulière. Cela permet, par
exemple, de détecter quand une balle franchit une ligne Détecte si un sprite a touché
de but à condition que la couleur de cette dernière une couleur
n’apparaisse nulle part ailleurs sur l’écran.

Vérifie si une couleur a couleur touche ?


touché une autre couleur

Saisie de texte par l’utilisateur Ce bloc enregistre


Le bloc demander invite les utilisateurs à taper les informations saisies
Quand est cliqué
des informations. La question contenue dans le bloc
apparaît dans la bulle vocale du sprite. Ce que demander quel est ton nom ? et attendre
l’utilisateur va taper va s’inscrire dans le bloc dire regrouper Hello réponse pendant 2 secondes
réponse. Ce programme interpelle l’utilisateur
par son nom.
Envoyer des messages
Une des méthodes d’interaction entre les programmes, ou certaines
parties d’un programme, consiste à envoyer des messages.
Scratch dispose d’un bloc événement dédié à cet usage,
le bloc de diffusion envoyer à tous. 1. Les sprites sont tous
à l’écoute des diffusions
tout le temps
Comprendre les diffusions
Les blocs de diffusion permettent
d’envoyer un message à partir d’un
script qui sera reçu par tous les autres
scripts pour tous les autres sprites du
programme. Des scripts peuvent être
configurés pour démarrer lorsqu’ils
reçoivent ce message, soit pour le
même sprite (voir page 35), soit pour
d’autres. Le bloc lorsque je reçois est
déclenché en réponse à un message
entrant, tandis que le bloc envoyer à
tous permet aux sprites d’envoyer des
messages à d’autres sprites.

Utiliser les diffusions 2 Envoi de la diffusion


Dans Scratch, une seule diffusion peut déclencher Cliquez sur le Speaker dans la liste des sprites et ajoutez-y le
script suivant. Les blocs de diffusion se trouvent dans la section
l’exécution des scripts de plusieurs sprites. Dans Événements de la palette des blocs. Cliquez sur le menu pour saisir un
l’exemple ci-dessous, lorsque vous cliquez sur le nouveau message à diffuser.
Sprite du speaker, il commence à jouer de la musique
et diffuse également un message. Ce message Quand ce sprite est cliqué
déclenche alors les autres sprites. Lorsque la
musique se termine, un autre message est envoyé, envoyer à tous la musique joue
L’effet sonore
et le sprite ballerine arrête de danser. répéter 3 fois
par défaut du sprite

jouer le son Drive Around jusqu’au bout


1 Ajoutez de nouveaux sprites
Démarrez un nouveau projet et supprimez le sprite Cat Envoie un message
par défaut. Choisissez ensuite les sprites Ballerina, Butterfly 2 quand la musique
envoyer à tous la musique s’arrête
et Speaker dans la bibliothèque. Cliquez sur l’icône Choisir un s’arrête
Sprite et utilisez la zone Rechercher pour les trouver.
Déclenchez le sprite Butterfly 2
3 Ensuite, faites glisser le sprite Butterfly 2 sur la scène
en l’éloignant du haut-parleur. Ajoutez ce script à Butterfly 2.
Dès qu’il recevra le message indiquant que la musique a commencé,
le papillon s’envolera vers le haut-parleur.
Déplace le
sprite
quand je reçois la musique joue butterfly
Ballerina Butterfly 2 Speaker vers le
glisser en 3 secondes à Speaker speaker
SCRATCH
Envoyer des messages 36 37

2. Lorsqu’un sprite diffuse


un message, ce dernier
est récupéré par tout sprite qui
serait à l’écoute de ce dernier

3. Les sprites peuvent utiliser


ce message diffusé pour
démarrer leurs propres
scripts.

MESSAGES SENSIBLES
Le nom par défaut d’un message diffusé
dans Scratch est message1, mais vous pouvez
le changer. Pour simplifier la lecture du
programme, il est conseillé de choisir quelque
chose de pertinent. Vous pouvez saisir
un nouveau nom dans le menu des blocs
de diffusion.

Déclenchez le sprite Ballerina


4 Sélectionnez le sprite de la ballerine dans la liste des POURQUOI DIFFUSER
sprites et ajoutez ces deux scripts. Une variable est utilisée UN MESSAGE ?
pour savoir si la ballerine doit danser ou non. Lorsque la
musique commence, cette variable est définie sur « oui » et la
ballerine commence à danser. Les mouvements de danse se Voici quelques-unes des utilisations les plus
répètent jusqu’à ce que la variable de danse soit définie sur populaires des diffusions
« non ». Cela se produit dès que le Speaker diffuse le message dans les programmes Scratch :
« Arrêt de la musique ». Vous obtenez une ballerine qui danse
uniquement quand la musique est diffusée.
La ballerine • Synchronisation : vous pouvez les utiliser
danse jusqu’à pour déclencher plusieurs scripts en même
ce que cette temps sur plusieurs sprites, afin de
quand je reçois Lancement de la musique variable
les synchroniser.
prenne la
mettre danse à oui valeur « non »
• Faire bouger d’autres sprites : un sprite
peut se déplacer mais ne peut pas déplacer
répéter 3 fois danse = non d’autres sprites. Il peut en revanche leur dire
quand il est temps pour eux de bouger.
costume suivant Ajout d’une pause entre
chaque changement
Lorsque vous cliquez sur le sprite du Speaker,
attendre 0,25 secondes de costume par exemple, les autres sprites se bougent.
• Application d’une séquence : en
déclenchant des scripts à l’aide de diffusions,
vous êtes sûr de les exécuter dans le bon
ordre. Le bloc Envoyer à tous et attendre
Quand la musique envoie un message, mais le script ne
quand je reçois Arrêt de la musique s’arrête, la variable continue pas tant que chaque script qui
prend la valeur
« non »
reçoit le message n’est pas terminé.
mettre danse à non
Utiliser les fonctions
Une fonction est une partie de programme qui effectue une tâche
particulière et peut être réutilisée. Dans Scratch, chaque bloc est
une fonction, et les utilisateurs peuvent définir de nouveaux blocs.

Ordre d’exécution d’un programme


Lorsqu’un script est exécuté, Scratch traite les blocs instructions de la fonction. Quand la fonction se
d’instructions l’un après l’autre, de haut en bas. termine, Scratch reprend le script là où il l’avait laissé.
Lorsqu’il s’agit d’une fonction, Scratch mémorise son Les fonctions peuvent être utilisées par plusieurs
emplacement dans le script et lance l’exécution des scripts et peuvent recevoir des informations à traiter.

LE SCRIPT
PRINCIPAL
S’ÉXECUTE

D’AUTRES SCRIPTS
PEUVENT UTILISER
LA FONCTION
À TOUT MOMENT

LE SCRIPT
APPELLE LA
FONCTION

LA FONCTION
INTERROMPT
L’EXÉCUTION

QUAND LA
FONCTION SE
TERMINE, LE SCRIPT
PRINCIPAL REPREND
L’EXÉCUTION AU
BLOC SUIVANT
SCRATCH
Utiliser les fonctions 38 39
Définir ses propres blocs
Avec Scratch, créez vos propres blocs pour éviter une fonction pour dessiner un triangle, puis
de répéter plusieurs fois le même code. Chaque l’utiliser pour dessiner des triangles de trois tailles
bloc peut être composé de plusieurs instructions. différentes, empilés les uns sur les autres.
L’exemple ci-dessous illustre comment créer Le résultat final ressemble à un sapin.

Créez un nouveau bloc Ajoutez et nommez une entrée


1 Dans la section Mes blocs de la palette des blocs, 2 Sélectionnez l’option pour ajouter une entrée de texte.
cliquez sur le bouton Créer un bloc. Nommez-le « dessiner Une nouvelle zone d’entrée apparaîtra dans le bloc.
un triangle de taille ». Nommez cette zone « longueur » et cliquez sur OK.

Mes blocs
dessiner un triangle de taille longueur
Créer un bloc Bouton pour créer
un nouveau bloc

Définissez votre script Utilisation du nouveau bloc


3 Ajoutez les instructions suivantes au bloc définir. 4 Le nouveau bloc peut maintenant être
Le nombre transmis à la fonction se place dans le bloc utilisé dans un programme. Ajoutez ce script
longueur. Pour l’utiliser dans le script, faites glisser ce bloc à la zone de code, et Scratch dessinera trois
variable du bloc définir vers le bloc avancer de 10 pas. triangles à chaque clic sur le drapeau vert.
Le programme
démarre au clic
définir dessiner un triangle de taille longueur Quand est cliqué sur le Drapeau vert

effacer tout
stylo en position d’écriture Les blocs stylo
se trouvent dans mettre la couleur du stylo à Sélectionnez
la section Ajouter une couleur
répéter 3 fois
une extension verte ici
aller à x: −75 y: −140
avancer de de la palette des blocs
longueur pas
dessiner un triangle de taille 150
tourner de 120 degrés
aller à x: −50 y: −10 100 est la valeur
de la variable
Rotation au sommet
dessiner un triangle de taille 100 longueur

relever le stylo du triangle


aller à x: −25 y: 75 Ce bloc crée
les trois côtés
On arrête d’écrire Ce bloc crée les trois côtés
dessiner un triangle de taille 50 du triangle
quand le triangle est du triangle
dessiné

POURQUOI UTILISER LES FONCTIONS ?

Presque tous les langages de programmation utilisent des • Il est plus facile de créer et tester de multiples
fonctions. Voici quelques-uns de leurs avantages : petites fonctions qu’un gros programme.
• Une fonction peut être réutilisée dans d’autres L’exemple ci-dessus serait plus long, plus
programmes. compliqué et plus difficile à lire si chaque instance
• Si son nom est significatif, le programme est plus facile à lire. de « dessiner un triangle » était remplacée par tous
• Quand vous réutilisez des fonctions, le programme est plus les blocs de la fonction.
court.
Traducteur de voyage
Les applications de traduction sont très pratiques pour communiquer
quand on est à l’étranger. Ce projet, conçu à partir d’une extension
de Scratch, va créer un traducteur de texte simple. Il pourra traduire
n’importe quel texte dans des dizaines de langues différentes.

Comment fonctionne l’application Traduction


Ce projet utilise l’extension Traduire
Pour utiliser cette application, les utilisateurs doivent d’abord de Scratch pour convertir une langue
sélectionner la langue dans laquelle ils souhaitent traduire en une autre. Les blocs de cette extension
le texte. Le programme invite ensuite l’utilisateur à saisir utilisant l’API Google Translate, vous devez
être connecté à Internet lors de l’utilisation
l’expression à traduire puis il affiche le texte traduit dans de l’application.
la langue choisie.
À l’aide du bloc dire,
Cliquez ici Cliquez ici pour arrêter les traductions peuvent être Cliquez sur cette icône pour
pour lancer le projet le projet affichées à l’écran dans une bulle sortir du mode plein écran

Langue dans langue choisie Allemand


laquelle vous
allez traduire
le texte

Appuyez sur les Français Allemand Russe


boutons pour
choisir la langue
dans laquelle
vous souhaitez
traduire le texte Wie geht es dir?

Vous pouvez
choisir n’importe
quel sprite dans
la bibliothèque

Vous pouvez choisir


n’importe quel
arrière-plan dans
la bibliothèque
SCRATCH
Traducteur de voyage 40 41
VOUS ALLEZ APPRENDRE COMMENT L’UTILISER
❯❯Comment ajouter et coder Durée : Les bonnes applications de traduction doivent
des sprites 15–20 min être précises dans leurs traductions. Le code de
❯❯Comment modifier un costume ce projet peut être réutilisé pour traduire à partir
à l’aide de l’éditeur de dessin Niveau de difficulté d’autres langues disponibles dans Scratch.
Vous pouvez aussi ajouter des blocs qui diffusent
❯❯Comment ajouter
la traduction à voix haute afin d’obtenir la bonne
des extensions à un projet
prononciation.

Conception du programme
Les programmeurs utilisent souvent des
organigrammes – représentation graphique DÉBUT
d’un algorithme – pour structurer leurs
programmes. Chaque étape est présentée
avec une flèche menant à l’étape suivante.
Une étape peut mener à plusieurs autres
étapes, selon le résultat d’un traitement. Attend le choix
de la langue
par l’utilisateur

BOUTON BOUTON
FRANÇAIS BOUTON RUSSE
ALLEMAND
PRESSÉ PRESSÉ PRESSÉ

Définit la langue Définit la langue Définit la langue


à Français à Allemand à Russe

Récupère la phrase
à traduire

Traduit la phrase
dans la langue choisie

Affiche la traduction

Diagramme du traducteur de voyage


Ce programme attend que l’utilisateur choisisse
une langue, puis qu’il saisisse la phrase qui doit
être traduite dans la langue sélectionnée, FIN
avant d’afficher la traduction à l’écran.
CONFIGURATION DE LA SCÈNE

Configuration de la scène
1 Pour commencer, vous devez créer
1.1 DÉMARRER UN NOUVEAU PROJET
Choisissez Nouveau dans le menu Fichier
un compte sur Scratch en cliquant sur en haut à gauche de l’interface Scratch. Cela crée un tout
nouveau projet vierge.
« Rejoindre », puis créer un nouveau projet,
et ajouter le sprite et l’arrière-plan nécessaires
à l’application. Vous pouvez ensuite Fichier Modifier Tutoriels
construire le code en emboîtant des blocs Nouveau Cliquez ici pour démarrer
colorés. un nouveau projet
Enregistrer maintenant

1.2 SUPPRIMEZ LE CHAT


La mascotte de Scratch est un chat.
Vous pouvez aussi supprimer un
Celui-ci est automatiquement ajouté
sprite en cliquant sur la croix bleue
à chaque nouveau projet. Pour cette
en haut à droite de son icône
application, supprimez-le en cliquant droit
dessus dans la liste des sprites
et en choisissant « supprimer ». Dupliquer
Sprite1
Exporter Cliquez ici
Le sprite sélectionné est pour supprimer
toujours encadré de bleu un sprite
Supprimer

1.3 AJOUTEZ UN NOUVEAU CHAT


Scratch propose de nombreux sprites,
personnages et autres objets, que vous pouvez Devin Tout Animaux
utiliser dans vos projets. Pour ce projet, ajoutez
un sprite nommé Devin. En bas à droite de la liste
des sprites, cliquez sur l’icône Choisir un Sprite Saisissez le nom Les sprites
pour ouvrir la bibliothèque des sprites. Faites-les du sprite que vous sont classés
défiler ou saisissez « Devin » dans la barre recherchez par catégories
de recherche pour le localiser rapidement.
Cliquez dessus pour l’ajouter au projet.
Vous pouvez également créer votre propre sprite Devin
(voir pages 20-21).

BIBLIOTHÈQUE DES SPRITES

Sprite Devin x 20 y -21


Ce menu se trouve
dans le coin
inférieur droit Afficher Taille 100 Direction 90
de l’interface

Devin
Choisir un sprite

LISTE DES SPRITES


SCRATCH
Traducteur de voyage 42 43
1.4 CHANGEZ L’ARRIÈRE-PLAN
En complément de la bibliothèque des sprites,
Scratch propose une bibliothèque d’arrière-plans
dans laquelle vous pouvez choisir le fond de votre scène, Créez votre propre
mais vous pouvez aussi créer le vôtre. Cliquez sur l’icône arrière-plan à
Choisir un arrière-plan en bas à droite de l’écran. Saisissez l’aide de l’éditeur
« theater » puis sélectionnez le décor de théâtre de dessin
pour l’ajouter au projet.

Cliquez sur cette


icône pour ouvrir
Toute l’action se déroule la bibliothèque
dans la zone de la scène, Choisir d’arrière-plans
un arrière-plan
qui sert d’écran miniature

Devin donne l’impression


d’être debout sur une scène.
Vous pouvez le repositionner
en le faisant glisser

1.5 PROGRAMME TRÈS SIMPLE Lorsque le projet démarre, il demande à


Il faut ensuite ajouter le code. l’utilisateur de saisir un message, qu’il affiche
Cliquez sur Devin dans la liste ensuite à l’écran
des sprites et ajoutez ces blocs quand est cliqué
en les faisant glisser depuis la palette
des blocs sur le côté gauche de
l’interface. Repérez-les par leur couleur. demander Que dois-je dire ? et attendre

Dire réponse
CONFIGURATION DE LA SCÈNE

1.6 TESTEZ
Exécutez le code et observez ce qui se passe. Cliquez sur le
drapeau vert dans le coin supérieur gauche de la scène pour lancer Devin va dire
l’exécution, le panneau rouge à côté arrêtera le code. la phrase que vous
avez saisie

Que dois-je dire ? Test en cours…

Tapez une phrase


et appuyez sur la coche à
droite pour tester le projet

Test en cours…

Ajout d’une langue


2 Pour le moment, Devin ne peut parler qu’en français,
la langue par défaut. Pour compléter le programme, vous devez
ajouter une langue vers laquelle Devin pourra traduire le texte.
Dans les prochaines étapes, vous allez créer un bouton
pour la langue, puis ajouter les blocs de traduction.

2.1 AJOUTEZ UN BOUTON


Commencez par ajouter un bouton pour sélectionner projet. Faites-le glisser en haut à gauche de la scène.
une autre langue. Cliquez sur l’icône Choisir un Sprite dans la Renommez le sprite en cliquant sur la zone de texte
liste des sprites et sélectionnez « Button2 » pour l’ajouter au du panneau d’information et en tapant le mot « Anglais ».

Cliquez ici pour renommer Faites glisser


le sprite, afin d’afficher Donne la position le bouton dans
la langue de traduction d’un sprite sur la scène un coin de la scène

Sprite anglais x –164 y 103

Afficher Taille 100 Direction 90

Le nouveau
sprite apparaît
dans la liste
Devin Anglais des sprites
SCRATCH
Traducteur de voyage 44 45
2.2 CHANGEZ LE COSTUME DU SPRITE BOUTON
Vous pouvez changer l’aspect d’un sprite en changeant sélectionné. Cliquez sur l’icône de l’outil Texte, à gauche,
son costume. Sélectionnez le sprite puis cliquez sur l’onglet cliquez à l’intérieur du bouton puis saisissez « Anglais ».
Costumes en haut à gauche de l’interface. Vous vous trouvez Cela crée une étiquette. Ajustez éventuellement la police
dans l’éditeur de dessin de Scratch avec lequel vous pouvez ou la couleur du texte à l’aide du menu déroulant
dessiner vos propres costumes ou modifier celui du sprite ou de l’option Remplissage au-dessus.

Cliquez ici pour ouvrir


l’éditeur de dessin
et modifier un costume

Code Costumes Sons

Costume button2-a
1 Grouper Dégrouper Avancer

Remplissage Contour 0 Sans Serif


button2-a
121 x 54

Sélectionnez une police


Outil Remplissage dans le menu déroulant
2

Outil Texte
button2-b
121 x 54

Anglais
Tous les
costumes d’un
sprite sont
affichés ici

Centrez le texte
sur le bouton

Convertir en bitmap

Conversion du mode vectoriel


vers bitmap et vice versa.
Vous travaillez actuellement
en mode vectoriel
AJOUT D’UNE LANGUE

2.3 CRÉEZ UNE VARIABLE


Vous pouvez maintenant compléter le code Nouvelle variable
du projet. Sélectionnez le sprite Anglais, puis cliquez
sur l’onglet Code en haut à gauche. Dans la catégorie
Variables de la palette des blocs, cliquez sur Nouveau nom de la variable
Créer une variable, nommez-la « langue choisie » Cela crée une
puis cliquez sur OK Langue choisie nouvelle variable
qui sera utilisée
Pour tous les Pour ce sprite pour stocker
la langue dans
sprites uniquement laquelle vous
Choisissez cette option souhaitez traduire
afin que Devin puisse Annuler OK
le texte
utiliser la variable

2.4 DÉFINISSEZ L’ANGLAIS COMME LANGUE CHOISIE


Ajoutez ensuite ces blocs au sprite Anglais. Quand
l’utilisateur cliquera sur le sprite, c’est l’anglais qui sera Saisissez la
sélectionné comme langue. Vous saurez ainsi facilement langue ici
Quand ce sprite est cliqué
dans quelle langue le texte sera traduit.

Ces blocs se trouvent dans Mettre Langue choisie à Anglais


les sections jaune et orange
de la palette des blocs

2.5 AJOUTEZ UNE EXTENSION


Il est temps de commencer à Costumes
traduire, mais vous avez besoin d’ajouter
Code Sons
quelques blocs. Sélectionnez le bouton bleu
en bas de la palette des blocs pour ajouter Traduire
une extension et choisissez l’extension Mouvement
« Traduire » dans la liste des extensions
traduire bonjour en Anglais
disponibles. Quelques blocs vont être ajoutés Apparence
dans une section de la palette nommée
Traduire. langue
Son

Événements
Ce bloc traduit une
langue dans une autre
Contrôle

Capteurs

Opérateurs

Variables

Une nouvelle section est


toujours ajoutée en bas Mes blocs
de la palette des blocs

Traduire
Cliquez ici pour ouvrir
les extensions de Scratch
SCRATCH
Traducteur de voyage 46 47
EXTENSIONS
Les extensions permettent aux projets de Makey Makey
communiquer avec du matériel ou un logiciel extérieur Cette extension permet de connecter
des objets du quotidien à votre ordinateur.
à l’environnement de Scratch. La sélection d’une Vous pouvez ainsi contrôler vos jeux à l’aide
extension ajoute de nouveaux blocs dans la palette. d’objets connectés.

Musique micro:bit
Utilisez cette extension pour faire de Le micro:bit est un gadget de la taille
la musique à l’aide de divers d’une main que vous pouvez contrôler
instruments et des sons de batterie. avec les blocs de cette extension.

Stylo LEGO® BOOST


Avec cette extension, un sprite trace des traits Ces blocs sont conçus pour faciliter
de stylo sur l’écran. Elle peut être utilisée la construction de robots interactifs
pour créer une application de dessin. pour les enfants (ou les programmeurs
débutants).

Détection vidéo LEGO® Education WeDo 2.0


Ces blocs permettent de connecter Scratch à Les blocs de l’extension WeDo sont
votre webcam. Ils peuvent être utilisés pour utilisés pour contrôler les robots
détecter les mouvements devant la caméra. construits avec des blocs LEGO.

Synthèse vocale LEGO® MINDSTORMS™ EV3


Utilisez cette extension pour faire parler vos Ces blocs sont utilisés pour créer des
projets. Ces blocs utilisent l’outil en ligne Amazon projets qui contrôlent des robots plus
Web Services pour lire du texte à haute voix. avancés construits avec des blocs LEGO.

Traduire GoDirect Force & Acceleration


Ces blocs vous permettent de traduire dans Cette extension permet d’utiliser
un grand nombre de langues différentes – c’est un capteur externe pour enregistrer
l’extension utilisée dans le projet en cours. les forces et l’accélération et envoyer
les informations à votre projet Scratch.

2.6 MODIFIEZ LE CODE DE DEVIN


Vous pouvez maintenant utiliser les nouveaux
blocs Traduire. Cliquez sur Devin et transformez le code
comme ci-dessous. Si la langue choisie est l’anglais,
Devin traduira le texte en anglais. Sélectionnez ce bloc dans la section
Opérateurs, faites glisser et déposez
la variable Langue choisie dans le premier
trou, puis saisissez Anglais dans
le deuxième
Quand est cliqué

Demander Que dois-je dire ? et attendre

Si Langue choisie est Anglais alors


Insérez ce bloc
Traduire dans
Dire traduire Réponse en Anglais le bloc violet
AJOUT D’UNE LANGUE

2.7 TESTEZ
Testez le code. Appuyez
sur le bouton Anglais, puis cliquez
sur l’indicateur vert pour exécuter
le projet. Ensuite, tapez une phrase
que vous souhaitez traduire Langue choisie Anglais
et cliquez sur l’icône de coche
pour la valider.

Repositionnez le bouton pour


Anglais
The weather is beautiful
éviter qu’il ne masque d’autres
éléments de la scène

Devin va donner la traduction


du texte que vous avez saisi.
Ici, vous voyez la traduction
en anglais de « Le temps
est magnifique »

Ajoutez d’autres langues


3 Vous pouvez améliorer l’application en ajoutant plus de langues
au projet. Commencez par créer des boutons pour chaque nouvelle
langue, puis ajoutez les blocs Traduire, comme précédemment.
Vous pouvez ajouter autant de langues que vous le souhaitez.

3.1 CRÉEZ D’AUTRES BOUTONS


Dans cette étape, vous allez
ajouter d’autres boutons afin de proposer Sprite Allemand x 143 y 104
d’autres langues de traduction. Scratch
facilite cette tâche. Cliquez avec le bouton Afficher Taille 100 Direction 90
droit sur le sprite Anglais dans la liste
des sprites et choisissez « Dupliquer ».
Vous obtenez une copie du sprite Sélectionnez cette option
et du code associé. Créez deux boutons pour dupliquer le sprite
et renommez-les Allemand et Espagnol Anglais Allemand
(choisissez d’autres langues si vous voulez).
Devin Anglais Allemand
Dupliquer
N’oubliez pas
de renommer le nouveau
Exporter
sprite Allemand
Supprimer
SCRATCH
Traducteur de voyage 48 49
3.2 MODIFIEZ LES NOUVEAUX
BOUTONS
Vous devez maintenant modifier
le code de ces nouveaux sprites. Quand ce sprite est cliqué
Transformez le code des boutons
Allemand et Espagnol comme illustré. Mettre Langue choisie à Allemand

Saisissez ceci pour


le sprite Allemand

Quand ce sprite est cliqué

Mettre Langue choisie à Espagnol

Saisissez ceci pour


le sprite Espagnol

3.3 CHANGEZ LES COSTUMES


Il faut aussi modifier les costumes pour ces
nouveaux sprites de sorte que les étiquettes
correspondent à la bonne langue. Cliquez sur l’onglet
Costumes pour ouvrir l’Éditeur de dessin, puis utilisez
l’outil Texte. Assurez-vous d’être en mode vectoriel.

Langue choisie Espagnol

Anglais Allemand Espagnol Faites glisser


les boutons vers
le haut de la scène
et alignez-les avec
le bouton Anglais
AJOUTEZ D’AUTRES LANGUES

3.4 COMPLÉTEZ LE CODE DE DEVIN


Pour terminer, sélectionnez le sprite Devin et modifiez
le code pour obtenir les traductions correctes. Dupliquez
le code d’origine en cliquant-droit dessus et en sélectionnant
« Dupliquer ». Modifiez-le ensuite comme illustré ci-dessous.

Quand est cliqué

Demander Que dois-je dire ? et attendre

Si Langue choisie est Anglais alors

Dupliquez ces blocs


Dire traduire Réponse en Anglais
de code pour
gagner du temps

Si Langue choisie est Allemand alors

Dire traduire Réponse en Allemand

Modifiez ces blocs


de code pour
Si Langue choisie est Espagnol alors afficher la bonne
langue

Dire traduire Réponse en Espagnol

3.5 MAINTENANT, TRADUISEZ


Félicitations ! Vous avez
maintenant créé avec succès votre HELLO
première application. Il suffit de cliquer BONJOUR
sur le drapeau vert pour commencer
HALLO
à traduire.

BUENOS DIAS
SCRATCH
Traducteur de voyage 50 51

Trucs et astuces
Multilingue
Créez des boutons et blocs de code supplémentaires
Traduire bonjour en Français
afin de traduire dans d’autres langues. Les blocs
de traduction de Scratch proposent des dizaines
de langues différentes. Lesquelles souhaiteriez-vous
Ouvrez la liste Albanian
déroulante pour
ajouter ? choisir une langue
Arabic

Armenian

Phrases courantes
« Bonjour », « Comment allez-
vous ? », « Combien est-ce ? » : Quand est cliqué
ces phrases sont utiles partout
dans le monde. Adaptez votre
code et utilisez les blocs Traduire dire traduire bonjour en Langue choisie
afin d’afficher leurs traductions
sans qu’il soit nécessaire de
les taper. Vous pourriez ajouter
des boutons dédiés. Ajoutez la phrase à traduire ici

Dites-le
Une autre extension Scratch appelée « Synthèse Texte à prononcer
vocale » peut être utilisée pour lire le texte à voix haute.
Modifiez votre code afin de proposer la lecture
des phrases. Vous pourrez ensuite écouter
prononcer bonjour
et apprendre à prononcer les mots.

Scratch propose cinq choisir la voix du alto


voix différentes

Quand est cliqué mettre la langue à Français

demander Que vais-je dire ? et attendre

Cela permettra
si Langue choisie = Français alors de lire la traduction
à haute voix
choisir la voix du ténor Sélectionner une voix pour votre sprite
dans le menu déroulant

prononcer traduire réponse en Français


Casse-tête
Les casse-têtes sont un excellent moyen de stimuler votre
cerveau et de développer vos capacités logiques et
cognitives. Ce projet utilise des boucles et des blocs
d’opérateurs de Scratch pour créer un casse-tête. Le code
est exécuté chaque fois qu’un sprite se déplace.

Quelle est la règle ?


Le but du jeu est de transporter un lion, un donut, et un coq de
l’autre côté d’une rivière. Vous ne pouvez installer qu’un sprite
dans le bateau à la fois. Cependant, s’ils restent ensemble sans Logique complexe
surveillance, le lion mangera le coq, et le coq mangera le donut. La complexité du jeu vient des restrictions
sur les sprites pouvant être laissés
Le défi est de trouver la logique pour tout amener de l’autre côté, ensemble, d’un côté ou de l’autre, en toute
en toute sécurité. sécurité.

Cliquez ici
pour démarrer
le programme

Cliquez sur un sprite


pour l’installer
dans le bateau

Cliquez sur
le bateau pour
le faire traverser

Créez votre propre


arrière-plan avec
l’éditeur de dessin
SCRATCH
Casse-tête 52 53

VOUS ALLEZ APPRENDRE COMMENT L’UTILISER


❯❯Comment créer des arrière-plans Durée : Les programmes informatiques peuvent
et des sprites à l’aide de l’éditeur 20–25 min simuler des problèmes et situations du monde
de dessin Niveau de difficulté réel. En codant, il est possible d’étudier et
❯❯Comment créer une simulation de tester différentes façons de résoudre un
problème, souvent beaucoup plus rapidement
❯❯Comment introduire une logique
qu’en effectuant les tests en situation réelle.
complexe dans un projet

Conception du programme
Le programme attend que l’utilisateur sélectionne DÉBUT
un sprite. Dès que la sélection est effectuée et que
l’utilisateur tente de faire traverser le sprite,
le programme vérifie si l’une des règles a été
enfreinte à l’aide d’une boucle continue. Si c’est le
cas, le jeu est terminé. Si l’utilisateur parvient à
faire traverser tous les sprites, le jeu est résolu.
Placer tous les sprites sur le
bord gauche de la rivière

Attendre que l’utilisateur


fasse traverser un sprite

UN SPRITE
TRAVERSE
LA RIVIÈRE

OUI
Une règle a-t-elle été
Fin du jeu
enfreinte ?

NON

Jeu résolu. OUI Les sprites se trouvent-ils NON


L’utilisateur tous sur le bord droit
a gagné ! de la rivière ?
DÉMARRAGE DU PROJET

Démarrage du projet
1 On commence généralement un projet en
choisissant des sprites et des arrière-plans dans la
bibliothèque de Scratch. Dans ce projet, vous allez
créer votre propre arrière-plan et même un sprite à
l’aide de l’éditeur de dessin. Vous allez ensuite
ajouter du code pour déplacer le sprite sur l’écran.

1.1 DÉMARREZ UN
NOUVEAU PROJET Vous pouvez aussi cliquer
Créez un nouveau projet et sur cette icône pour
supprimez le sprite Cat par défaut : supprimer le sprite
cliquez-droit dessus dans la liste
des sprites et choisissez « supprimer ». dupliquer
Sprite1
exporter
Sélectionnez cette
option dans le menu
supprimer
déroulant

1.2 CONCEVEZ L’ARRIÈRE-PLAN


Créez maintenant l’arrière-plan
du jeu. Cliquez sur Arrière-plans dans
la section Scène à droite de l’interface.
Cliquez ensuite sur l’onglet arrière-plans Cet onglet se trouve dans le
pour ouvrir l’Éditeur de dessin. haut de l’interface de Scratch

Scène Code Arrière-plans Sons

Costume Arrière-plan1
1 Grouper Dégrouper

Remplissage Contour 4
Copier Coller
Arrière-plan1
Arrière-plans 2x2
1

Cliquez n’importe où dans cette section


pour activer les arrière-plans
SCRATCH
Casse-tête 54 55
1.3 DESSINEZ
Vous devez dessiner
un arrière-plan avec une rivière
au milieu et deux rives en herbe
de chaque côté. Cliquez sur le bouton
Convertir en Bitmap, puis dessinez
les bords de la rivière avec l’outil
Pinceau. Assurez-vous que les lignes
soient bien continues sur toute la
hauteur. Peu importe si elles ne sont
pas droites.
Convertir en Bitmap

Cliquez sur ce bouton pour passer


du mode vectoriel à bitmap

Code Arrière-plans Sons

Costume Arrière-plan1
1
Augmentez ou réduisez
cette valeur pour régler
Remplissage 10 la largeur de trait du pinceau

Arrière-plan1
239 x 360
Sélectionnez le noir
dans la palette
L’outil Pinceau des couleurs
permet de tracer
des lignes à main
levée

Convertir en vecteur

Tracez les lignes


dans la zone de dessin
DÉMARRAGE DU PROJET

1.4 REMPLISSEZ
Colorez ensuite chaque section
de l’arrière-plan à l’aide de l’outil
Remplissage. Cliquez sur l’icône
Remplissage (elle ressemble à un pot de
peinture), puis choisissez une couleur dans OUTIL
le menu Remplissage en haut à gauche de REMPLISSAGE
l’éditeur de dessin. Cliquez simplement
dans une section pour la remplir.

Colorez les rives en vert et choisissez


une nuance de bleu pour remplir
la rivière. Vous pouvez ajouter des détails
pour rendre l’arrière-plan plus réaliste.

1.5 DESSINEZ LE BATEAU


La scène est prête, ajoutons le premier sprite. Scratch ne le correctement. Vous pouvez aussi choisir le sprite Bowl
propose pas de bateau, vous devez le créer avec l’éditeur de dessin. dans la bibliothèque des sprites. Dans ce cas, renommez-le
Cliquez sur Choisir un Sprite et sélectionnez le pinceau dans le menu « Bateau » et choisissez une taille de « 200 » dans le panneau
déroulant. Dans l’éditeur de dessin, sélectionnez le mode bitmap puis d’information.
dessinez votre bateau. Nommez ce sprite « Bateau » et dimensionnez-

Costume costume1

Remplissage

Choisissez une couleur


dans la palette
de couleurs

Convertir en vecteur

Assurez-vous que le bateau est dimensionné


correctement dans l’arrière-plan
SCRATCH
Casse-tête 56 57
1.6 CRÉEZ DES VARIABLES
Vous êtes prêt à écrire le code. Variables
Sélectionnez le sprite du bateau puis cliquez sur
l’onglet Code en haut à gauche de l’interface.
Dans la section Variables, cliquez sur Créer une Créer une variable Variable vraie
Variable pour créer trois nouvelles variables. ou fausse selon que
Nommez-les « bateau sur rive », « capacité le bateau est occupé
du bateau » et « bateau en mouvement ». ou non
capacité du bateau

Variable vraie quand


bateau en mouvement
le bateau sera
en mouvement
Assurez-vous que ces cases restent
bateau sur rive Cette variable permettra
vides pour éviter l’affichage de savoir de quel côté
des variables sur la scène se trouve le bateau

1.7 PRÉPAREZ-VOUS À LARGUER


LES AMARRES
Ajoutez ces blocs de code au sprite du bateau
afin de le positionner vide sur le côté gauche quand est cliqué
de la rivière au démarrage du projet. Vous
devrez peut-être ajuster les valeurs x et y pour aller à x: -60 y: 0
l’arrière-plan que vous avez créé. Faites glisser
Le bateau est
le bateau pour le placer où vous voulez, mettre bateau sur rive à gauche d’abord
puis copiez les coordonnées x et y du panneau
positionné
d’information du sprite dans le script.
mettre capacité du bateau à vide à gauche
de la rivière
Le bateau est vide mettre bateau en mouvement à faux
au démarrage du projet

Le bateau est
actuellement à l’arrêt

Cliquez sur le drapeau vert


pour exécuter le projet

Le bateau doit
se positionner sur le bord
gauche de la rivière
DÉMARRAGE DU PROJET

1.8 COMMENÇONS À NAVIGUER


Ajoutez ce code pour que le bateau se déplace sur
l’autre rive lorsque vous cliquez dessus. Testez-le en exécutant
le projet puis en cliquant sur le bateau. Celui-ci doit
automatiquement se déplacer de l’autre côté de la rivière.

Ce script s’exécutera
lorsque l’utilisateur cliquera
Quand ce sprite est cliqué sur le bateau

Le bateau se déplace,
mettre bateau en mouvement à vrai
il faut donc définir cette
variable vraie
Si bateau sur rive = gauche alors

envoyer à tous bateau en mouvement


Si le bateau est à gauche,
glisser en 1 secondes à x: 80 y: 0 Les valeurs x et y devront
ce code le déplace
peut-être être modifiées
vers la droite et met à jour
en fonction de la façon
mettre bateau sur rive à droite dont vous avez dessiné
les variables
la rivière
mettre bateau en mouvement à faux

sinon

envoyer à tous bateau en mouvement Créez un nouveau message


en cliquant sur le menu
glisser en 1 secondes à x: −60 y: 0 déroulant et en choisissant Si le bateau est à droite,
« Nouveau message » ce code le déplace vers
le côté gauche et met
mettre bateau sur rive à gauche à jour les variables

mettre bateau en mouvement à faux

Cliquez sur le bateau pour le faire


passer de l’autre côté.
Cliquez à nouveau pour le
ramener à sa position d’origine
SCRATCH
Casse-tête 58 59
Ajout d’un nouveau sprite
2 Le bateau est prêt à naviguer. Il faut maintenant
ajouter un personnage au jeu. Ajoutez le nouveau sprite,
puis programmez-le pour le déplacer avec le bateau.

2.1 AJOUTEZ LE LION Modifiez ce nombre pour


Sélectionnez le sprite changer la taille du sprite
lion dans la bibliothèque
de Scratch pour l’ajouter
au projet, puis modifiez sa taille
à 80 dans le panneau
Sprite Lion x −19 y 60
d’information du sprite.

Afficher Taille 80 Direction 90

Bateau Lion Cliquez ici


pour ajouter
un sprite

Le sprite sélectionné
apparaît en bleu

Le sprite Lion
apparaît à l’écran
dans la taille définie
AJOUT D’UN NOUVEAU SPRITE

2.2 CRÉEZ LES VARIABLES


Le sprite Lion étant toujours Variables
sélectionné, créez deux nouvelles
variables nommées « lion sur rive » et
« lion à bord » pour ce sprite. Si vous Créer une variable
devez renommer ou supprimer une
variable, cliquez avec le bouton droit capacité du bateau
ou Ctrl + cliquez dessus.

bateau en mouvement

bateau sur rive


Variable vraie si le lion
Ces cases ne doivent lion à bord est sur le bateau
pas être cochées

lion sur rive Variable utilisée


pour savoir de quel côté
se trouve le lion

2.3 POSITIONNEZ LE LION


Ajoutez ces blocs de code au
sprite Lion pour le positionner sur la
rive gauche au démarrage du projet. quand est cliqué Place le lion dans le coin
Ajustez éventuellement les valeurs x supérieur gauche de
et y pour les adapter à votre aller à x: −180 y: 140 la scène au début du jeu
arrière-plan.
mettre lion à bord à faux Le lion n’est pas
sur le bateau
Positionne le lion mettre lion sur rive à gauche
sur la rive gauche

2.4 EMBARQUEZ
Lorsque l’utilisateur
clique sur le lion, il doit se déplacer
dans le bateau. Ajoutez ce code
puis cliquez sur le drapeau vert
pour tester. Quand ce sprite est cliqué
Ces blocs ne sont exécutés
que si le bateau est vide. Cela évite si capacité du bateau = vide alors
d’ajouter plus d’un sprite en même
temps dans le bateau
aller à Bateau Déplace le lion
dans le bateau
Ce bloc se trouve dans la section aller à l’avant-plan
Apparence de la palette Le bateau
des blocs. Il permet d’afficher mettre capacité du bateau à plein est plein
le lion devant le bateau
mettre lion à bord à vrai

Signifie que le lion


est à bord
SCRATCH
Casse-tête 60 61
2.5 DÉPLACEZ LE LION AVEC LE BATEAU
Quand le bateau traverse la rivière, le lion
doit se déplacer avec lui. Ajoutez le code ci-dessous
au sprite Lion, puis exécutez-le. Vérifiez que le lion
traverse bien la rivière avec le bateau dans un sens,
puis dans l’autre.

Cliquez sur le lion


pour le déplacer
Ces blocs sont exécutés avec le bateau
lorsque l’utilisateur
clique sur le bateau

Quand je reçois bateau en mouvement

Cette boucle ne
si lion à bord = vrai alors
s’exécute que si le lion
est sur le bateau
répéter jusqu’à ce que bateau en mouvement = faux

aller à Bateau Le lion se déplace


avec le bateau jusqu’à
aller à l’avant-plan ce que ce dernier
s’arrête

si bateau sur rive = droite alors


Si le bateau se retrouve
aller à x: 165 y: 99 sur la rive droite, le lion est
déplacé dans l’herbe de
mettre lion sur rive à droite la rive droite et les variables
sont mises à jour
sinon

aller à x: -180 y: 140


Si le bateau se retrouve
sur la rive gauche, le lion
mettre lion sur rive à gauche est déplacé dans l’herbe
de la rive gauche et les
variables sont mises à jour

mettre capacité du bateau à vide Le bateau est vide


maintenant
mettre lion à bord à faux

Le lion ne se trouve plus


sur le bateau
AJOUT D’AUTRES SPRITES

Ajout d’autres sprites


3 La prochaine étape consiste à ajouter d’autres
3.1 AJOUTEZ UN DONUT
Sélectionnez le sprite
personnages pour augmenter la complexité du projet. Donut dans la bibliothèque de
scratch pour l’ajouter au projet.
Vous devez les coder exactement comme le lion dans Réduisez sa taille à 50 dans le
les étapes précédentes. Vous pourrez ensuite ajouter panneau d’information.
des règles pour vérifier à tout moment si la logique
Donut
appliquée pour résoudre le jeu est correcte.

3.2 COPIEZ LE CODE DU LION


de tous les blocs pour le Donut. Si les blocs sont copiés les uns
Le code du donut est très similaire au code du lion.
Heureusement, Scratch simplifie l’opération. Cliquez sur le Lion et sur les autres, cliquez droit dans la zone de code et sélectionnez
faites glisser et déposez les blocs de code créés précédemment Nettoyer les blocs pour les redéfinir dans l’ordre.
sur le sprite Donut dans la liste des sprites. Cela créera une copie

Sprite Lion x 165 y 99


Le glisser-déposer de blocs
de code sur d’autres sprites
Afficher Taille 80 Direction 90 est un moyen rapide de
réutiliser le code

Bateau Lion Donut Quand ce sprite est cliqué

capacité du bateau = vide alors


si

aller à Bateau

aller à l’avant plan

mettre capacité du bateau à plein

mettre lion à bord à vrai

3.3 MODIFIEZ LE CODE


Sélectionnez maintenant le sprite
Donut et adaptez son code. Commencez par
créer deux nouvelles variables, « donut sur rive » quand est cliqué Positionne
et « donut à bord », puis modifiez les blocs de le donut sous
code comme illustré. Assurez-vous que les cases aller à x: -180 y: 40 le lion sur la scène
des nouvelles variables ne soient pas cochées.
mettre donut à bord à faux Le donut ne
se trouve pas
sur le bateau
mettre donut sur rive à gauche
SCRATCH
Casse-tête 62 63

Quand ce sprite est cliqué

si capacité du bateau = vide alors

aller à Bateau

aller à l’avant plan

mettre capacité du bateau à plein


Modifiez ce bloc avec
mettre donut à bord à vrai les variables du donut

Quand je reçois bateau en mouvement


Cette boucle ne s’exécute
que si le donut est
si donut à bord = vrai alors sur le bateau

répéter
bateau en mouvement = faux
jusqu’à ce que
aller à Bateau

aller à l’avant plan

si bateau sur rive = droite alors


Si le bateau se retrouve sur
aller à x: 190 y: 0 la rive droite, le donut est
déplacé dans l’herbe de la
mettre donut sur rive à droite rive droite et les variables
sont mises à jour
sinon

aller à x: -180 y: 40 Modifiez ces coordonnées Si le bateau se retrouve sur


pour le donut la rive gauche, le donut est
déplacé dans l’herbe de la
mettre donut sur rive à gauche rive gauche et les variables
sont mises à jour

mettre capacité du bateau à vide

mettre donut à bord à faux


AJOUT D’AUTRES SPRITES

3.4 AJOUTEZ LE COQ


Ajoutez maintenant le dernier
sprite du jeu. Sélectionnez le sprite rooster Tout Animaux
Rooster dans la bibliothèque et réduisez
sa taille à 50 dans le panneau
d’information.

Saisissez le nom Rooster


du sprite pour le
retrouver rapidement

3.5 COPIEZ LE CODE DU LION


Tout comme vous l’avez fait pour le Donut, dans la zone de code et sélectionnez Nettoyer les
glissez-déposez les blocs du sprite Lion sur le Coq blocs pour afficher les blocs de code dans l’ordre.
dans la liste des sprites. Cliquez droit n’importe où

Sprite Lion x –180 y 140

Afficher Taille 80 Direction 90

Glissez-déposez tous les blocs


du sprite Lion, comme
vous l’avez fait avec le Donut

Bateau Lion Donut Rooster


quand est cliqué

aller à x: −180 y: 140

mettre lion à bord à faux

mettre lion sur rive à gauche

3.6 MODIFIEZ LE CODE


Modifiez le code que vous venez
de copier. N’oubliez pas de créer deux
nouvelles variables « coq sur rive » et « coq quand est cliqué Modifie les coordonnées
à bord », et vérifiez que les cases des afin de placer le coq sous
variables ne sont pas cochées. Le code du aller à x: −195 y: −100 le donut sur la scène
sprite Rooster devrait ressembler au code
ci-contre. mettre coq à bord à faux

mettre coq sur rive à gauche

Positionne le coq sur la rive


gauche
SCRATCH
Casse-tête 64 65

Quand ce sprite est cliqué

si capacité du bateau = vide alors

aller à Bateau

aller à l’avant plan

mettre capacité du bateau à plein

mettre coq à bord à vrai Modifiez ce bloc avec


la variable du coq

Quand je reçois bateau en mouvement


Cette boucle ne s’exécute
que si le coq est
si coq à bord = vrai alors sur le bateau

répéter jusqu’à ce que bateau en mouvement = faux

aller à Bateau

aller à l’avant plan

si bateau sur rive = droite alors

aller à x: 165 y: –100

mettre coq sur rive à droite

sinon

aller à x: −195 y: −100


Modifiez ces blocs
pour le coq
mettre coq sur rive à gauche

mettre capacité du bateau à vide

mettre coq à bord à faux


AJOUT D’AUTRES SPRITES

3.7 AJOUTEZ Cliquez sur le menu déroulant


LES RÈGLES et choisissez « Nouveau message »
À ce stade, vous devriez quand je reçois vérifier les rives pour créer ce message
être en mesure de déplacer
les objets d’une rive à l’autre.
Il est temps d’introduire si lion sur rive =  droite et beignet sur rive = droite et coq sur rive
les règles du jeu. Ajoutez
ces blocs de code au sprite dire Gagné : tout le monde est passé du côté droit de la rivière
du bateau. Ils vont vérifier
le contenu des rives pour
voir si l’une des règles est
enfreinte, ou si l’utilisateur
si lion sur rive = gauche et beignet sur rive = droite et coq sur rive
a gagné.

dire Perdu : le lion mange le coq

Si le lion et le coq restent


seuls sur le côté gauche,
alors la partie est perdue si lion sur rive =  droite et beignet sur rive = gauche et coq sur rive

dire Perdu : le lion mange le coq


Si le lion et le coq restent
seuls sur le côté droit, alors
la partie est perdue
si lion sur rive = droite et beignet sur rive = gauche et coq sur rive

dire Perdu : le coq mange le donut


Si le coq et le donut
restent seuls sur le côté
gauche, alors la partie
est perdue si lion sur rive = gauche et beignet sur rive = droite et coq sur rive

Si le coq et le donut dire Perdu : le coq mange le donut


restent seuls sur le côté
droit, alors la partie
est perdue

Trucs et astuces
Concevez votre propre scénario
Utilisez l’éditeur de dessin pour modifier
les costumes des sprites et l’arrière-plan
du projet afin de créer un nouveau scénario
pour ce jeu. Vous pourriez vous situer
dans l’espace, par exemple, et transporter
des aliens d’une station spatiale à l’autre.
Utilisez la bibliothèque des sprites
et des arrière-plans pour trouver d’autres idées.
Testez avec d’autres
sprites et arrière-plans
pour créer des scénarios
différents
SCRATCH
Casse-tête 66 67
Si tous les sprites se retrouvent 3.8 APPLIQUEZ LES RÈGLES
sur la rive droite, le casse-tête Pour terminer, les règles doivent être
a été résolu vérifiées à tout moment. Il suffit de modifier
puis d’ajouter quelques blocs à ceux de l’étape 1.7.
Exécutez ensuite le code et testez la logique.
= droite et bateau sur rive = droite alors

Ces blocs de code sont


ceux du sprite Bateau

=  gauche et bateau sur rive = droite alors


quand est cliqué

aller à x: −60 y: 0

mettre bateau sur rive à gauche


= droite et bateau sur rive =  gauche alors
mettre capacité du bateau à vide

mettre bateau en mouvement à faux

répéter indéfiniment

=  gauche et bateau sur rive = droite alors


envoyer à tous vérification des côtés

= droite et bateau sur rive = gauche alors

La boucle va
constamment vérifier
les côtés pour voir si
l’une des règles a été
brisée

Compter les déplacements Musique de fond


Si vous envisagez de compter le nombre Beaucoup de jeux ont une musique de fond pour aider le joueur
de traversées que le joueur a fait, à se concentrer. Cliquez sur l’icône Arrière-plans en bas à droite
vous devrez ajouter une nouvelle variable de l’écran, puis sur l’onglet Sons. Cliquez sur l’icône Choisir un son
appelée « déplacements » et la définir en bas à gauche et sélectionnez « Dance Chill Out ». Ajoutez ensuite
de telle sorte qu’elle augmente chaque fois le code ci-dessous pour que le son joue en permanence.
que quelqu’un clique sur le bateau.
Vous pouvez choisir
quand est cliqué n’importe quel son dans
Ajoutez ce bloc au code créé la bibliothèque des sons
à l’étape 1.8 pour augmenter
répéter indéfiniment
le nombre de déplacements

jouer le son Dance Chill Out jouer le son


ajouter 1 à déplacements
Esquive d’astéroïdes
Dans ce projet Scratch, vous allez créer un jeu avec des sprites
animés qui traversent l’écran. C’est une excellente façon
de commencer avec le développement de jeux. Jouer à ce jeu
nécessite de la concentration et de bons réflexes.

Principe du jeu Déplacement des obstacles


Le projet crée une illusion de
Dans ce jeu, le joueur utilise les touches fléchées haut et bas pour mouvement en déplaçant les
diriger une fusée au milieu d’astéroïdes. Le curseur « Vitesse de obstacles le long de l’axe des x
distorsion » contrôle la vitesse du jeu, et les astéroïdes apparaissent et en les faisant apparaître
à intervalles aléatoires.
de plus en plus vite à mesure que le jeu se déroule. Tout contact entre
la fusée et un astéroïde met fin au jeu. Déplacez le curseur pour Cliquez ici pour quitter
augmenter la vitesse le mode plein écran

Cliquez ici
pour exécuter
le projet

Pistolet laser 3

Score 0

Vitesse de distorsion 5

Appuyez sur la barre


d’espace pour
déclencher les lasers
de la fusée
et détruire
les astéroïdes

Choisissez parmi
une sélection
d’arrière-plans
au thème
de l’espace dans
la bibliothèque
SCRATCH
Esquive d’astéroïdes 68 69

VOUS ALLEZ APPRENDRE COMMENT L’UTILISER


❯❯Comment créer un jeu à défilement Durée : Dans ce jeu, l’arrière-plan et d’autres objets
horizontal 20–25 min se déplacent latéralement pour faire croire
❯❯Comment utiliser les boucles pour créer Niveau de difficulté au joueur qu’il se déplace. Cette approche
un jeu en continu populaire appelée jeu à défilement horizontal
❯❯Comment créer un jeu qui augmente en peut être adaptée pour les jeux de course
difficulté au fur et à mesure qu’il se déroule ou de tir.

Conception du programme
Le programme utilise une boucle principale pour vérifier quelle
touche est pressée et déplacer la fusée vers le haut ou vers le bas.
Un rayon laser jaillit pour détruire les astéroïdes si la barre
d’espace est pressée. Le code de la boucle vérifie continuellement DÉBUT
si des roches ont touché la fusée pour mettre fin au jeu.

Déplacer la fusée Touche flèche


vers le haut haut activée ?
de l’écran OUI

NON

Déplacer la fusée Touche flèche


vers le bas bas activée ?
de l’écran OUI

NON

Déclencher le laser Barre d’espace


et détruire l’astéroïde activée ?
OUI

NON

Fin du jeu Collision détectée ?

OUI NON
PRÉPAREZ-VOUS AU LANCEMENT

Préparez-vous au lancement
1 Ce projet nécessite quelques éléments de base pour
démarrer. Les sprites et l’arrière-plan vont créer l’environnement
espace pour le jeu, et des variables ajouteront des fonctionnalités.

1.1 AJOUTEZ DES SPRITES


Démarrez un nouveau projet et supprimez
le sprite Cat. Ajoutez ensuite les deux sprites requis
Le sprite Rocks
pour ce jeu : Rocketship et Rocks. Vous les trouverez
sera l’astéroïde
dans la bibliothèque des sprites.
qui va essayer
de frapper
Rocketship Rocks le Rocketship

1.2 PRÉPAREZ L’ARRIÈRE-PLAN


Vous aurez besoin de deux arrière-plans
pour ce jeu. Cliquez sur Choisir un arrière-plan dans 1
la section Scène en bas à droite de Scratch puis
choisissez Space. Vous pouvez choisir n’importe
quel autre arrière-plan de la catégorie Espace si vous Arrière-plan 1
le souhaitez. 2x2

Cliquez ici pour ajouter Choisissez Space Le nouvel arrière-plan


un nouvel arrière-plan un arrière-plan 480 x 380 est visible dans
l’onglet Arrière-plans

1.3 PEIGNEZ-LE EN ROUGE


Pour créer le deuxième
arrière-plan, ouvrez l’onglet Costume arrière-plan1
1
Arrière-plans puis sélectionnez le
premier arrière-plan1. Cliquez sur Remplissage Cliquez ici pour que Space
le bouton Convertir en Bitmap soit l’arrière-plan par défaut
et servez-vous de l’outil Remplir
pour le peindre en rouge. arrière-plan1
Pour terminer, cliquez sur 480 x 360
l’arrière-plan Space pour le
sélectionner comme arrière-plan
par défaut. 2

Space
480 x 360
Cliquez ici pour Outil
sélectionner Remplissage
la couleur

Convertir en vecteur
SCRATCH
Esquive d’astéroïdes 70 71
1.4 CRÉEZ LES VARIABLES
Utilisez le bouton Créer Variables
une variable dans la section Variables
Cette variable compte
pour créer toutes les variables requises Créer une variable le nombre d’astéroïdes
pour ce projet. Assurez-vous que les cases
qui ont été esquivés
de Pistolet laser, Score et Vitesse
avec succès
de distorsion soient cochées de sorte Évités
qu’elles s’affichent à l’écran.
Pistolet laser

Intervalle L’intervalle entre deux


apparitions d’astéroïdes ;
Stocke le nombre
il diminue à mesure
de coups restants ma variable que le jeu avance
dans le pistolet laser

Score

Vitesse de distorsion La vitesse à laquelle


Stocke le score du joueur la fusée se déplace

Codage de la fusée
2 Maintenant que les éléments de base sont prêts,
vous pouvez commencer à coder en commençant par le
sprite Rocketship. Il faudra ensuite ajouter des commandes
de direction pour la fusée, la faire se déplacer dans l’espace,
et lui fournir un pistolet pour tirer au laser.

2.1 PRÉPAREZ LA FUSÉE


Sélectionnez le sprite
Rocketship dans la liste des sprites,
puis ajoutez les blocs ci-contre destinés quand est cliqué
à le mettre en place pour le jeu. Réduit la taille
mettre la taille à 50 %
du sprite de moitié

Place la fusée sur la gauche aller à x: −200 y: 0


de la scène et la pointe
vers la droite s’orienter à 180

mettre Vitesse de distorsion à 5 Il y a trois


coups dans
mettre Évités à 0 le pistolet laser,
mais vous
pouvez
mettre Score à 0
changer ce
Ce bloc fera apparaître nombre pour
les astéroïdes toutes
mettre Intervalle à 2 augmenter
les deux secondes ou réduire
mettre Pistolet laser à 3 la difficulté
CODAGE DE LA FUSÉE

2.2 CONFIGUREZ LES


COMMANDES DE DIRECTION
Complétez les blocs de code précédents
comme indiqué ci-dessous. Cela quand est cliqué
permettra de diriger la fusée du haut
vers le bas de l’écran. mettre la taille à 50 % de la taille initiale

aller à x: -200 y: 0

s’orienter à 180

mettre Vitesse de distorsion à 5

mettre Évités à 0

mettre Score à 0

mettre Intervalle à 2

mettre Pistolet laser à 3

Le bloc répéter indéfiniment répéter indéfiniment


permet d’exécuter le jeu en
continu (voir page 29) si touche flèche haut pressée ? alors

Lorsque la touche flèche


ajouter 10 à y
haut est pressée, la fusée
monte sur l’écran

si touche flèche bas pressée ? alors

Lorsque la touche flèche


ajouter –10 à y
bas est pressée, la fusée
descend sur l’écran

2.3 TEST DU VOL


Cliquez ici pour
Cliquez sur le drapeau
vert pour exécuter le code et exécuter le code.
tester la fusée. Vérifiez si vous
pouvez faire monter et Avant d’exécuter
descendre la fusée à l’aide le code, faites glisser
des touches fléchées. ces icônes dans le
coin supérieur droit
Appuyez sur
pour les éloigner
les touches flèche
de la zone de jeu
haut et bas pour
contrôler la fusée

Ne vous préoccupez
pas de l’astéroïde
pour le moment,
il sera codé plus tard
SCRATCH
Esquive d’astéroïdes 72 73
2.4 ANIMEZ LA FUSÉE 2.5 ÉVITEZ LES ASTÉROÏDES
Sans flamme, la fusée semble immobile. Ajoutez les blocs de code ci-dessous au sprite Rocketship.
Pour éviter cela, cliquez sur l’onglet Costumes, Ils vont contrôler le comportement de la fusée si elle touche les astéroïdes
puis cliquez droit sur le costume numéro cinq qui seront ajoutés par la suite.
et choisissez supprimer. Ajoutez ensuite le code
ci-dessous pour donner l’impression qu’elle vole
dans l’espace. Testez le code avant de passer Si la fusée touche
à l’étape suivante. le sprite Rocks,
quand est cliqué le jeu est fini

répéter indéfiniment
3
si touche le Rocks ? alors

envoyer à tous Fin du jeu


rocketship-c
128 x 184

4 Créez ce message de diffusion à l’aide


du menu déroulant

rocketship-d
131 x 181 Vous pouvez aussi
2.6 PRÉPAREZ LE PISTOLET LASER
Vous allez maintenant écrire le code qui contrôle le pistolet laser.
supprimer un costume Lorsque la touche espace est pressée, s’il reste des munitions dans
en cliquant sur la croix le pistolet, celui-ci tire. Pour obtenir cet effet, l’arrière-plan alterne
5 bleue rapidement avec l’arrière-plan rouge, ce qui donne l’impression d’un tir
au laser. Ajoutez ce code au sprite Rocketship et testez-le.
Vérifie s’il reste Déclenche un effet
des munitions de son pour le tir
rocketship-e dans le pistolet laser au laser
143 x 159
dupliquer quand la touche espace est pressée
exporter
si Pistolet laser > 0 alors
supprimer
jouer le son laser2 Réduit le
nombre de tirs
ajouter –1 à Pistolet laser restants de un

quand est cliqué basculer sur l’arrière-plan arrière-plan1

répéter indéfiniment attendre 0.05 secondes

attendre 0.20 secondes basculer sur l’arrière-plan Space

costume suivant envoyer à tous Tir de pistolet laser

Crée un nouveau Affiche brièvement l’arrière-


Cette boucle change le costume message de plan rouge, ce qui donne
de la fusée toutes les 0,20 secondes, diffusion appelé Tir l’impression qu’un
ce qui donne l’impression qu’elle tourne de pistolet laser coup de feu a été tiré
CODAGE DE LA FUSÉE

2.7 MISE À JOUR DU SCORE


Ajoutez maintenant les blocs de code
ci-dessous pour augmenter le score chaque fois
que cinq astéroïdes sont évités, puis pour réduire
l’intervalle. Les nouveaux astéroïdes apparaîtront
plus souvent.
Ce bloc divise le nombre
d’astéroïdes évités par cinq

quand je reçois Mettre à jour le score

si évités mod 5 = 0 alors


Augmentez ce nombre pour que le jeu
ajouter 1 à Score dure plus longtemps

si intervalle > 0.5 alors L’intervalle n’est réduit que s’il est
supérieur à 0,5 seconde pour ne
pas rendre le jeu injouable
mettre Intervalle à 0.90 * Intervalle

Cela réduit l’intervalle


de 10 pourcents

Codez l’astéroïde
3 Maintenant que la fusée est prête, programmons
les astéroïdes. Le code des prochaines étapes va les faire
défiler sur l’écran. Une explosion sera également ajoutée
pour simuler l’impact du laser sur les astéroïdes touchés.

3.1 CRÉATION DES ASTÉROÏDES


Pour programmer les astéroïdes, cliquez sur
le sprite Rocks et ajoutez ce code. La boucle répéter
indéfiniment garantit la création en continu
d’astéroïdes pendant l’exécution du jeu. quand est cliqué
Définit la taille
mettre la taille à 22 % de la taille initiale des astéroïdes

Ce bloc cache le sprite cacher Quand le jeu est lancé,


d’origine, de sorte que vous ne
la boucle crée indéfiniment
voyez que les clones
répéter indéfiniment de nouveaux astéroïdes

Le sprite Rocks est créer un clone de moi-même


surligné en bleu
pour indiquer qu’il attendre Intervalle secondes
s’agit du sprite
Rocks sélectionné
SCRATCH
Esquive d’astéroïdes 74 75
3.2 FAITES BOUGER LES ASTÉROÏDES
Pour créer l’illusion du mouvement de la fusée, des positions différentes sur le côté droit de l’écran.
les rochers vont se déplacer à travers l’écran. Dès qu’ils De cette façon, le joueur ne peut pas deviner où le
atteignent le côté gauche, ils disparaissent. Grâce aux prochain apparaîtra, ce qui rend le jeu plus difficile.
nombres aléatoires, chaque astéroïde commence à Ajoutez ce code au sprite Rocks pour que cela se produise.

quand je commence comme un clone

mettre la taille à nombre aléatoire entre 20 et 50 % de la taille initiale La taille de l’astéroïde


est choisie au hasard

répéter indéfiniment Rend le clone visible sur


l’arrière-plan tandis que le sprite
montrer Rocks original reste caché

Place l’astéroïde sur


aller à x: 200 y: nombre aléatoire entre –240 et 240
le côté droit de l’écran
à une position aléatoire
répéter indéfiniment

tourner de 15 degrés Fait tourner les astéroïdes


pendant leur déplacement
dans l’espace
mettre x à –1 * Vitesse de distorsion

si abscisse x < –240 alors


Incrémente le nombre
d’astéroïdes évités si
ajouter 1 à Évités l’astéroïde atteint le côté
gauche de l’écran
envoyer à tous Mettre à jour le score
Fait disparaître
supprimer ce clone
l’astéroïde

Les rochers vont apparaître sur le bord


droit de l’écran à une position y
aléatoire, et se déplacer vers la gauche

La taille des rochers sera aléatoire


CODAGE DES ASTÉROÏDES

3.3 SUPPRESSION DES ASTÉROÏDES 3.4 CRÉEZ UN SPRITE EXPLOSION


Il est temps d’ajouter un peu de code pour tirer Il faut ensuite ajouter un sprite pour créer
avec le pistolet laser. Celui-ci détruira les astéroïdes dès l’explosion de l’impact des astéroïdes sur la fusée.
qu’il sera déclenché. Ajoutez ces blocs au sprite Rocks, Choisissez « Peindre » dans le menu Choisir un Sprite en bas
puis testez-le. N’oubliez pas que vous n’avez que trois à droite de la liste des sprites et nommez-le « Explosion ».
coups.

Sprite Explosion x 36 y 28
quand je reçois Tir de pistolet laser
Afficher Taille 100 Direction 90
supprimer ce clone

Rocketship Rocks Explosion


Enlève les astéroïdes
frappés par le rayon laser

3.5 DESSINEZ L’EXPLOSION


Représentez une grosse explosion avec l’éditeur
de dessin. Servez-vous des outils Pinceau, Remplissage
et Texte pour créer cet effet.

Costume costume1
Grouper Dégrouper Avancer Reculer Avant- Arrière-
plan plan
Remplissage Contour 0 Marker

Utilisez l’outil Texte


ou le pinceau
Il faut
pour écrire les mots
une grosse
explosion

BOOM Avec deux


couleurs,
l’explosion
devient plus
impressionnante

Convertir en Bitmap
SCRATCH
Esquive d’astéroïdes 76 77
3.6 MASQUEZ L’EXPLOSION
Ajoutez ce code au sprite
d’explosion pour qu’il ne soit pas visible au quand est cliqué
démarrage du jeu.
cacher Masque l’explosion
au démarrage du jeu

3.7 FIN DU JEU


Ajoutez ensuite ces blocs de code
au sprite Explosion pour faire apparaître cette Ce message est
quand je reçois Fin du jeu
dernière au milieu de l’écran dès la diffusion diffusé lorsque le
du message Fin du jeu puis arrêter le jeu. sprite Rocketship
aller x: 0 y: 0 touche un
astéroïde
C’est l’opposé du bloc montrer
cacher, il affiche
Ces points représentent
l’explosion
stop tout le centre de l’écran

Ce bloc interrompt
toute exécution de code,
ce qui termine le jeu

3.8 CURSEUR DE LA VITESSE


DE DISTORSION
Pour terminer, cliquez-droit sur la
variable Vitesse de distorsion en
haut à droite de l’écran et
choisissez « barre de défilement ». Pistolet laser 3
De cette façon, le joueur pourra
ajuster la vitesse du jeu en Score 0
déplaçant le curseur de gauche
à droite. Le jeu est prêt, voyez
jusqu’où vous pouvez guider la Vitesse de distorsion 5
fusée, testez différentes vitesses
et n’oubliez pas d’utiliser le laser lecture normale
quand vous en avez besoin.
grande lecture

barre de défilement

Choisissez l’option
barre de défilement
dans le menu déroulant
TRUCS ET ASTUCES

Trucs et astuces
Ajoutez un code de triche pour recharger votre
pistolet laser
L’ajout de vos propres codes de triche est une façon quand la touche x est pressée
amusante de personnaliser un projet. Ajoutez ce
code au sprite Rocketship de sorte qu’en appuyant Modifiez ce nombre pour
sur la touche x, le laser bénéficie de trois coups
mettre Pistolet laser à 3
augmenter ou diminuer
supplémentaires. Vous pouvez également créer un le nombre de tirs
sprite qui apparaît tous les 20 astéroïdes, et ajoute supplémentaires
un tir s’il touche le vaisseau spatial.

Spectre de l’espace
Ajoutez ce code pour appliquer une série
de couleurs à l’arrière-plan afin de créer un quand est cliqué
fantastique spectacle de lumière
intergalactique.
répéter indéfiniment

ajouter 5 à l’effet couleur Augmentez ce nombre


pour alterner plus vite
les couleurs

Pistolet laser 3

Score 0

Vitesse de distorsion 5

Exécutez le code pour


visualiser les changements
de couleur de l’arrière-plan
SCRATCH
Esquive d’astéroïdes 78 79

Objets volants non identifiés


Vous pouvez facilement ajouter d’autres objets que la
fusée devra éviter. Il suffit d’ajouter un nouveau costume
au sprite Rocks puis de modifier le code comme
ci-dessous. Cela fera voler des chiens dans l’espace.

quand je commence comme un clone

mettre la taille à nombre aléatoire entre 20 et 50 % de la taille initiale

Basculer sur le costume rocks

si nombre aléatoire entre 1 et 10 = 1 alors

Ces nouveaux blocs vont


Basculer sur le costume dot-c remplacer les astéroïdes
par des chiens volants
toutes les 10 exécutions

répéter indéfiniment

montrer

aller à x: 200 y: nombre aléatoire entre -240 et 240

répéter indéfiniment
1
tourner de 15 degrés

mettre x à −1 * Vitesse de distorsion


rocks
125 x 78
si abscisse x < −240 alors

ajouter 1 à Évités
2
envoyer à tous Mettre à jour le score

supprimer ce clone dot-c


104 x 139

Le chien de l’espace
est ajouté aux
costumes du sprite
Rocks.
PYTHON
Qu’est-ce que Python ?
Python est l’un des langages de programmation les plus populaires
au monde. Ce langage extrêmement polyvalent répond à un large
éventail de situations. Basé sur le texte, il est idéal pour les débutants
parce qu’il est facile à lire et à comprendre.

Pourquoi utiliser Python ? enseigner la programmation. La syntaxe


Créé en 1991 par le programmeur néerlandais de Python, proche de celle de l’anglais,
Guido van Rossum, Python a été conçu comme contribue à produire du code facile à lire
un langage de haut niveau à l’attention des et elle oblige les programmeurs à bien
programmeurs familiers avec le C et le système structurer leur code. C’est une compétence
d’exploitation Unix. Python convient pour une utile à développer car ce code est ainsi plus
grande diversité de programmes, et est utilisé facile à déboguer et à lire pour les autres
par de nombreuses écoles et universités pour utilisateurs.

Caractéristiques de Python
Python est un langage Libre et open source
de programmation simple En tant que logiciel free/libre
et minimaliste. Il possède et open source (FLOSS), Python
des fonctionnalités qui peut être distribué librement.
le rendent attractif aussi bien Son code source est accessible et
pour les programmeurs modifiable, et des extraits de code
débutants qu’expérimentés. peuvent également être utilisés
dans de nouveaux programmes.

Bibliothèques très riches


L’une des plus grandes forces
de Python, ce sont ses
bibliothèques, qui fournissent
du code pour effectuer
des tâches spécialisées.
Elles permettent de créer
des programmes plus
facilement et rapidement.

Portable
Python peut être exécuté
sur de nombreuses
plates-formes différentes,
telles que macOS,
Windows et PlayStation.
PYTHON
Qu’est-ce que Python ? 82 83
Comment ça marche
Un programme Python, généralement appelé APPLICATIONS
script, est un fichier texte contenant des mots,
des nombres et des ponctuations, qui correspondent Python est un langage de programmation
à usage général avec lequel vous créez
aux instructions. Ces instructions sont saisies par
des systèmes très diversifiés. Grâce à ses
le programmeur en respectant la syntaxe du langage. nombreuses bibliothèques spécialisées, il est
IDLE (Integrated Development and Learning utilisé dans des domaines aussi divers que les
Environment), une application gratuite installée affaires, la médecine, la science et les médias.
avec Python, comprend un éditeur de texte basique
qui permet à l’utilisateur d’écrire, de modifier et Développement de jeux
d’enregistrer le code avant d’exécuter un programme. Python a différents
modules et bibliothèques
destinés au développement
de jeux. Il s’agit notamment
de pygame, pour les jeux
2D, et PySoy, un moteur
de jeu 3D basé sur le cloud.

SAISIE DU CODE ENREGISTREMENT EXÉCUTION Espace


Python a été utilisé
pour créer des outils
pour le Centre de contrôle
des missions de la NASA.
Ces outils aident
l’équipage à se préparer
et à gérer l’avancement
Intégrable de chaque mission.
Les scripts Python peuvent
être inclus dans des Business
programmes écrits dans La syntaxe simple
d’autres langues, tels que de Python le rend idéal
C ou C++. Cela permet aux pour la création de
programmeurs grandes applications. Il est
d’améliorer leur code. devenu particulièrement
populaire avec la montée
de la fintech (technologie
financière).
Simple et facile Informatique scientifique
à apprendre Python a des bibliothèques
Extrêmement convivial, qui peuvent être utilisées
le code Python utilise dans des domaines
moins de symboles de spécifiques de la science,
ponctuation que la plupart tels que PyBrain pour
des autres langages le machine learning et
de programmation. pandas pour l’analyse
des données.

Développement web
Les développeurs utilisent
Excellent support Python pour créer
Python est très bien des tâches automatisées,
documenté, avec telles que la génération
notamment des guides de contrôles et les tests,
de démarrage, une section ou des applications Web.
référence et de nombreux
exemples de code.
Installation de Python
Ce livre s’appuie sur la version 3 de Python. Elle est gratuite et peut
être facilement téléchargée à partir du site Python. Suivez les
instructions correspondant à votre système d’exploitation.

Python sur Windows


Avant d’installer Python, vous devez savoir si FLYING CIRCUS
votre système possède une architecture 32 ou
64 bits. Pour ce faire, cliquez avec le bouton droit Le nom de Python ne fait pas référence au serpent,
sur le menu Démarrer, puis choisissez Système. mais à la série télévisée britannique Monty Python’s
Flying Circus. Guido van Rossum, qui a créé ce langage,
Un processeur 64 bits offre des performances plus
était un grand fan de l’émission. Il y a d’ailleurs de
élevées, car il peut gérer plus de données à la fois nombreuses références aux sketches de Monty Python
qu’un processeur 32 bits. dans la documentation officielle de Python.

1 Rendez-vous sur le site web de Python 4 Ouvrez IDLE


Allez sur www.python.org et cliquez sur Downloads Une fois le processus d’installation terminé, accédez
dans la barre de menu supérieure. Une liste de systèmes au dossier Applications et trouvez IDLE dans le dossier
d’exploitation apparaîtra à l’écran. Sélectionnez Windows. Python. Vous pouvez également le rechercher dans le menu
Démarrer. Double-cliquez sur IDLE pour ouvrir la fenêtre
console de Python. Vous verrez le menu d’IDLE en haut
https://www.python.org de la fenêtre.

2 Téléchargez un installeur 3 Exécutez l’installeur


Trouvez la version la plus récente de Python, qui devrait Une fois téléchargé, double-cliquez sur le fichier
commencer par 3. Assurez-vous de sélectionner une version d’installation et suivez les instructions qui apparaissent à
x86 pour les machines 32 bits et une version x86-64 pour les l’écran. N’oubliez pas de cocher la case de l’invite initiale
machines 64 bits. L’installeur web ou l’exécutable conviennent qui indique « Add python to path ».
tout aussi bien.
Le site web pourrait proposer Python 3.9.2 (64-bit) Setup
une version plus récente de Python
Setup Progress
Python 3.9.2 – Feb. 19, 2021
Download Windows installer (32-bit)
Installing:
Download Windows installer (64-bit) Initializing...
python
for Cancel
windows
Vous pouvez annuler
l’installation à tout moment
PYTHON
Installation de Python 84 85
Python sur Mac
Avant d’installer Python, vous devez vérifier quel système
d’exploitation votre Mac utilise : une version 32 ou 64 bits.
Pour le savoir, cliquez sur l’icône Pomme en haut à gauche
de l’écran et sélectionnez À propos de ce Mac. Si le processeur est
un Intel Core Solo ou Intel Core Duo, cela signifie que votre système
a une architecture 32 bits, sinon il a une architecture 64 bits.

1 Allez sur le site Web de Python 4 Ouvrez IDLE


Allez sur www.python.org. Placez le curseur au-dessus À la fin de l’installation, ouvrez le dossier Applications
de l’onglet Downloads dans la barre de menu supérieure depuis la barre latérale du Finder et cherchez IDLE dans
afin d’afficher une liste de systèmes d’exploitation. le dossier Python. Double-cliquez sur IDLE pour ouvrir la
Sélectionnez l’option MacOS. fenêtre console Python et vérifiez que l’installation a réussi.

https://www.python.org

2 Téléchargez un installeur
Sélectionnez la version la plus récente de Python
correspondant à votre système d’exploitation. Le fichier
Python.pkg sera téléchargé automatiquement sur votre
système.
3 Exécutez l’installeur
Choisissez cet installeur Une fois téléchargé, double-cliquez sur le fichier .pkg
pour les ordinateurs 64 bits et suivez les instructions. Le processus d’installation sur un
ordinateur Mac est très simple.
Il suffit d’accepter la licence et de confirmer l’emplacement
Python 3.9.2 – Feb. 19, 2021 d’installation (généralement le disque dur Macintosh).
Download macOS 64-bit installer
Download macOS 64-bit/32-bit installer
Install Python
Choisissez cet installeur
Welcome to the Python Installer
pour les ordinateurs 32 bits

Go Back Continue

Cliquez sur Continue pour


poursuivre l’installation
Fenêtre console
La console s’ouvre dès le lancement de IDLE. Il peut être intéressant de faire
des tests dans cette fenêtre puisqu’elle affiche une réponse instantanée. La console affiche
Cependant, comme elle ne peut pas enregistrer le code, il ne serait pas la version de Python
pratique de l’utiliser pour évaluer plus de quelques lignes de code à la fois. qu’elle exécute

Python 3.7.0 Shell

Python 3.7.0 (v3.7.0:1bf9cc5093, Jan 26 2019, 23:26:24 Ces informations


dépendent du système
[Clang 6.0 (clang-600.057)] on darwin d’exploitation exécuté

Type "copyright", "credits" or "license()" for more information


>>>

Fenêtre de l’éditeur
Vous ouvrez l’éditeur de code COULEURS DU CODE
en sélectionnant New File ou Open
dans le menu File de IDLE. C’est dans Pour faciliter la lecture du code et la détection des erreurs,
cette fenêtre que les programmeurs IDLE affiche le texte dans l’éditeur et la console en utilisant
différentes couleurs. La couleur utilisée pour chaque mot
tapent des séries d’instructions beaucoup
dépend de son rôle dans le code.
plus longues et complexes, qu’ils
enregistrent ensuite dans des fichiers
dont l’extension est .py. COULEURS DU CODE
Code Couleur Exemple
Un fichier Python affiché Commandes intégrées Violet print()
dans la fenêtre de l’éditeur
Symboles, noms,
Noir 25
et nombres

helloworld.py Texte entre guillemets Vert "Hello world!"

print("Hello world!") Erreurs Rouge pront()

Mots-clés Orange if, else

Sortie Bleu Hello world!

Utilisation de IDLE
L’interface de IDLE, l’environnement de développement et d’apprentissage
intégré de Python, se compose d’une fenêtre console qui évalue immédiatement
les commandes courtes, et de la fenêtre de l’éditeur dans laquelle
les programmeurs saisissent et enregistrent des programmes plus longs.
Exécuter un programme depuis IDLE
Pour exécuter un programme à partir de IDLE, vous devez d’abord
ouvrir son fichier dans la fenêtre de l’éditeur. S’il s’exécute
correctement, la console affiche la sortie du code, sinon un message
d’erreur s’affiche.

Python 3.7.0 Shell

Python 3.7.0 (v3.7.0:1bf9cc5093, Jan 26 2019, 23:26:24


[Clang 6.0 (clang-600.057)] on darwin
Type "copyright", "credits" or "license()" for more information
>>>
======== RESTART: /Users/tinajind/Desktop/helloworld.py ========
Hello world!
>>>

Erreurs courantes
num = 4
En plus d’être sensible à la casse, Ici « num » a été saisi
Python est également très strict if (nut == 5): par erreur en « nut »
sur la disposition et l’orthographe
du code. Les sections de code print("Hello world!") L’erreur de code entraîne
ce message d’erreur
doivent être indentées (décalées)
de quatre espaces par rapport
à la ligne précédente, afin Traceback (most recent call last):
de rendre le code plus lisible.
Ces caractéristiques sont File "/Users/tinajind/Desktop/helloworld.py",
redoutables pour les débutants line 2, in <module>
mais IDLE aide à repérer
et corriger les erreurs à l’aide if (nut == 5):
de bulles d’informations NameError: name 'nut' is not defined
contextuelles et de messages
d’erreur (voir pages 118-121) >>>
dans la console.
Les variables dans Python
Les variables font partie des outils de base en programmation, elles permettent
de stocker et de manipuler les données. Ce sont des « boîtes » dans lesquelles
vous rangez les valeurs utilisées dans un programme.

Création de variables du programme. Cela permet au code de fonctionner


Pour créer une variable dans Python, il faut lui en tenant compte de différentes situations.
donner un nom et une valeur. La valeur appartient L’alternative consisterait à coder « en dur »,
à un type, comme un nombre ou une chaîne et chaque calcul et expression contiendrait
de caractères (voir p. 91). Toutefois, comme leur nom une valeur spécifique. Dans ce cas, il faudrait que
l’indique, les variables n’ont pas de valeur fixe. Une le programmeur écrive plusieurs programmes
fois que les données y sont stockées, leurs valeurs pour couvrir toutes les situations qui pourraient
peuvent ensuite être modifiées dans une autre partie être rencontrées.

Affecter une chaîne de caractères


Dans cet exemple, une nouvelle variable
box_name est déclarée et la valeur "Lait"
y est stockée. Les guillemets autour du mot
« Lait » indiquent que la valeur est une chaîne
de caractères.

JUS DE >>> box_name = "Lait"


CHIPS FRUITS

LENTILLES GÂTEAUX
ÉPICES

Attribuer un nombre
Ici, la commande déclare une variable appelée
eau et y stocke la valeur entière 8. Dans Python,
on dit aussi que l’on attribue 8 à eau.

>>> eau = 8
Tapez le code EAU
derrière l’invite >>>
PYTHON
Les variables dans Python 88 89

DÉCLARER DES VARIABLES


Créer une nouvelle variable s’appelle également « déclarer »
une variable. Dans certains langages de programmation,
LES LANGAGES DE un mot-clé spécial est utilisé pour montrer qu’une nouvelle
variable est en cours de création. Dans Python, une variable
PROGRAMMATION est créée dès qu’une valeur lui est attribuée et son type est
ONT CHACUN LEUR automatiquement détecté. Une erreur courante consiste
à utiliser une variable sans lui avoir affecté de valeur
MÉTHODE au préalable.
POUR
CRÉER LES
VARIABLES
D’UN PROGRAMME Utilisation des variables
Une fois qu’une variable détient une valeur, elle peut être
utilisée de différentes façons. La valeur actuelle de la
variable peut être utilisée dans un calcul, ou la valeur
stockée peut être modifiée en une nouvelle valeur.

Calcul simple
Ce code effectue une simple >>> input = 2
multiplication. Il stocke
l’entier 2 dans la variable >>> score = input * 3
input, puis récupère cette
LAIT valeur et la multiplie par 3. >>> print(score)
Le résultat est stocké dans la
variable score, puis affiché 6
à l’écran.

Le résultat Affiche la valeur


du calcul attribuée à score

Changer une valeur Change la valeur de input


CAFÉ THÉ Pour modifier la valeur
d’une variable, une nouvelle
valeur peut lui être affectée. >>> input = 5
Taper ce code dans la
console sous le code >>> print(score)
précédemment écrit n’aura
Nommer une variable aucun effet sur la valeur
Donner un nom approprié 6
stockée dans score, cela
à une variable contribue à rendre un ne changera que la valeur
programme plus facile à comprendre. de la variable input.
Voici quelques règles à suivre pour Le résultat est le même
ces noms :
• Démarrez le nom de la variable par
une lettre Mettre à jour une valeur
• Les symboles tels que –, /, #, ou @ Pour obtenir le résultat >>> input = 5
ne sont pas autorisés correct, la valeur de la
• Il faut distinguer les majuscules et les variable score doit être >>> score = input * 3
minuscules. Python traitera « Lait » et mise à jour explicitement,
« lait » comme deux variables différentes comme dans l’exemple >>> print(score)
• Évitez d’insérer des commandes ci-contre.
Python, telles que « print » dans le nom 15
L’ajout de cette ligne attribue
La sortie est une nouvelle valeur à score
mise à jour après la modification de input
Les données dans Python
Les programmes Python fonctionnent avec différents types de données. Ces types
déterminent ce qui peut être fait avec ces données et la manière dont elles sont
saisies, affichées et stockées. De nombreuses erreurs dans le code Python sont
dues à des types de données inadéquats.

PYTHON
UTILISE LES
MÊMES RÈGLES
D’ARITHMÉTIQUE QUE
Entiers et flottants NOUS POUR EFFECTUER
Les nombres dans les programmes Python
appartiennent à un des deux types suivants :
SES CALCULS
entier (integer) ou flottant (float). Un entier
ne contient pas de chiffres après la virgule,
tandis qu’un flottant (abréviation pour Opérateurs arith
m
virgule flottante) possède une partie décimale. Les nombres et les étiques
va
Les flottants sont souvent utilisés pour des combinés en utilis riables contenant des nombres pe
ant l’addition, la so uvent être
mesures ou comme résultat d’un calcul. la division. Les sy ustraction, la mul
mboles de ces pr
arithmétiques. L’a ocessus sont appe tiplication et
dd lés opérateurs
animaux est une variable entière et la division sont ition, la soustraction, la multiplicat
représentées par io
et contient la valeur 2 +, –, * et / respectiv n
ement.
OPÉRATEURS AR
>>> animaux = 2 ITHMÉTIQUES
Symbole
Signification
>>> print(animaux)
+ Addition
2
- Soustraction
ENTIER

>>> temperature = 37.5 * Multiplication

>>> print(temperature) / Division

37.5 Cette variable co


ntient
prix de type fl Le résultat sera
ot tant stocké
FLOTTANT La variable temperature
Calculs dans la variable
taxe
contient un chiffre après la
Ces commande
virgule s >>> prix =
utilisent des 8.00
opérateurs
arithmétiques >>> taxe =
prix * (20/
pour calculer la 100)
ta xe due sur un >>> print(ta
xe)
ar ticle coûtant
8,00 €. 1.6 La sortie est la va
leur stockée
dans la variable
taxe
PYTHON
Les données dans Python 90 91
Caractères et chaînes de caractères
Une chaîne de caractères (string) est le type LA FONCTION LEN()
de données utilisé par Python pour le texte. Elle se
compose de lettres individuelles, de chiffres ou Il est souvent très utile de connaître
la longueur d’une chaîne ou d’une liste.
de symboles appelés caractères, qui sont toujours
La fonction len() de Python peut être
encadrés de guillemets. Python autorise les guillemets utilisée pour les deux tâches. N’oubliez pas
simples et doubles dans son code. que les espaces et la ponctuation comptent
dans la longueur d’une chaîne.
Chaîne de caractères
La variable prenom >>> prenom = "Alain" >>> len("Hello Alain")
contient une chaîne
composée des caractères >>> prenom 11
du mot Alain.
'Alain'

Combinaison de chaînes de caractères


La combinaison de plusieurs chaînes pour en créer une nouvelle est
appelée concaténation. Python utilise le symbole + pour le faire. Il Les listes
est important que toutes les valeurs concaténées soient des chaînes On a souvent besoin de regrouper des éléments
de caractères. dans un programme. Python fournit le type
de données de liste pour cela. Les éléments
d’une liste ne sont pas forcément du même type
>>> parole = "joyeux anniversaire "
de données. Pour créer une liste, les valeurs
>>> nom = "Emma " sont placées entre crochets et séparées par
des virgules.
>>> chanson = parole + parole + "joyeux \ La chaîne de caractères "deux"
entre guillemets doubles
anniversaire chère " + nom + parole
>>> ma_liste = [1, "deux", \
>>> chanson
3, 5, 7.4]
'joyeux anniversaire joyeux
>>> ma_liste
anniversaire joyeux anniversaire
[1, 'deux', 3, 5, 7.4]
chère Emma joyeux anniversaire'

Les guillemets L’antislash divise


La variable chanson contient maintenant une version simples n’affectent le code sur deux lignes
personnalisée de « joyeux anniversaire » pas la valeur

Conversion des types Accéder aux éléments


Il est parfois nécessaire de changer le type de données d’une valeur Pour permettre aux programmeurs d’accéder aux
pour une tâche particulière, pour concaténer par exemple un entier éléments d’une liste, Python numérote chacun d’eux.
et une chaîne. Python fournit des fonctions telles que str() Taper le nom de la liste suivi du numéro d’élément
et int() pour effectuer cette conversion. entre crochets permet de récupérer l’élément
concerné. La numérotation commence à 0.
Changer un entier en chaîne de caractères

>>> age = 25 >>> ma_liste[0] Premier élément


de la liste
1 ma_liste
>>> print ("Vous avez " + str(age) \ +
" ans") >>> ma_liste[2]

Vous avez 25 ans 3


Opérateurs logiques = ET ==

et branchements
Il est important
de faire la distinction
entre les deux signes
égaux de Python. Le
Les booléens, un autre type de données en Python, n’ont signe = est l’opérateur
d’affectation alors
que deux valeurs possibles : True (vrai) ou False (faux). que le double signe
Ils permettent d’écrire des instructions de branchement qui égal == est
contrôlent quelles parties d’un programme sont exécutées. l’opérateur d’égalité.

Vérifie si les valeurs


Opérateurs logiques de chaque côté sont égales

Les opérateurs logiques sont des symboles qui Égalité


Une expression booléenne >>> 3 == 9
permettent à un programme de faire des comparaisons contenant un double signe égal
entre des valeurs. Toute comparaison qui utilise des a la valeur True (Vrai) si les valeurs False
opérateurs logiques est appelée expression booléenne de chaque côté sont égales.
et le résultat est une valeur booléenne. Les opérateurs Vérifie si la valeur
à gauche est
logiques sont similaires aux opérateurs arithmétiques
plus petite
(voir p. 90), mais produisent des valeurs booléennes
Inférieur à
plutôt que des nombres. Une expression contenant >>> 3 < 5
le symbole < a la valeur True
OPÉRATEURS LOGIQUES
si la valeur de gauche est True
inférieure à la valeur de droite.
Symbole Signification

Inférieur à >>> oranges = 5 Stocke la valeur 5


< dans la variable
oranges
>>> pommes = 7
> Supérieur à
>>> oranges != pommes Les valeurs de
oranges et

Valeur égale
True de pommes sont
== différentes

Différent de
Les opérateurs logiques fonctionnent aussi avec les variables.
!= Valeur différente
Cet exemple stocke des valeurs dans deux variables puis vérifie
si les valeurs stockées sont différentes.

Opérateurs booléens
Les expressions booléennes peuvent être
>>> (oranges < 10) and (apples > 2)
combinées à l’aide des opérateurs booléens True Pour que cette expression soit vraie,
les deux expressions doivent être vraies
« and », « or » et « not ». Ils permettent de créer
des expressions plus complexes qui peuvent >>> (oranges < 10) or (apples == 3)
traiter plusieurs variables différentes. True Une seule expression doit être vraie
pour que cette instruction soit vraie
>>> not(apples == 7)
En plaçant not devant
une expression vraie, False
vous obtenez la valeur False
PYTHON
Opérateurs logiques et branchements 92 93

Cette comparaison est Si la première condition


la première condition est vraie, elle est affichée

Plus de deux
branchements quiz_score = 9
Lorsqu’il y a plus de
deux choix possibles if quiz_score > 8:
dans le code, la
commande elif print("Vous êtes un champion !") C’est la
(raccourci pour else if, deuxième
« sinon si ») est utilisée. Il elif quiz_score > 5: condition
peut y avoir plusieurs
elif entre le if et le else. Si la deuxième
print("Vous auriez pu faire mieux!") condition est
vraie, cette ligne
else: est affichée

print("Étiez-vous bien réveillé ?")

Si les deux conditions


sont fausses, cette ligne
est affichée
Un seul branchement
La commande de branchement la plus simple
n’a qu’une seule possibilité que l’ordinateur prend
en compte si la condition est True. Deux branchements
C’est l’instruction if (si). Quand un programme doit faire
une chose si une condition est vraie
temperature = 25 et une autre si elle est fausse, il a besoin
Cette comparaison d’une commande avec deux branchements.
if temperature > 20: est la condition C’est une instruction if else (si sinon).

print("Éteindre le chauffage") age = 15


La comparaison est
if age > 17: la première condition
Si la condition est vraie,
le code s’exécute print("Vous pouvez voter")
Si la condition est vraie,
else: cette ligne est affichée

print("Vous n’êtes pas


Branchements
suffisamment \ âgé pour voter")
Les programmes informatiques
contiennent souvent du code qui
ne doit être exécuté que dans
certaines situations. Dans ce cas, les
programmeurs créent des branchements.
Le choix du code à exécuter dépend
du résultat d’une expression booléenne.
Le comportement du programme Un antislash est utilisé Si la condition
pour poursuivre une est fausse,
dépend ainsi de différentes entrées longue ligne de code sur cette ligne est
ou environnements. la ligne suivante affichée
Entrée utilisateur
Pour récupérer des données saisies au clavier, Python utilise la fonction
input(). Cette fonction reçoit une chaîne de caractères qu’elle affiche
pour inviter l’utilisateur à saisir les données requises. Elle affiche ensuite
simplement à l’écran le texte saisi par l’utilisateur, il est donc judicieux
d’enregistrer ce texte dans une variable afin de pouvoir l’utiliser plus
tard dans le code.

Cette chaîne de caractères est


affichée à l’écran et demande
à l’utilisateur de saisir une entrée Sortie à l’écran
La fonction print() permet d’afficher
>>> input("Saisissez votre nom : ") une valeur à l’écran. Elle affiche
Saisissez votre nom : Claire la valeur de toute variable ou expression,
quel que soit son type de données.
'Claire' Les programmeurs l’utilisent souvent
pour déboguer du code quand leur
L’utilisateur saisit son nom, La réponse de l’utilisateur est éditeur n’inclut pas de débogueur
mais la valeur n’est pas enregistrée enregistrée et le programme peut
(voir p. 118-121). L’affichage de la valeur
et ne pourra donc pas être utilisée l’utiliser pour faire autre chose
plus tard des variables à différents points du code
peut être utile, mais cela complique
>>> nom = input("Saisissez votre nom: ") le code.
Saisissez votre nom : Claire
>>> print("Hello " + nom)
Hello Claire
Le programme affiche la chaîne « Hello »
suivie du nom de l’utilisateur

Entrée
et sortie
Il ne sert à rien d’écrire un programme
à moins qu’il ne produise une sortie
qui puisse être lue et comprise.
En Python, les programmes nécessitent
souvent une entrée, soit de la part
de l’utilisateur, soit d’un fichier.
PYTHON
Entrée et sortie 94 95

Entrée à partir d’un fichier


Python a la capacité d’obtenir des données directement à partir d’un
fichier. C’est pratique quand les programmes nécessitent beaucoup
de données ou pour éviter à l’utilisateur de saisir les informations
requises à chaque exécution. En Python, l’ouverture d’un fichier crée
un objet fichier qui peut être sauvegardé dans une variable puis
utilisé pour effectuer diverses opérations sur le contenu du fichier.
Ouvre le fichier et enregistre l’objet fichier dans la variable fichier

>>> fichier = open("/Desktop/Liste.txt")


>>> print("hello world!") >>> fichier.read() Lit les données du fichier
Affiche une chaîne
hello world! de caractères 'Rue Haute\nGrande Rue\nRue Basse\n\n’
\n affiche chaque sortie
sur une nouvelle ligne
>>> print(4) >>> fichier.close() Ferme le dossier

4 Affiche un entier

Affiche un flottant stocké >>> fichier = open("/Desktop/Liste.txt")


dans une variable
>>> fichier.readline()
>>> metres = 4.3 Ouvre le fichier et lit
'Rue Haute\n' une ligne à la fois
>>> print(metres)
>>> fichier.readline()
4.3
'Grande Rue\n'

>>> cats = ["Coco", "Hops"]


>>> print(chats) Affiche une liste Sortie dans un fichier
En Python, il est également possible de générer des données
['Coco', 'Hops'] dans un fichier. C’est pratique lorsqu’un programme produit
beaucoup de données, ou qu’il met à jour un fichier d’entrée
existant. À l’ouverture du fichier, le programmeur doit préciser
si des données y seront ajoutées et si elles devront l’être avant
ou après les données existantes.

Ouvre le fichier avec ajout des données à la fin Cela signifie « Ajouter »

Le nombre de caractères écrits dans le fichier >>> fichier = open("/Desktop/Liste.txt", "a")


>>> fichier.write("Rue du pont")
Écrit la nouvelle valeur « Rue du pont »
12 dans le fichier
>>> fichier.close()
Les boucles dans Python
Les programmes contiennent souvent des blocs de code qui sont répétés.
Plutôt que de taper les mêmes lignes encore et encore, les programmeurs utilisent
des boucles dont le type dépend d’un certain nombre de facteurs.

Boucle For
Si un programmeur sait combien de fois un bloc de indenté de quatre espaces par rapport à l’instruction
code sera répété, une boucle for est utilisée. Le code for. L’indentation peut également être effectuée
répété constitue le corps de la boucle et chaque manuellement.
exécution est appelée itération. Le corps est toujours

C’est l’équivalent d’une


Variable de boucle for chrono in range(1,4): liste contenant les valeurs
Cet exemple de boucle compte de un à trois, en 1, 2, 3
affichant chaque numéro sur une nouvelle ligne, print(chrono)
suivi d’une ligne disant « Go ! ». La variable de boucle Cette instruction
gère les itérations, elle prend la valeur de chaque print("Go !") constitue le corps
élément de la plage 1-4 (range(1,4)) dans l’ordre de la boucle
en commençant par la première valeur pour la
première itération (le dernier numéro de la plage est
exclu de l’itération). equipe_rouge = ["Sophie", "Anna", "Emily",
"Simar"]

Boucle For avec une liste


Pour traiter une liste dans une boucle for, il n’est pas print("Les membres de l’équipe rouge sont :")
nécessaire d’utiliser la fonction range(). Python va
simplement boucler sur chaque élément de la liste. for joueur in equipe_rouge:
Dans cet exemple, la boucle affiche chaque nom de joueur est le compteur
la liste equipe_rouge. print(joueur) de boucle temporaire

Boucles While Cette question apparaîtra,


demandant l’entrée de l’utilisateur
La boucle while est utilisée
lorsqu’un programmeur ne sait
pas combien de fois une boucle
reponse = input("Dois-je continuer ? (o/n)")
doit s’exécuter et qu’il ne peut pas
utiliser une boucle for. Le nombre while reponse == "o":
d’itérations dans cette boucle
answer = input("Dois-je continuer ? (o/n)")
dépend de l’entrée utilisateur.
Condition de boucle
Une boucle while inclut une question appelée
condition de boucle, dont la réponse sera True La question est
ou False. Le corps de la boucle est exécuté posée à nouveau
uniquement si la condition de boucle sur
cette itération est vraie, sinon elle se termine.
PYTHON
Les boucles dans Python 96 97

Les boucles infinies


Les boucles While sont également utilisées dans
les situations où la boucle est censée s’exécuter pendant
toute la durée du programme. Il s’agit des boucles
infinies, dont la condition doit être définie en True, et qui
sont souvent utilisées dans les programmes de jeux.

while True:
print("Rien ne peut m’arrêter maintenant !")

Blocage
Les boucles infinies accidentelles sont La ligne est affichée de façon
l’équivalent en codage d’un trou noir. répétitive
L’exécution du programme est bloquée
et l’ordinateur ne répond plus.

Sortie en cas d’urgence


Il arrive qu’un programmeur crée une boucle
INDENTEZ LE CORPS infinie sans le vouloir, lorsque la condition
de boucle reste vraie quelle que soit l’itération.
Comme pour les boucles for, le corps d’une Cette boucle peut être facilement arrêtée à partir
boucle while doit être indenté de quatre de la console de Python en appuyant
espaces par rapport au mot-clé while. Si cette
sur les touches Ctrl + C.
indentation est manquante, Python produit le
message d’erreur « expected an indented
block ».
L’oubli de l’indentation Définit la variable
produit cette erreur numero à 1
Valeur variable
La condition de boucle
sera toujours vraie s’il number = 1
expected an indented block n’y a aucune instruction
pour modifier la valeur while numero < 10:
de la variable numero
OK dans le corps de la print(numero)
boucle.
Boucles imbriquées
Le corps d’une boucle peut contenir une autre boucle qu’on appelle
alors boucle imbriquée. En Python, n’importe quel type de boucle
peut être contenu dans n’importe quel autre type de boucle.
Une boucle while peut donc contenir une autre boucle while ou une
boucle for, et vice versa. Dans cet exemple, chaque fois que le corps
de la boucle externe s’exécute, la boucle imbriquée s’exécute 10 fois,
affichant un compte à rebours pour le lancement.

reponse = input("Lancer une autre fusée ? (o/n)")


while reponse == "o":
for chrono in range(10, 0, −1): Contient la liste 10,
9, 8, 7, 6, 5, 4, 3, 2, 1
print(chrono) et compte à rebours
à partir de 10
print("Lancement !")
reponse = input("Lancer une autre fusée ? (o/n)")

La boucle
imbriquée Cette ligne met à jour la variable reponse La boucle s’arrête si
à chaque itération, ce qui permet de sortir l’entrée utilisateur est n
de la boucle en cas de besoin

Sortie de boucle resultats_capteur = [3, 5, 4, −1, 6, 7]


Le programmeur peut avoir besoin de quitter
une boucle plus tôt ou de décider total = 0
d’abandonner l’itération actuelle du corps
de la boucle pour passer à la suivante. Dans ce
cas, il peut utiliser une des deux commandes for lecture_capteur in resultats_capteur:
break ou continue.
if lecture_capteur < 0: Donne le total de tous
Break les resultats_capteur
La commande break stoppe complètement la boucle et le break jusqu’à la lecture négative
code se poursuit à partir de l’instruction qui suit cette
dernière. Dans cet exemple, la boucle s’arrête dès qu’une total = total + lecture_capteur
valeur négative est détectée dans la liste resultats_
capteur. Le code ignore cette valeur négative et toutes print("Le total fait : " +str(total))
les valeurs qui la suivent.
PYTHON
Les boucles dans Python 98 99
Listes de listes
Les boucles imbriquées sont souvent utilisées qui est [«Equipe rouge», «Adam», «Anjali»,
pour traiter des listes dans des listes. L’exemple «Colin», «Anne»]. La variable nom dans la boucle
ci-dessous imprime les noms des membres de interne récupère alors les valeurs de equipe l’une
l’équipe pour trois équipes différentes. Lorsque le après l’autre, jusqu’à ce que chaque nom de
code s’exécute, la variable equipe dans la boucle l’équipe rouge ait été affiché. Chaque liste
externe prend la valeur de la première liste, d’équipe est séparée par une ligne vide.

equipes = [["Equipe rouge", "Adam", "Anjali", "Colin", "Anne"], \


La liste
["Equipe bleue", "Greg", "Sophie", "June", "Sara"], \
equipes
contient trois
["Equipe verte", "Chloe", "Hamid", "Jia", "Jane"]] listes différentes
entre crochets

Sélectionne
for equipe in equipes: une équipe à traiter
for nom in equipe :
print(nom)
print("\n")

Affiche une ligne vide Affiche les noms d’une équipe


entre chaque liste d’équipe les uns après les autres

lectures = [3, 5, 4, −1, 6, 7] Initialise la variable


total en définissant
total = 0 sa valeur à 0

Déclenche la commande
continue après avoir lu
for lecture in lectures: une valeur négative
if lecture < 0:
Continue
continue La commande continue est moins drastique,
Donne la somme elle ignore uniquement l’itération courante.
total = total + lecture de toutes La boucle passe alors à l’itération suivante.
les lectures Dans cet exemple, si une valeur négative est
print("Le total fait : " +str(total)) non négatives rencontrée, elle est simplement ignorée et la
boucle passe à la valeur suivante dans la liste.
Les fonctions
Un bout de code qui exécute une tâche spécifique est appelé
fonction. Si la tâche est exécutée souvent, il est possible de la
séparer du code principal pour éviter de répéter des instructions
identiques. En divisant ainsi le code en sections, la lecture
et le test du programme sont plus faciles.

Utilisation des fonctions Définir une fonction


Une fonction est toujours def greeting():
Pour utiliser une fonction, il faut « l’appeler ». définie au début du bloc
La plupart du temps, il suffit de saisir le nom de code (voir p. 102-103) print("Hello !")
de la fonction suivi d’une paire de parenthèses. en saisissant le mot-clé def
suivi du nom de la fonction.
Si la fonction reçoit un paramètre, il est inséré
entre les parenthèses. Un paramètre est Le mot-clé def indique
à Python que ce bloc
une variable ou une valeur donnée à la fonction Le paramètre
de code est une
pour lui permettre d’exécuter sa tâche. fonction de la fonction

BUREAU DE POSTE

UNE MÉTHODE EST


UNE FONCTION
QUI CONTIENT
DU CODE POUR
RÉALISER
UNE TÂCHE
PYTHON
Les fonctions 100 101
Fonctions intégrées
Python comprend une gamme de fonctions intégrées qui permettent
d’effectuer des tâches basiques, comme récupérer l’entrée de l’utilisateur,
afficher la sortie à l’écran, effectuer des opérations arithmétiques simples
et déterminer la longueur d’une chaîne ou d’une liste. Les exemples
ci-dessous peuvent tous être testés dans la fenêtre d’IDLE.
Nombre à arrondir
Le paramètre de la fonction input() est
une question qui invite l’utilisateur à saisir
quelque chose
>>> pi = 22/7
>>> nom = input("Quel est votre nom ? ") >>> pi
Quel est votre nom ? Tina Réponse saisie 3.142857142857143
par l’utilisateur
>>> print("Hello " + nom) >>> round(pi, 2)
Hello Tina 3.14 Nombre
de décimales
input() et print() Le paramètre de la round()
La fonction input() récupère les données fonction print() est Cette fonction arrondit un flottant à un nombre
saisies par l’utilisateur et la fonction print() une chaîne qui s’affiche spécifique de décimales. Elle reçoit deux
les affiche à l’écran. Le paramètre de input() à l’écran paramètres, le nombre à arrondir et le nombre
s’affiche à l’écran pour l’utilisateur. de décimales désirées.

Autres types d’appels


Les fonctions intégrées, telles que print() ou len(), sont faciles à utiliser parce qu’elles
acceptent des paramètres de différents types. Une méthode est une fonction associée à
un objet particulier, et ne peut être utilisée que sur cet objet (voir p. 144-145). L’appel
d’une méthode est différent de l’appel d’une fonction intégrée. On indique le nom de
l’objet, un point puis le nom de la méthode suivi d’une paire de parenthèses.

Nom de l’objet

Méthode upper()
Cette méthode transforme >>> ville = "Paris"
toutes les lettres
minuscules d’une chaîne >>> ville.upper() Les parenthèses
en lettres majuscules. peuvent contenir
Elle ne peut être utilisée 'PARIS' un paramètre
qu’avec des chaînes
de caractères.
Nom de la méthode

Ajout à une liste


La méthode de liste >>> maliste = [1,2,3,4]
append() ajoute
une valeur à la fin >>> maliste.append(5)
d’une liste. Elle reçoit en
paramètre la valeur qui >>> print(maliste) La nouvelle valeur
doit être ajoutée à la liste. est ajoutée à la fin
[1, 2, 3, 4, 5] de la liste
Création des fonctions
Python possède une bibliothèque standard qui contient de Définit une fonction qui Cette formule
reçoit une température convertit des degrés
nombreuses fonctions prêtes à l’emploi. Cependant, la plupart des
en Celsius et l’affiche Celsius
programmes Python ont besoin de fonctions spécialement conçues en Fahrenheit en Fahrenheit
pour eux. En Python, une fonction est créée en la « définissant ».

def print_temperature_en_Fahrenheit(temperature_en_Celsius) :
temperature_en_Fahrenheit = temperature_en_Celsius * 1.8 + 32
print(temperature_en_Fahrenheit)

Fonction dédiée à une tâche


Affiche la Certaines fonctions se contentent d’exécuter
température une tâche sans renvoyer d’information au code
en degrés qui les a appelées. Cela revient à envoyer une
Fahrenheit lettre par courrier normal. Le postier accomplit
sa tâche en livrant cette lettre, mais il
n’informe pas l’expéditeur qu’elle
a été remise.

Codage du haut vers le bas


En Python, les fonctions sont normalement définies NOMMER LES FONCTIONS
en tout début du programme. En effet, il est
important de définir une fonction avant qu’elle ne soit Comme pour les variables, il faut respecter
certaines règles pour nommer les fonctions en
appelée, soit par une autre fonction, soit par la partie
Python. Tout comme il est important pour une
principale du code. fonction d’avoir une tâche ou un objectif clair,
il est également important que la fonction ait un
nom qui décrit clairement ce qu’elle fait. Le nom
def fonction_a(): recuperer_nombre(), par exemple, n’est pas
aussi bon que recuperer_nombre_de_
return 25 fonction_a
gagnants() pour une fonction qui renvoie
est appelée par
fonction_b le nombre de personnes qui ont gagné dans une
compétition. S’il y a plusieurs mots dans un nom,
ils doivent être tapés en minuscules et séparés
def fonction_b():
par des traits de soulignement.
reponse = 2 * fonction_a()
return reponse Ce code fonctionne parce que
les deux fonctions fonction_a et Ordre de définition
fonction_b ont déjà été définies Puisque la partie principale du code appelle à
la fois fonction_a et fonction_b, elles
nombre = fonction_a() + fonction_b() doivent être définies au début du programme.
Comme fonction_b dépend de
print(nombre) fonction_a, cette dernière doit être définie
avant fonction_b.
PYTHON
Les fonctions 102 103
def compter_lettre_e(mot): Définit une fonction qui compte
et renvoie le nombre de fois où la lettre
total_lettre_e = 0 « e » apparaît dans un mot particulier

for lettre in mot: Cette boucle examine


chaque lettre du mot
if lettre == "e": étudié

total_lettre_e = total_lettre_e + 1
return total_lettre_e
Demande aux utilisateurs
d’entrer leur nom, puis le
stocke dans la variable
nom_utilisateur = input("Saisissez votre nom : ") nom_utilisateur

total_e_dans_nom = compter_lettre_e(nom_utilisateur)
print("Il y a " + str(total_e_dans_nom) + "e dans votre nom")

Fonction qui renvoie une valeur


Il existe également des fonctions qui exécutent
une tâche et produisent une valeur, qui est ensuite
renvoyée au code qui les a appelées. Cela permet
au code appelant de stocker la valeur
dans une variable, si nécessaire.

Variables locales et globales d’autres fonctions du code, mais pas les variables
Une variable globale est déclarée dans la partie locales. Le code renverra un message d’erreur si une
principale du code et est visible partout. Une variable variable locale est utilisée en dehors de sa fonction.
locale, par contre, est déclarée à l’intérieur d’une Une fonction doit déclarer la variable globale qu’elle a
fonction et n’existe que pendant l’exécution de cette l’intention d’utiliser, sinon Python créera une nouvelle
fonction. Les variables globales peuvent être lues par variable locale avec le même nom.

def reset_jeu():
global score, charmes, niveau
score = 0
charmes = 0
niveau = 0

reset_jeu Déclare les variables


Cette fonction réinitialise un jeu globales que cette
en redéfinissant la valeur fonction utilisera
des variables globales score,
charmes et niveau à 0.
Les bibliothèques
Une bibliothèque Python est une collection de fichiers, appelés
modules, disponibles pour les programmeurs. Ces modules
contiennent du code pour les tâches de programmation courantes,
comme les interactions avec le matériel ou l’accès aux pages Web.

Modules intégrés
La bibliothèque standard de Python est fournie avec
chaque installation de Python. Vous disposerez donc turtle
Ce module Python recrée le robot en forme
immédiatement de modules tels que Tkinter et turtle de tortue issu du langage de programmation Logo.
sans avoir besoin de les télécharger ou d’installer du Le robot dessine sur l’écran en se déplaçant.
code supplémentaire.

random
Ce module permet aux programmes
d’inclure des calculs ou des sorties basés sur
des nombres aléatoires. Un programmeur socket
peut ainsi intégrer la notion de hasard Avec le module socket, les programmes
dans son code. communiquent à travers les réseaux et Internet et ils
sont capables de créer leurs propres sockets.

datetime
À l’aide du module datetime, un programme time
travaille avec des dates de calendrier Les fonctions de ce module gèrent le temps, comme
et des fonctions qui peuvent calculer celles relatives au temps mesuré par le processeur de
des durées. l’ordinateur ou aux fuseaux horaires des différents pays.

Tkinter
webbrowser Grace au module Tkinter, les programmeurs sont
Le module webbrowser permet capables de créer une interface utilisateur graphique
d’ouvrir un navigateur sur l’ordinateur (GUI), y compris des éléments tels que des boutons
de l’utilisateur et d’afficher des liens. et des menus.
PYTHON
Les bibliothèques 104 105
Importer et utiliser des modules
Le processus d’ajout d’un module à un programme afin qu’il puisse utiliser
ses fonctions et définitions est appelé « importation ». En Python, il est
possible d’importer tout ou partie des fonctions d’un module. La méthode
utilisée pour effectuer l’importation dépend des exigences du programme.
Les exemples ci-dessous illustrent les différentes méthodes d’importation
et la syntaxe requise dans chaque cas.

import ...
Le mot clé import suivi du nom du import time
module met tout le code du module à la
disposition du programme. Pour accéder
aux fonctions du module, il est nécessaire Appelle la fonction timezone
de taper son nom suivi d’un point puis offset = time.timezone du module time
du  nom de la fonction afin d’appeler
cette dernière. print("Votre décalage en heures par rapport à
l’heure UTC est de: ", offset) Affiche la valeur
de la variable offset

from … import …
Si un programme n’a besoin d’utiliser from random import randint
qu’une ou deux fonctions d’un module, La fonction
il est préférable d’importer uniquement randint() produit
ces fonctions. Dans ce cas, il n’est pas un entier aléatoire
nécessaire d’inclure le nom du module jet_de = randint(1,6) entre 1 et 6
avant le nom de la fonction.
print("Vous avez lancé un", jet_de)

from … import … as …
Si le nom d’une fonction dans le module from webbrowser import open as montre_moi
est trop long ou similaire à d’autres noms
dans le code, il peut être utile de la
renommer. Comme avec From... import...,
le programmeur se réfère ensuite à la url = input("saisissez une URL: ")
fonction simplement par son nouveau
nom, sans la précéder du nom du module. montre_moi(url) Affiche la page Web demandée
par l’utilisateur

PYGAME
La bibliothèque pygame contient un grand nombre
de modules utiles pour coder des jeux. Pygame
ne faisant pas partie de la bibliothèque standard,
les programmeurs qui en ont besoin doivent
préalablement la télécharger et l’installer. Pygame
Zero (voir p. 164-165) est un outil destiné
aux apprentis programmeurs qui facilite l’utilisation
des fonctions de pygame.
Générateur d’équipes
Dans un jeu de sport d’équipe, la première chose à faire est de choisir
les équipes. Une première solution consiste à choisir les capitaines puis
à les laisser choisir leurs joueurs mais vous pouvez aussi choisir les personnes
au hasard. Dans ce projet, vous allez automatiser ce processus en créant
un outil Python qui constituera les équipes au hasard.

Comment ça marche Allocation aléatoire


Ce projet s’appuie sur le module random de Python Ce projet va générer deux équipes et un
capitaine pour chacune d’elles. Lorsque
pour former des équipes, avec des joueurs sélectionnés vous exécuterez le programme, il affichera
au hasard. Les noms des joueurs sont stockés dans des à l’écran les équipes et les capitaines
listes (voir p. 91) puis le module mélange l’ordre dans ces choisis.
listes. Des boucles sont utilisées pour parcourir la liste
et afficher les joueurs. Enfin, une instruction if (voir p. 93)
vérifie si l’utilisateur est satisfait de la sélection.

Console Python 3.7.0

Bienvenue dans le générateur


d’équipes !
Equipe 1 capitaine : Rose
Equipe 1 :
Jean
Ada
Anne
Claire
Martin La liste des joueurs s’affiche
dans la console
Paul
Alice
Roland
Rose
Yoann
PYTHON
Générateur d’équipes 106 107

VOUS ALLEZ APPRENDRE COMMENT L’UTILISER


❯❯Comment utiliser le module random Durée : Le code de ce projet peut être réutilisé pour toute
❯❯Comment utiliser les listes 15–20 min tâche qui nécessite des allocations aléatoires
comme l’attribution de tâches sur le lieu de travail,
❯❯Comment utiliser les boucles Lignes de code : 24
l’affectation de personnes à des projets et ainsi de
❯❯Comment utiliser les instructions Niveau de difficulté suite. C’est un moyen rapide et équitable d’affecter
de branchement des personnes à des équipes ou des tâches.

Conception du programme
Le programme commence par mélanger la liste du reste de l’équipe. Les étapes sont ensuite
des joueurs. Il attribue ensuite la première moitié répétées pour créer la seconde équipe. Si vous
à l’équipe 1, sélectionne au hasard un capitaine voulez reconstituer les équipes, le programme
puis affiche le nom de ce dernier ainsi que ceux répète les étapes, sinon, il se termine.

DÉBUT

Mélange des joueurs

Affectation des joueurs Choix au hasard du capitaine Affichage du capitaine


de la première moitié de l’équipe 1 et des joueurs de l’équipe 1
de la liste à l’équipe 1

Choix au hasard du capitaine Affectation des joueurs


Affichage du capitaine et
de l’équipe 2 de la seconde moitié
des joueurs de l’équipe 2
de la liste à l’équipe 2

OUI
Recommencer
la sélection ?

NON

FIN
CRÉATION D’UNE ÉQUIPE

Création d’une équipe


1 Ce programme simplifiera le processus de sélection
ou d’affectation des équipes. Dans cette section, vous allez
créer le fichier qui contiendra le code, importer un module,
puis établir une liste de joueurs.

1.1 CRÉEZ UN NOUVEAU FICHIER 1.2 AJOUTEZ LE MODULE


La première étape consiste à ouvrir IDLE et à cliquer Importez le module random en saisissant cette ligne
sur File, puis New file dans le menu. Enregistrez le fichier (File, en haut du fichier. Ce module contient des fonctions qui vous
Save as) sous « generateur_equipe.py ». Cela créera une fenêtre permettront de choisir des joueurs au hasard dans une liste.
d’édition vide dans laquelle vous pourrez écrire votre programme.

File Edit Shell import random


New File N Cliquez ici
Open... O pour créer un
Open Module... nouveau fichier Le module random peut choisir
Recent Files des nombres au hasard ou mélanger
Module Browser B une liste dans un ordre aléatoire

1.3 SALUEZ L’UTILISATEUR


Ensuite, créez un message
pour souhaiter la bienvenue
print("Bienvenue dans le générateur d’équipes !")
à l’utilisateur. Ce message s’affichera
au lancement du programme. Cette phrase apparaîtra comme message
Enregistrez le fichier, puis exécutez de bienvenue dans la console Python
le programme pour vous assurer
que le code fonctionne.
ENREGISTRER
Dans le menu Run, choisissez Run Bienvenue dans le générateur d’équipes !
Module. Si le code est correct,
le message de bienvenue devrait >>>
apparaître dans la console Python.

BIENVENUE DANS LE GÉNÉRATEUR D’ÉQUIPES !


PYTHON
Générateur d’équipes 108 109
NOMBRES ALÉATOIRES
Les nombres aléatoires peuvent être utilisés
9
pour simuler tout ce qui peut être aléatoire
ou qui est censé être aléatoire comme un 6 4 7
3 2
lancer de dé ou le choix d’une carte dans un 8
jeu de cartes. Le module random de Python

5
1 6
introduit la notion de chance dans un
programme. Il est décrit dans la section Docs
du menu d’aide d’IDLE.

5
1.4 CRÉEZ UNE LISTE DE NOMS
Vous aurez besoin du nom de tous les joueurs pour générer vos équipes
au hasard. En Python, vous conservez des groupes d’éléments connexes dans une liste
(voir p. 91). Commencez par créer la variable joueurs pour stocker la liste en
saisissant le bloc de code ci-dessous à la suite de l’instruction d’importation. Mettez le
contenu de la liste entre crochets et séparez chaque élément de la liste par une virgule.

import random
La liste est attribuée
joueurs = ["Martin", "Roland", "Anne", à la variable joueurs

"Claire", "David", "Alice", Vous n’avez pas besoin


d’insérer un antislash (\) pour
"Sonia", "Paul", "Jacques", continuer une liste sur la ligne
suivante. Celle-ci se décale
"Rose", "Alexia", "Maria", naturellement dès que
vous appuyez sur Entrée
"Thomas", "Yoann", "Guillaume", Chaque élément de la liste est
une chaîne entre guillemets
"Ada", "Grace", "Jean",
"Marissa", "Alain"]

Ce projet comprend 20 joueurs dans la liste.


Vous pouvez modifier ce nombre si vous le
souhaitez (voir p. 115)

1.5 MÉLANGEZ L’ORDRE DES JOUEURS


Pour sélectionner des joueurs au hasard, vous pouvez de la liste à l’équipe 1 et la seconde moitié à l’équipe 2.
les choisir de façon aléatoire et les affecter aux deux équipes Dans ce cas, il faut commencer par mélanger les joueurs
jusqu’à ce que vous soyez à court de joueurs, à condition que le à l’aide de la fonction shuffle() du module random.
nombre de joueurs soit pair. Une méthode plus simple consiste Saisissez le code ci-dessous sous la commande print.
à mélanger la liste de joueurs puis à attribuer la première moitié

print("Bienvenue dans le générateur d’équipes !")


random.shuffle(joueurs) La liste des joueurs est mélangée
comme vous le feriez avec un jeu
de cartes
CHOIX DES ÉQUIPES

Choix des équipes


2 La liste des joueurs étant DIVISION DES LISTES
prête, il faut la diviser en deux
équipes puis leur affecter un En Python, pour fractionner ou récupérer des sous-ensembles de liste, vous
devez fournir deux arguments : l’index de début (position) et l’index qui suit
capitaine. Les équipes et les noms
le dernier élément de la nouvelle liste, ces index commençant à 0 (voir p. 91).
de leurs capitaines seront affichés Les joueurs[1:3], par exemple, correspondent aux joueurs d’index 1 à 2.
à l’écran lors de l’exécution du Le premier index est inclusif (il est inclus dans la nouvelle liste) et le second
programme. index est exclusif (il est inclus jusqu’à l’élément avant dans la nouvelle liste).
Si vous divisez la liste de la première à la dernière position, vous pouvez
laisser ces index vides. Par exemple, joueurs[:3] prendra les trois
premiers joueurs de la liste et joueurs[4:] prendra les joueurs
de l’index 4 jusqu’à la fin de la liste.

2.1 SÉLECTIONNEZ LA PREMIÈRE ÉQUIPE


Vous devez maintenant diviser la liste en deux parties Ajoutez le code suivant à la fin du fichier.
égales. Pour ce faire, prenez les éléments de la liste de la Vous obtiendrez une nouvelle liste avec la première
position 0 au dernier élément de la liste et divisez par deux. moitié des joueurs.

equipe1 = joueurs[:len(joueurs)//2] Cette nouvelle liste sera


affectée à la variable
equipe1

2.2 CHOISISSEZ LE CAPITAINE DE L’ÉQUIPE 1


Une fois que vous avez créé la première équipe, vous pour choisir un joueur au hasard dans equipe1. Saisissez ce
devez en choisir le capitaine. Pour que ce soit équitable, ce code à la fin du fichier. Le capitaine est sélectionné puis ajouté
choix doit être fait au hasard. Utilisez la fonction choice() à la chaîne de caractères à afficher.

Affiche le message
print("Capitaine de l’équipe 1 : " + random.choice(equipe1)) indiquant qui est le
capitaine de l’équipe

2.3 AFFICHEZ L’ÉQUIPE 1


Une fois le capitaine assigné, vous devez afficher
tous les joueurs de l’équipe 1 à l’écran. N’oubliez pas que
vous pouvez utiliser une boucle for (voir p. 96) pour
parcourir une liste. Saisissez le code suivant à la fin du fichier.

Affiche un message pour annoncer à l’utilisateur


que les joueurs de l’équipe 1 sont affichés

print("Équipe 1:")
for joueur in equipe1 :
print(joueur)

Cette boucle Affiche le nom


parcourt equipe1 du joueur actuel ENREGISTRER
PYTHON
Générateur d’équipes 110 111
2.4 TESTEZ LE PROGRAMME
C’est le moment de tester votre code.
Exécutez-le et observez le résultat dans la console
Bienvenue dans le générateur d’équipes !
Python. Les joueurs de l’équipe 1 sont-ils bien
affichés ? Le nombre de joueurs est-il correct ?
Capitaine de l’équipe 1 : Claire
Le capitaine a-t-il bien été sélectionné au hasard
parmi les joueurs de l’équipe 1 ? Exécutez le code Equipe 1 :
plusieurs fois pour vous assurer qu’il est aléatoire.
Si vous avez des erreurs, examinez attentivement Maria
votre code pour les repérer.
Jean
Guillaume
Alice
Claire
Jacques
Alexia
Roland
Yoann
Alain

C >>>

2.5 SÉLECTIONNEZ LA DEUXIÈME ÉQUIPE


Vous pouvez maintenant attribuer des joueurs Affecte la seconde moitié de la liste à la variable
à la deuxième équipe en répétant les étapes 2.1 à 2.3. equipe2. Les joueurs de cette partie de la liste
Tapez le code suivant à la fin du fichier. constitueront la deuxième équipe

equipe2 = joueurs[len(joueurs)//2 :]
print("\nCapitaine de l’équipe 2 : " + random.choice(equipe2)) \n affiche
le nom du
capitaine de
print("Equipe 2 :")
l’équipe 2
sur une
for joueur in equipe2 : nouvelle
ligne
print(joueur)

Cette boucle parcourt


equipe2
ENREGISTRER
CHOIX DES ÉQUIPES

2.6 TESTEZ LE PROGRAMME


Exécutez le code pour tester
à nouveau le programme. Assurez-vous
Bienvenue dans le générateur d’équipes !
qu’il fonctionne comme prévu pour les
deux équipes. Vous devriez voir s’afficher
Capitaine de l’équipe 1 : Marissa Le nom
du capitaine
la liste des joueurs des deux équipes ainsi
que les noms de leurs capitaines. Equipe 1 : sera affiché
avant la liste
Paul des joueurs

Claire
Jacques
Anne
David
Roland
Marissa
Grace
Alain
Maria

Capitaine de l’équipe 2 : Yoann


Equipe 2 :
Martin
Jean
Alice
Ada
Guillaume
Rose
Alexia
Yoann
Sonia
Thomas
>>>
PYTHON
Générateur d’équipes 112 113
3 SÉLECTION DE NOUVELLES ÉQUIPES
Vous pouvez utiliser une boucle while pour continuer
à sélectionner des équipes jusqu’à ce que vous en soyez satisfait. Ajoute la boucle qui Indentez ces lignes
Ajoutez une nouvelle ligne de code sous le message de bienvenue permet de sélectionner de code pour
et n’oubliez pas d’ajouter des retraits pour les lignes suivantes à nouveau les équipes les intégrer à la boucle
pour signifier que le code existant fait partie de la boucle while.

print("Bienvenue dans le générateur d’équipes ")


while True:
random.shuffle(joueurs)
equipe1 = joueurs[:len(joueurs)//2]
print("Capitaine de l’équipe 1 : "+random.choice(equipe1))
print("Equipe 1 :")
for joueur in equipe 1 :
print(joueur)
equipe2 = joueurs[:len(joueurs)//2:]
print("\n Capitaine de l’équipe 2 : "+random.choice(equipe2))
print("Equipe 2:")
for joueur in equipe2:
print(joueur)

3.1 REDISTRIBUER LES JOUEURS


Enfin, ajoutez le code suivant pour
demander aux utilisateurs s’ils souhaitent
changer les équipes et stockez la réponse Affiche un message pour
dans la variable reponse. Si l’utilisateur demander aux utilisateurs s’ils
désire changer les équipes, la boucle souhaitent changer les équipes
principale se relance et affiche la nouvelle
distribution.

reponse = input("Choisir de nouvelles équipes ? \


Saisissez o ou n: ")
if reponse == "n":
break

Sortie de la boucle principale


si la réponse est n
ENREGISTRER
CHOISIR DE NOUVELLES ÉQUIPES

3.2 EXÉCUTEZ LE CODE


Le programme est maintenant prêt. Testez-le une fois encore.
La liste des deux équipes avec les capitaines va s’afficher et un message
vous demande à la fin si vous souhaitez changer les équipes.

Bienvenue dans le générateur d’équipes !


Capitaine de l’équipe 1 : Rose
Equipe 1 :
Jean
ÉQUIPE 1
Ada
Yoann
Claire
Martin
Paul
Alice
Roland
Rose ÉQUIPE 2
Sonia

Capitaine de l’équipe 2 : Guillaume


Equipe 2 :
Jacques
Maria
Anne
Alain
ÉQUIPE 1 RECONSTITUÉE
David
Grace
Marissa
Alexia
Thomas
Guillaume
Choisir de nouvelles équipes ?
Saisissez o ou n : ÉQUIPE 2 RECONSTITUÉE
PYTHON
Générateur d’équipes 114 115

Trucs et astuces
Ajouter des joueurs JOUEURS SUPPLÉMENTAIRES
Le programme a une liste de 20 noms. Pour ajouter
d’autres joueurs au générateur d’équipe, il faut ajouter
d’autres noms à la liste. Le nombre total doit être pair,
afin que les équipes aient le même nombre de joueurs.

Plus d’équipes
Selon le sport, le nombre de joueurs par équipe diffère. Divise le nombre Attribue Attribue
Le code de ce projet gère deux équipes, mais si la liste de joueurs en trois la deuxième à la troisième
de joueurs est plus longue, vous pouvez avoir davantage parties égales partie de la liste équipe sa propre
d’équipes. Changez le code du programme afin de demander et attribue la première des joueurs liste de joueurs
à l’utilisateur combien de joueurs il souhaite dans chaque partie de la liste à equipe2 et son capitaine
équipe. Vous pouvez ensuite diviser le nombre de joueurs des joueurs à equipe1
en un nombre d’équipes déterminé. Si une équipe manque
de joueurs, assurez-vous d’en informer l’utilisateur.

while True:
random.shuffle(joueurs)
equipe1 = joueurs[:len(joueurs)//3]
print("Capitaine de l’équipe 1 : " + random.choice(equipe1))
print("Equipe 1:")
for joueur in equipe1:
print(joueur)
equipe2 = joueurs[len(joueurs)//3:(len(joueurs)//3)*2]
print("\nCapitaine de l’équipe 2 : " + random.choice(equipe2))
print("Equipe 2:")
for joueur in equipe2:
print(joueur)
equipe3 = joueurs[(len(joueurs)//3)*2:]
print("\nCapitaine de l’équipe 3 : " + random.choice(equipe3))
print("Equipe 3:")
for joueur in equipe3:
print(joueur)
TRUCS ET ASTUCES

Équipe ou tournoi
À ce stade, le programme est conçu pour un sport le code s’exécutera comme testé
d’équipe. Si vous souhaitez l’adapter pour des sports précédemment. Si vous choisissez
Affiche un message pour
individuels, modifiez le code comme indiqué ci-dessous. individuel, le code regroupera
demander à l’utilisateur
Il demandera à l’utilisateur de choisir entre un sport les joueurs par paires aléatoires
s’il s’agit d’un sport
individuel ou d’équipe. Si vous choisissez l’équipe, pour jouer les uns contre les autres.
d’équipe ou individuel

print("Bienvenue dans le générateur d’équipes/joueurs !")


while True:
random.shuffle(joueurs)
reponse = input("Le sport est-il individuel ou en équipes ? \
\nSaisissez équipe ou individuel : ")
if reponse == "équipe":
equipe1 = joueurs[:len(joueurs)//2]

Vérifie la réponse
for joueur in equipe2: de l’utilisateur

print(joueur) La plage prendra la valeur 0-19


et augmentera de 2 à chaque fois.
else: C’est ainsi que nous parcourons
la liste deux joueurs à la fois pour Affiche le nom
for i in range(0, 20, 2): les mettre par paires des joueurs qui
joueront les uns
print(joueurs[i] + " vs " + joueurs[i+1]) contre les autres

Qui commence ?
Que le sport soit d’équipe print(joueurs[i] + " vs " + joueurs[i+1])
ou individuel, il faut
déterminer qui jouera en premier = random.randrange(i, i+2)
premier. Ajoutez ce code
au programme précédent
pour effectuer ce choix
print(joueurs[premier] + " commence")
dans le cas d’un sport
individuel.
Bienvenue dans le générateur d’équipes/
joueurs !
Le sport est-il individuel ou en équipes ?
Saisissez équipe ou individuel : individuel
Yoann vs Paul
La console Python affiche
YOANN PAUL
Yoann commence qui commence
PYTHON
Générateur d’équipes 116 117

Remplacer par une liste


de numéros import random
Le programme actuel n’est
une bonne solution que si
vous jouez toujours avec les
mêmes personnes. Si ce n’est joueurs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
pas le cas, vous pouvez
Modifiez le
remplacer le nom des 11, 12, 13, 14, 15, 16, 17, 18, code pour
joueurs par des chiffres pour
remplacer
rendre le programme plus 19, 20] les noms
général. N’oubliez pas
par des
d’attribuer les numéros aux
chiffres
joueurs avant de l’exécuter.
print("Bienvenue dans le générateur d’équipes !")

Nombre de joueurs
Plutôt que de changer la taille de la liste quand le nombre de joueurs
varie, vous pouvez modifier le code pour demander à l’utilisateur le
nombre total de joueurs. Cela créera la liste des numéros, ainsi que
deux équipes égales. Modifiez le programme comme indiqué ici.

import random
joueurs = []
print("Bienvenue dans le générateur d’équipes !")
nombre_de_joueurs = int(input("Combien y a-t-il \
Affiche un message
de joueurs ? ")) pour que l’utilisateur saisisse
le nombre de joueurs
for i in range(1, nombre_de_joueurs + 1):
players.append(i)

equipe1 = joueurs[:len(joueurs)//2]
print("Capitaine de l’équipe 1 : " + str(random.choice(team1)))
print("Equipe 1:") Met à jour le code pour equipe1

equipe2 = joueurs[len(joueuers)//2:]
print("\nCapitaine de l’équipe 2 : " + str(random.choice(team2)))
print("Equipe 2:") Met à jour le code pour equipe2
Débogage
Le processus de recherche et de correction des erreurs dans un programme est
appelé débogage. Les erreurs peuvent aller de simples erreurs d’orthographe
à des problèmes de logique du code. Python dispose de divers outils qui mettent
en évidence et aident à corriger ces erreurs.

Erreurs de syntaxe
La syntaxe régit la disposition et l’orthographe
temperature = 25
des mots et des symboles qui composent le code.
Les erreurs de syntaxe sont les erreurs les plus
courantes et les plus faciles à corriger. Elles sont
l’équivalent des erreurs d’orthographe et if temperature > 20: Cette ligne
de code doit être
de grammaire détectées par les programmes print("Il fait bon") indentée
de traitement de texte. IDLE affiche ces erreurs
de syntaxe dans une fenêtre contextuelle.

Erreurs d’indentation expected an indented block Ce message


L’indentation consiste à positionner certaines parties du code indique une erreur
en retrait afin de rendre un programme plus lisible. Le corps d’indentation
de toute fonction, boucle ou instruction conditionnelle doit dans le code
être placé quatre espaces à droite de la ligne l’introduisant.
L’indentation du code est obligatoire avec Python.
OK

Erreurs d’exécution (runtime errors)


Ces erreurs affectent les fonctionnalités fondamentales
d’un programme. Elles peuvent se produire en cas d’accès à un fichier
inexistant, d’utilisation d’un identifiant qui n’a pas été défini
ou d’exécution d’une opération sur des types de valeurs
incompatibles. Ces erreurs sont détectées par l’interpréteur Python
lors de l’exécution du code. Il affiche alors un « traceback »
(message d’erreur) dans la console.
Erreurs de type
Ces erreurs se produisent lorsqu’une fonction ou
un opérateur est utilisé avec le mauvais type de valeur.
L’opérateur « + » peut concaténer deux chaînes ou ajouter
deux nombres mais il ne peut pas concaténer une chaîne
et un nombre, ce qui cause l’erreur dans cet exemple.

>>> "temperature" + 5
Traceback (most recent call last):
pyshell fait
File "<pyshell#3", line 1, in <module> référence à la console

"temperature" + 5
TypeError: can only concatenate str (not "int") to str
PYTHON
Débogage 118 119

CHECK MODULE
La commande « Check Module » d’IDLE, disponible
Run Options Window
dans le menu Run, vérifie les erreurs de syntaxe
Sélectionner
d’un programme. Si elle en trouve, elle affiche Python Shell cette commande
un message qui permet aux programmeurs Check Module dans le menu Run
de les éliminer avant d’exécuter le programme. Run Module

Détails sur
l’emplacement Emplacement de
et la nature de l’erreur l’erreur dans le fichier

Erreurs de nom
Une faute d’orthographe dans le nom >>> pront ("Hello world")
d’une variable ou d’une fonction peut
provoquer une erreur de nom, ainsi que Traceback (most recent call last):
l’utilisation d’une variable avant qu’une
valeur ne lui soit affectée, ou l’appel d’une File "<pyshell#0>", line 1, in <module>
fonction avant qu’elle ne soit définie.
La commande à
Dans cet exemple, l’erreur de frappe n’est pront("Hello world") l’origine de l’erreur
détectée qu’au moment de l’exécution.
NameError: name 'pront' is not defined

Erreurs de logique Résultats infinis


Dans cet exemple, une boucle compteur = 1 La variable
Les erreurs de logique sont les plus affiche le mot « Comptage » à l’infini. compteur est
délicates à repérer. Le programme La valeur de la variable n’étant pas définie à 1
s’exécute, mais il produit un mise à jour, la condition de boucle
résultat inattendu. Ces erreurs ont
reste toujours vraie. while compteur < 5:
de multiples causes, notamment print("Comptage")
l’utilisation d’une variable
incorrecte dans une expression.
Cette instruction ne print("C’est fini")
sera jamais exécutée
MESSAGES D’ERREUR

Messages d’erreur MESSAGES D’ERREUR


C’est l’outil le plus évident pour Message d’erreur Signification
le débogage, mais les messages EOL found while scanning Il manque les guillemets à la fin
d’erreur de Python ne sont pas string literal d’une chaîne sur cette ligne
d’une limpidité à toute épreuve.
unsupported operand type(s) Les valeurs de chaque côté de l’opérateur +
Ce tableau répertorie les messages for + : 'int' and 'str' doivent être du même type
d’erreur les plus courants ainsi que
leur signification. Les programmeurs Le corps d’une boucle ou
Expected an indented block
d’une condition n’est pas indenté
se familiarisent assez rapidement
avec ces erreurs et leurs solutions.
Unexpected indent Cette ligne est trop indentée

Unexpected EOF Crochet manquant juste


while parsing avant la fin du programme
Généralement causé par une faute
Name [name of variable or
d’orthographe dans le nom de la variable
function] is not defined
ou de la fonction

Coloration du texte les chaînes de caractères sont en vert (voir p. 86). Si une
Comme la plupart des autres IDE, IDLE colore le partie du code n’est pas affiché dans la bonne couleur,
texte d’un programme Python. Cela facilite la c’est peut-être le signe d’une erreur de syntaxe. Un
détection des erreurs. Des mots clés tels que for, guillemet qui manque à la fin d’une chaîne de caractères
while ou if, par exemple, sont en orange alors que entraîne l’affichage de plusieurs lignes de code en vert.

Il manque un guillemet
au début

Mauvaise couleur
Dans cet exemple le code ne sera pas Le mot clé while answer = input(Choisissez un nombre")
coloré correctement à cause des a été mal
guillemets manquants et de la faute orthographié whle answer != 7:
d’orthographe du mot-clé while.
Faute d’orthographe pritn(Ce n’est pas le bon nombre")
dans le mot-clé
et guillemet manquant answer = input("Choisissez un nombre")
PYTHON
Débogage 120 121
Débogueur
VÉRIFIEZ L’ERREUR IDLE contient également un outil débogueur à partir
duquel les programmeurs exécutent pas à pas leur
Lors du débogage, il arrive souvent que programme, une ligne à la fois. Cet outil montre aussi
l’erreur se situe en amont de l’endroit
le contenu des variables à chaque étape du programme.
indiqué par le message d’erreur. Il est
donc judicieux de vérifier l’erreur dans Le débogueur peut être sélectionné dans le menu Debug
le code qui précède la ligne indiquée, de la console. Le processus de débogage sera alors
ou sur la ligne au-dessus. déclenché à la prochaine exécution de programme.
Sélectionnez-le de nouveau pour le désactiver.
print(hello " + "world")
Cliquez dans la
Debug Options Window
console pour faire
Produit une errreur Go to File/Line apparaître le menu
« Invalid syntax » à cause Debugger Debug en haut
d’un guillemet manquant de l’écran
Stack Viewer
Auto-open Stack Viewer

Le niveau de détail Les informations


Checklist de débogage à examiner à afficher
Voici une liste de choses à surveiller
lorsqu’une erreur apparaît mais que sa
cause n’est pas immédiatement identifiée.
Cela ne résoudra peut-être pas tous Debug Control
les problèmes, mais de nombreuses erreurs
Go Step Over Out Quit Stack Source
peuvent être facilement corrigées. Locals Globals

Locals
_annotations_ {}
_builtins_ <module 'builtins' (built-in)>
_doc_ None
Tout est correctement orthographié _fi le_ '/Users/code/debug4.py'
_loader_ <class '_frozen_improtlib.Builtinimporter'>
Les lettres majuscules et minuscules
_name_ '_main_'
ne sont pas utilisées de manière
interchangeable _package_ None
_spec_ None
Les chaînes de caractères sont bien
encadrées de guillemets count 1
Les guillemets vont par deux
Le code a été enregistré depuis la
dernière modification
Aucune lettre n’est confondue avec
des chiffres, comme O et 0, ou I et 1
Il n’y a pas d’espaces inutiles au début
d’une ligne
Les variables et les fonctions sont
Débogueur de IDLE
déclarées avant d’être utilisées
Lorsqu’un programme est exécuté, le débogueur
affiche des informations à son sujet, notamment
les valeurs actuelles des variables. En cliquant sur
l’option « step », il affiche le code habituellement
masqué qui est exécuté en arrière-plan.
Planificateur de projet
Les outils de gestion du temps sont très pratiques. Il existe plusieurs
applications qui aident à suivre la progression des tâches et activités
quotidiennes. Ce projet utilisera les tuples, ensembles et modules
graphiques de Python pour créer un planificateur dédié au développement
d’une petite application de jeu.

Comment ça marche
Ce planificateur crée un calendrier pour aider les utilisateurs à planifier
Diagramme de Gantt
leur travail. Le programme affiche une fenêtre à partir de laquelle Un diagramme de Gantt est un diagramme
l’utilisateur choisit un fichier de projet. Il lit ensuite une liste de tâches à barres utilisé pour illustrer le calendrier
dans le fichier et les trie en ordre chronologique, en fonction de certains d’un projet. Les tâches à effectuer sont
répertoriées sur l’axe des y et les périodes
prérequis. Les données résultantes sont converties en un graphique qui sur l’axe des x. Les barres horizontales
s’affiche au début et à la fin de chaque tâche. du graphique matérialisent la durée
de chaque activité.

Répartition hebdomadaire
des tâches

Planificateur de projet

Ouvrir un projet…
La largeur de cette barre
représente la durée d’une activité
Semaine 1 Semaine 2 Semaine 3 Semaine 4 Semaine 5

Conception du jeu

Ébauche des images

Décomposition de la fonctionnalité
en étapes
Mise en œuvre des fonctions
de base
Tests et révision

Amélioration des images

Mise en œuvre des fonctions


avancées

Tests et révision

Publication sur l’App Store


PYTHON
Planificateur de projet 122 123
VOUS ALLEZ APPRENDRE COMMENT L’UTILISER
❯❯Comment récupérer les données Durée : Presque tous les programmes ont besoin de
d’un fichier 1 heure 30 lire des données à partir de fichiers et de les
❯❯Comment utiliser les ensembles traiter, même ceux qui ne semblent pas utiliser
Lignes de code : 76
ou sets Python des documents, comme les jeux. Ouvrir des
Niveau de difficulté fenêtres et afficher des boutons et des éléments
❯❯Comment utiliser les tuples nommés
personnalisés font partie des opérations
❯❯Comment créer une application de base de toute application de bureau.
Tk UI simple
❯❯Comment dessiner avec Tk Canvas

Conception du programme
DÉBUT
Ce projet s’appuie sur une boucle continue
pour vérifier si les utilisateurs ont appuyé
sur le bouton Ouvrir un projet. Dans ce cas,
le programme ouvre un fichier CSV dont il
lit et trie le contenu avant de l’afficher sous
Afficher la fenêtre
forme de graphique. Ce graphique affiche
la quantité de travail à effectuer dans
le temps imparti.

OUI
Afficher la boîte de dialogue
Bouton Ouvrir
d’ouverture de fichier
un projet… enfoncé ?
à l’utilisateur

Lire le fichier
CSV des tâches

NON

Trier les tâches


par jour de début

NON
Affichage
du diagramme de Gantt Fenêtre fermée ?

Fichier CSV
Les tâches pour ce projet sont stockées dans OUI
un fichier de valeurs séparées par des virgules
nommé fichier CSV. Ce type de fichier qui peut
être lu et modifié par des tableurs convient FIN
parfaitement pour des données tabulaires.
CRÉATION ET LECTURE DU FICHIER CSV

Création et lecture du fichier CSV


1 Pour afficher le planificateur dans votre application,
vous devez créer un fichier CSV qui répertorie toutes les
tâches à effectuer. Il faudra ensuite écrire le code Python
pour lire ce fichier CSV.

6 1
4 5 7
2

TÂCHES FICHIER CSV

1.1 CRÉEZ UN NOUVEAU FICHIER


La première étape consiste à créer File Edit Shell
le fichier de code Python. Créez un dossier
appelé « PlanificateurProjet » puis ouvrez New File N Sélectionnez cette
IDLE et sélectionnez le menu File/New File. Open... O option pour créer
Choisissez Save As dans le même menu Open Module... un nouveau fichier
et enregistrez le fichier « planificateur.py » Recent Files
dans le dossier PlanificateurProjet. Module Browser B

1.2 CRÉEZ UN FICHIER CSV


La bibliothèque csv de Python simplifie la lecture et
l’écriture des fichiers CSV. Ajoutez une ligne de code en haut de votre
import csv Tapez cette ligne dans le
fichier planificateur.py
fichier Python pour lire le nouveau fichier CSV. Cependant, avant de
pouvoir lire ce fichier, vous devez le créer. Comme il s’agit d’un simple
fichier texte, vous pouvez le faire dans IDLE. Sélectionnez New File
dans le menu File, puis Save as pour enregistrer le fichier dans le
dossier PlanificateurProjet. Nommez ce fichier « projet.csv ». Ne tenez
pas compte du message d’avertissement que vous allez certainement
recevoir puisque csv n’est pas une extension standard de Python.

PLANIFICATEUR.PY PROJET.CSV
You have used the extension “.csv” at the end
of the name. The standard extension is “.py”.
You can choose to use the standard extension instead.

Use .py Cancel Use .csv Cliquez ici pour


continuer avec
PLANIFICATEUR
l’extension .csv
PROJET
MESSAGE D’AVERTISSEMENT
PYTHON
Planificateur de projet 124 125
1.3 ÉCRIRE UN PROJET SIMPLE
Vous pouvez maintenant rédiger un plan simple pour au début ou à la fin du fichier. Chaque ligne représentera une
un projet de développement d’une application de jeu. Dans le ligne du tableau et chaque élément de ligne représentera une
fichier CSV, saisissez les lignes suivantes représentant les tâches valeur de colonne. La deuxième ligne, par exemple, contient
à effectuer pour créer le jeu. Il ne doit pas y avoir de ligne vide quatre valeurs de colonne. Enregistrez et fermez le fichier.
La première valeur
de colonne
représente La deuxième valeur
le numéro correspond au titre La troisième valeur indique le nombre de jours
de tâche de la tâche estimé pour la tâche
Les valeurs de chaque
colonne sont séparées
1,Conception du jeu,2, par des virgules

2,Ebauche des images,1,1 Chaque ligne


représente une ligne
3,Decomposition de la fonctionnalite en etapes,2,1 de tableau

4,Mise en oeuvre des fonctions de base,5,2 3


La quatrième colonne
5,Tests et revision,2,4 contient les conditions
préalables sous forme
de numéros de tâche
6,Amelioration des images,3,5 séparés par des espaces
7,Mise en oeuvre des fonctions avancees,7,5
8,Tests et revision,4,6 7 Cette ligne correspond à la tâche
8 Tests et révision. Elle devrait
9,Publier sur l’App Store,1,8 durer 4 jours et les tâches 6 et 7
doivent être terminées avant
de pouvoir la commencer

TUPLE PYTHON
Un tuple est une structure de données comme une
liste, mais sa longueur ne peut pas être modifiée une >>> nombres = (1, 2, 3, 4, 5)
fois qu’il a été créé et ses éléments ne peuvent pas
être mis à jour. Les listes sont principalement utilisées >>> print(nombres[3])
nombres est
pour stocker des valeurs du même type, comme une un tuple avec
liste de nombres représentant la taille d’un groupe 4 cinq valeurs
de personnes. Les tuples, en revanche, contiennent
des valeurs en relation, mais de types différents, La valeur à la position Les numéros d’index
tels que le nom, l’âge et la taille d’une personne. d’index 3 dans le tuple sont entre crochets

>>> nombres[0] = 4 On tente de changer la valeur


à la position d’index 0
dans le tuple
Traceback (most recent call last):
Renvoie une erreur car les valeurs
File "<pyshell>", line 1, in <module> à l’intérieur d’un tuple ne peuvent
pas être mises à jour
numbers[0] = 4
TypeError: 'tuple' object does not support item assignment
CRÉATION ET LECTURE DU FICHIER CSV

1.4 LECTURE DES DONNÉES DU FICHIER


La bibliothèque csv de Python facilite la lecture des numéro de tâche comme clé (voir p. 148). Cela vous
données du fichier CSV. Une fois les données lues, les valeurs permettra de rechercher rapidement une tâche à partir
sont stockées dans un tuple Python qui est ensuite stocké dans de son numéro. Ajoutez ce code à votre fichier .py après
un « dictionnaire » (une structure de données, où chaque l’instruction import. Il ouvre le fichier CSV, lit les lignes
élément comporte deux parties – une clé et une valeur) avec le de données et place les résultats dans un dictionnaire.

def lire_taches(nomfichier): Le nom du fichier est fourni comme


argument de cette fonction
Affecte les tâches à
taches = {} un dictionnaire vide
Ouvre le fichier en lecture à l’aide
for rang in csv.reader(open(nomfichier)): de l’objet reader de la
bibliothèque csv qui reconnaît
numero = rang[0] les données CSV, puis on parcourt
chaque ligne avec une boucle for
titre = rang[1]
duree = rang[2]
Extrait les quatre valeurs
prerequis = rang[3] de la ligne à l’aide de
leur numéro d’index
taches[numero] = (titre, duree, \ (à partir de 0)

prerequis)
return taches

Les valeurs sont stockées sous


La fonction renvoie
forme de tuple dans le dictionnaire
le dictionnaire complet ENREGISTRER
par numéro de tâche

1.5 TESTEZ LE CODE


contenant les informations du fichier. Cependant,
Testez maintenant le code en cliquant sur Run Module
dans le menu Run et passez à la console. Tapez le code toutes les valeurs seront lues en tant que chaînes de caractères
ci-dessous pour appeler la fonction avec le nom du fichier que Python car l’objet csv.reader ne sait pas comment interpréter
vous avez créé à l’étape 1.2. La fonction renverra un dictionnaire les données qu’il lit dans un fichier.
Saisissez cette
ligne derrière Lit les données
l’invite de ce fichier CSV

>>> lire_taches("projet.csv")
{'1': ('Conception du jeu', '2', ''), '2': ('Ebauche des
Les nombres sont
images', '1', '1'), '3': ('Decomposition de la fonctionnalite lus comme
des chaînes
en etapes', '2', '1'), '4': ('Mise en oeuvre des fonctions de de caractères

base', '5', '2 3'), '5': ('Tests et revision', '2', '4'), '6':
('Amelioration des images', '3', '5'), '7': ('Mise en oeuvre
des fonctions avancees', '7', '5'), '8': ('Tests et revision',
'4', '6 7'), '9': ('Publier sur l’App Store', '1', '8')}
PYTHON
Planificateur de projet 126 127
1.6 CONVERTIR VERS D’AUTRES TYPES DE DONNÉES
Les valeurs « numéro de tâche » et « durée de la tâche » sont ci-dessous. Le numéro de tâche sera toujours un nombre
des nombres dans le fichier CSV mais elles sont lues comme des entier, mais la durée de la tâche sera une valeur flottante
chaînes de caractères. Il faut les convertir en valeurs numériques (comme 2,5). Enregistrez le fichier, puis exécutez à
Python. Modifiez la fonction lire_taches() comme indiqué nouveau le module pour le tester.

def lire_taches(nomfichier):
taches = {}
for rang in csv.reader(open(nomfichier)):
numero = int(rang[0]) Convertit le numéro de tâche
de chaîne de caractères
titre = rang[1] en nombre entier

duree = float(rang[2]) Convertit la durée de la tâche


de chaîne de caractères
prerequis = rang[3] en nombre à virgule flottante

ENREGISTRER

>>> lire_taches("projet.csv")
{1: ('Conception du jeu', 2.0, ''), 2: ('Ebauche des images',
Les numéros de
1.0, '1'), 3: ('Decomposition de la fonctionnalite en etapes', tâche sont lus
comme des
2.0, '1'), 4: ('Mise en oeuvre des fonctions de base', 5.0, '2 valeurs entières

3'), 5: ('Tests et revision', 2.0, '4'), 6: ('Amelioration des


images', 3.0, '5'), 7: ('Mise en oeuvre des fonctions
La durée de
avancees', 7.0, '5'), 8: ('Tests et revision', 4.0, '6 7'), 9: la tâche est lue
comme une
('Publier sur l’App Store', 1.0, '8')} valeur à virgule
flottante

Conversion des types de données


Dans la bibliothèque csv de Python, l’objet csv.
reader lit chaque valeur sous forme de chaîne
de caractères par défaut. Vous devez redéfinir
les valeurs correspondant à des nombres
pour vous assurer qu’elles soient correctement
interprétées. MISE À JOUR
DU CODE

"2" "TEST" 2.0 "TEST"


CRÉATION ET LECTURE DU FICHIER CSV

LES ENSEMBLES PYTHON


Un ensemble Python (set) est un autre type de données
similaire à une liste, mais il ne peut contenir que des Ajoute le nombre
4 à l’ensemble
valeurs uniques. Similaire aux clés d’un dictionnaire,
sa syntaxe d’écriture est similaire à celle de ce dernier.
Un ensemble peut être affecté à une variable >>> nombres.add(4)
de différentes façons. Testez les exemples suivants >>> nombres
dans la console.
Tout comme un dictionnaire,
{1, 2, 3, 4}
les ensembles Python sont
codés entre accolades
>>> nombres.add(3)
>>> nombres Le nombre 3 est déjà dans
>>> nombres = {1, 2, 3} l’ensemble, donc le contenu
{1, 2, 3, 4} de ce dernier ne change pas
Définir un ensemble
La variable nombres est définie comme un ensemble contenant Ajouter des valeurs dans un ensemble
les nombres 1, 2, et 3. Vous ne devez pas créer d’ensemble vide Vous ajoutez des valeurs à un ensemble avec la méthode
en codant nombres = {} car Python considérera qu’il s’agit add. Puisqu’un ensemble ne contient que des valeurs
d’un dictionnaire vide. Pour créer un ensemble vide, appelez uniques, l’ajout d’une valeur déjà présente sera sans effet.
plutôt la fonction set().

Supprime la valeur 3 >>> nombres.remove(3)


de l’ensemble
>>> nombres
Supprimer des valeurs d’un ensemble
De même, vous supprimez des éléments {1, 2, 4}
d’un ensemble à l’aide de la méthode
remove.

1.7 TRANSFORMEZ EN ENSEMBLES DE NOMBRES


Jusqu’à présent, vous avez converti le numéro et la durée SET()
de la tâche en entiers et flottants, mais les prérequis sont toujours
stockés sous forme de chaînes de caractères (« 1 » ou « 2 3 »). Pour MAP()
qu’ils soient vus comme un ensemble de nombres, commencez INT
par fractionner la chaîne en valeurs individuelles puis utilisez
les fonctions int() et map() comme indiqué ici pour obtenir .SPLIT()
votre ensemble de nombres.
Les éléments séparés par
des espaces seront divisés
>>> valeur = "2 3" en valeurs distinctes VALEUR

>>> valeur.split() La méthode split


transforme une chaîne de
['2', '3'] caractères en liste de chaînes

map() appelle la fonction int() pour chaque


chaîne de caractères de la liste

>>> set(map(int, valeur.split())) Combiner des fonctions


int() convertit une chaîne Cette illustration montre comment combiner des fonctions
{2, 3} de caractères en entier simples pour créer une logique complexe. La valeur chaîne de
caractères d’origine est fractionnée. La fonction int() est ensuite
Convertit les valeurs renvoyées appelée sur chaque élément à l’aide de map(). La fonction set()
par map() en ensemble transforme enfin le résultat en un ensemble Python.
PYTHON
Planificateur de projet 128 129
1.8 CONVERTISSEZ LES DONNÉES
Incorporez maintenant le code de l’étape précédente Convertit les valeurs
dans la fonction lire_taches() comme indiqué ci-dessous. chaînes de caractères
Exécutez à nouveau le module et testez-le dans la console. en ensembles d’entiers

import csv
def lire_taches(nom fichier) :
taches = {}
for rang in csv.reader(open(nomfichiers)):
numero = int(rang[0])
titre = rang[1]
duree = float(rang[2])
prerequis = set(map(int, rang[3].split()))
taches[numero] = (titre, duree, prerequis)
return taches

ENREGISTRER

>>> lire_taches("projet.csv")
{1 : ('Conception du jeu', 2.0, set()), 2 :
('Ebauche des images', 1.0, {1}), 3 :
('Decomposition de la fonctionnalite en etapes',
2.0, {1}), 4 : ('Mise en oeuvre des fonctions de
base', 5.0, {2, 3}), 5 : ('Tests et revision', Les valeurs numériques sont
maintenant converties
2.0, {4}), 6 : ('Amelioration des images', 3.0, dans le bon type de données

{5}), 7 : ('Mise en oeuvre des fonctions avancees',


7.0, {5}), 8 : ('Tests et revision', 4.0, {6, 7}),
9 : ('Publier sur l’App Store', 1.0, {8})}

CONCEPTION DESSIN TEST


CRÉATION ET LECTURE DU FICHIER CSV

1.9 TESTEZ LE PROGRAMME


Les données sont maintenant prêtes et vous pouvez lancer quelques
actions pour les tester. Exécutez à nouveau le module puis saisissez les lignes
de code ci-dessous dans la console. Vous allez stocker le dictionnaire obtenu
dans une variable temporaire afin qu’il puisse être manipulé.

Attribue les données à la


>>> taches = lire_taches("projet.csv") variable temporaire taches

Extrait les données


d’une tâche spécifique
à partir du numéro de tâche
>>> taches[3] utilisé comme index

('Decomposition de la fonctionnalite en etapes', 2.0, {1}) Les données sont


renvoyées sous la forme
d’un tuple de trois valeurs
titre est en position duree est en position prerequis est en avec des positions d’index
d’index 0 d’index 1 position d’index 2 spécifiques

Extrait la durée de cette tâche en


>>> taches[3][1] indexant à nouveau avec la valeur 1

2.0 Renvoie la valeur (duree) en position


d’index [1] pour la tâche numéro [3]

1.10 UTILISEZ DES TUPLES NOMMÉS


L’affichage des tâches à partir de leur numéro n’est valeurs avec un nom plutôt qu’une position.
pas le moyen idéal pour les extraire. Il serait préférable de Ajoutez ce code en haut de votre fichier pour créer
pouvoir les désigner par leur titre ou leur durée. Grâce aux un type tuple nommé et le stocker dans une variable.
tuples nommés de Python, vous êtes en mesure d’extraire les

import csv
Importe la fonction namedtuple()
from collections import namedtuple du module collections

Tache = namedtuple("Tache", ["titre", "duree", "prerequis"])


def lire_taches(nomfichier):
Définit un tuple Les noms sont donnés
nommé appelé sous forme d’une liste
Tache de chaînes
de caractères

PRÉREQUIS

TÂCHE
TUPLE
NOMMÉ

DURÉE TITRE
PYTHON
Planificateur de projet 130 131
1.11 APPELEZ LE TYPE TUPLE NOMMÉ
Le type tuple nommé créé à l’étape précédente est stocké dans la variable Tache.
Vous pouvez créer de nouvelles valeurs de ce type en appelant Tache comme une
fonction. Modifiez la fonction lire_taches() pour qu’elle appelle Tache plutôt que
de créer d’autres tuples comme le premier. Ensuite, exécutez le module et testez le code Le tuple nommé Tache
dans la console. Affichez d’abord toutes les valeurs d’un tuple (Sortie 1) puis essayez est stocké dans
d’extraire une de ces valeurs en utilisant son nom (Sortie 2). le dictionnaire taches

def lire_taches(nomfichier):
taches = {}
for rang in csv.reader(open(nomfichier)):
numero = int(rang[0])
titre = rang[1]
duree = float(rang[2])
prerequis = set(map(int, rang[3].split()))
taches[numero] = Tache(titre, duree, prerequis)
return taches
ENREGISTRER

>>> taches = lire_taches("projet.csv")


>>> taches[3]
Toutes les valeurs
Tache(titre="Decomposition de la fonctionnalite du tuple nommé
sont affichées
en etapes", duree=2.0, prerequis={1})

SORTIE 1

>>> taches[1].titre Extrait le titre


de la tâche [1]
"Conception du jeu" par son nom

>>> taches[3].duree Extrait la durée


de la tâche [3]
2.0 par son nom

>>> taches[4].prerequis
{2, 3}

SORTIE 2
Extrait les prérequis
de la tâche [4]
par  son nom
ORDONNEZ LES TÂCHES

Ordonnez les tâches


2 Maintenant que les tâches
DÉBUT

ont été lues et converties dans


un format utile, vous devez vous
demander comment les ordonner
et déterminer quand chacune Marquer toutes
d’elles peut commencer après le les tâches comme
incomplètes
démarrage du projet. Pour ce faire,
vous allez créer une fonction qui
calcule le point de départ d’une
tâche en fonction de l’état de
ses prérequis.

NON
Reste-t-il des tâches
incomplètes ? FIN

OUI

Rechercher la
première/prochaine
tâche incomplète

Les conditions
NON préalables de la
tâche sont-elles
toutes remplies ?

OUI

Définir le jour de début de la tâche


avec le dernier jour d’achèvement
(jour de début+durée) des tâches
préalables Organigramme de la logique
de classement des tâches
Une tâche ne peut pas démarrer tant
que ses tâches préalables ne sont pas
terminées. Le programme boucle sur
toutes les tâches qui doivent encore être
terminées, en choisit une incomplète,
Marquer la tâche puis calcule le moment où cette tâche
comme terminée peut commencer en calculant les points
de départ et les durées de chacune
de ses tâches préalables.
PYTHON
Planificateur de projet 132 133
2.1 AJOUTEZ LA LOGIQUE POUR LE CLASSEMENT
Vous pouvez maintenant ajouter la logique pour numéro de tâche à un jour de début, exprimé en nombre
ordonner les tâches. Ajoutez la fonction suivante à la fin de jours à compter du début de l’ensemble du projet. Ainsi,
du fichier. Elle renverra un dictionnaire qui associera chaque la ou les premières tâches commenceront au jour 0.

return taches
def ordre_taches(taches) :
incomplet = set(taches) On commence avec toutes On boucle sur les numéros
les tâches incomplètes de tâches incomplètes tant
qu’il en reste
complet = set() et sans jours de début

jours_debut = {}
Récupère la tâche
while incomplet : et vérifie si ses prérequis
Calcule le
ont été remplis
début de cette
for num_tache in incomplet : tâche en
fonction des
tache = taches[num_tache] jours de fin de
ses prérequis
if tache.prerequis.issubset(complet) :
jour_debut_plustot = 0
for num_prereq in tache.prerequis :
jour_fin_prerequis = jours_debut[num_prereq] + \
taches[num_prereq].duree
if jour_fin_prerequis > jour_debut_plustot :
jour_debut_plustot = jour_fin_prerequis
jours_debut[num_tache] = jour_debut_plustot
Sortie de la boucle
for. La boucle sera incomplet.remove(num_tache) Stocke la date
relancée s’il reste des de début et
tâches incomplètes enregistre cette
complet.add(num_tache)
tâche comme
terminée
break
Renvoie le
return jours_debut dictionnaire créé

MÉTHODE ISSUBSET
La méthode issubset indique si un ensemble est immédiatement. La valeur jour_debut_plustot
contenu dans un autre. Un ensemble vide est un d’une tâche est définie à 0 avant l’examen des
sous-ensemble de tout ensemble, y compris un autre conditions préalables. S’il n’y en a pas, la tâche
ensemble vide. Cela signifie que tache.prerequis. débutera au jour 0. Une fois cette tâche ajoutée
issubset(complet) sera vrai pour une tâche sans dans l’ensemble complet, les tâches qui en
condition préalable et elle commencera dépendent peuvent commencer.
ORDONNEZ LES TÂCHES

2.2 TESTEZ LE CODE


Enregistrez le code et exécutez le module pour tester la fonction
ordre_taches(). Vous constaterez que la tâche 1 peut commencer
immédiatement et que la tâche 9 est la dernière à démarrer, 22 jours
après le début du projet. Les tâches 2 et 3 commenceront en même temps, Ces tâches démarrent
de même que les tâches 6 et 7. On suppose que l’utilisateur sera en mesure en même temps car elles ont
d’effectuer les deux tâches en même temps. les mêmes prérequis

>>> taches = lire_taches("projet.csv")


>>> ordre_taches(taches)
{1: 0, 2: 2.0, 3: 2.0, 4: 4.0, 5: 9.0, 6: 11.0, 7: 11.0,
8: 18.0, 9: 22.0}

Affichage du graphique
3 Maintenant que vous avez lu le fichier
CSV et ordonné les tâches qu’il contient, il est
temps d’afficher le graphique. Python dispose
de Tk, une boîte à outils multiplateforme intégrée
pour les applications graphiques. Vous l’utiliserez
pour ouvrir une fenêtre et dessiner à l’intérieur. Semaine Semaine Semaine
1 2 3

Conception
Publier sur du jeu
l’App Store

Décomposition de la Ébauche
fonctionnalité en étapes des images
Amélioration
Tests et révision
des images

3.1 IMPORTEZ LA BOÎTE À OUTILS


Commencez par importer Tk dans votre
programme. Elle se trouve dans la bibliothèque standard
import csv
de Python tkinter – abréviation de Tk Interface. Ajoutez ce
code en haut du fichier .py. Par convention, les instructions
import tkinter
d’importation sont classées par ordre alphabétique en haut
du fichier, mais ce n’est pas une obligation.
Importe la fonctionnalité Tk
PYTHON
Planificateur de projet 134 135
L’INTERFACE UTILISATEUR GRAPHIQUE TK
Liste des widgets
Les objets graphiques de Tk sont appelés Le widget
intégrés dans
« widgets ». Ils s’intègrent les uns dans les fenêtre racine
la fenêtre racine
autres pour créer une hiérarchie d’objets
Mon Application
graphiques. Le widget « racine » correspond
à la fenêtre principale. Les widgets sont créés
en transmettant à leurs constructeurs Tk Chose 1
le widget parent comme premier argument, Chose 2
suivi d’un ensemble de mots-clés spécifiant Chose 3
différents attributs tels que la taille et la
couleur du widget. La fonction mainloop()
de Tk dessine les widgets à l’écran et gère les
événements tels que les clics de souris et les
actions du clavier. Cette fonction reste active
tant que la fenêtre est ouverte. Si vous voulez Cliquez ici ! Non, cliquez ici !
faire quelque chose après l’ouverture de
la fenêtre, vous devez définir des fonctions
qui seront appelées par mainloop() dès
qu’un événement spécifique se produira, Widget bouton Widget bouton Widget conteneur
comme l’action sur un bouton. intégré à gauche intégré à droite de cadre intégré dans le
du cadre du cadre bas de la fenêtre racine

3.2 CRÉEZ UNE FENÊTRE


Crée un widget
Ajoutez ce code à la fin du fichier .py pour créer une
bouton et le place
fenêtre. Elle contiendra un bouton et un widget de type « canvas »
sur le bord supérieur
(écran d’affichage). Le bouton affichera du texte et le widget canvas
de la fenêtre
définira une zone dans laquelle vous pourrez dessiner. Vous devez
spécifier la taille et la couleur d’arrière-plan du widget canvas. Crée un widget fenêtre principale
de Tk (voir encadré ci-dessus)

return jours_debut
racine = tkinter.Tk()
Donne un titre
racine.title("Planificateur de projet") à la fenêtre

bouton_ouvrir = tkinter.Button(racine, text="Ouvrir un projet...", \


command=ouvrir_projet)
bouton_ouvrir.pack(side="top")
canvas = tkinter.Canvas(racine, width=1150, \
height=400, bg="white")
canvas.pack(side="bottom")
tkinter.mainloop()

Exécute le gestionnaire Crée un widget canvas


d’événements de Tk et le place sur le bord
inférieur de la fenêtre ENREGISTRER
AFFICHAGE DU GRAPHIQUE

3.3 EXÉCUTEZ LE CODE


Si vous exécutez le code à ce stade, une fenêtre
blanche sans bouton va s’afficher. Vous obtiendrez également
un message d’erreur dans la console parce que la fonction
ouvrir_projet() n’a pas encore été définie. Vous devrez
fermer cette fenêtre pour continuer.

====== RESTART: /Users/tina/PlanificateurProjet/planificateur.py ======


Traceback (most recent call last):
File "/Users/tina/PlanificateurProjet/planificateur.py", line 35, in
<module>
bouton_ouvrir = tkinter.Button(racine, text="Ouvrir un projet...",
command=ouvrir_projet)
NameError: name 'ouvrir_projet' is not defined
>>>
Le programme va planter et afficher cette erreur dans la console

3.4 ACTIVEZ LE BOUTON


Le bouton créé à l’étape 3.2 doit vous permettre d’importation comme indiqué. Ajoutez ensuite une fonction
de sélectionner le fichier du projet à représenter en graphique. ouvrir_projet(). Si vous exécutez le programme
Pour ce faire, vous avez besoin d’une boîte de dialogue de fichier Tk maintenant, vous obtiendrez un autre message d’erreur
qui se trouve dans un sous-module de tkinter. Ajoutez l’instruction car la fonction charte_graphe() n’a pas encore été définie.

import tkinter Importe une seule fonction


dans tkinter.filedialog
from tkinter.filedialog import askopenfilename plutôt que le module entier

Appelle la fonction qui ouvre Spécifie le titre


une boîte de dialogue de fichier de la boîte « . » représente le nom
pour choisir un fichier CSV de dialogue du dossier en cours

return jours_debut
def ouvrir_projet():
nomfichier = askopenfilename(title="Ouvrir un projet", initialdir=".", \
filetypes=[("CSV Document", "*.csv")])
taches = lire_taches(nomfichier)
charte_graphe(taches, canvas)

Affiche un graphique des Lit les tâches dans le fichier.csv Spécifie le format
tâches dans le widget canvas renvoyé par la boîte de dialogue de fichier attendu
PYTHON
Planificateur de projet 136 137
3.5 DESSINEZ LE GRAPHIQUE
Il est temps de dessiner le diagramme de Gantt. charte_graphe() et donne des valeurs par défaut
Commencez par réfléchir à son aspect final et aux éléments à certains de ses arguments. Seuls les deux premiers
graphiques nécessaires pour le dessiner. Ajoutez arguments (taches et canvas) sont requis pour appeler
ce code à celui de l’étape 2.1 (au-dessus de la fonction la fonction. Les arguments avec des valeurs par défaut sont
ouvrir_projet()) pour dessiner les en-têtes et les lignes facultatifs et prendront les valeurs que vous avez spécifiées,
de séparation du graphique. Il définit une fonction créant des « constantes » locales dans la fonction.

Titre de la tâche Séparateur de l’en-tête

En-tête de colonne
Semaine 1 Semaine 2 Semaine 3 Semaine 4 pour le numéro
de semaine
TÂCHE 1
Séparateur
de colonne
TÂCHE 2

Barre de début/durée
TÂCHE 3 de la tâche

Les arguments avec des valeurs par défaut Valeur par défaut
spécifient où dessiner les éléments d’un argument
et l’espace qu’ils occuperont sur le canvas

def charte_graphe(taches, canvas, rangee_hauteur=40, titre_largeur=450, \


ligne_hauteur=40, jour_largeur=25, barre_hauteur=20, \
titre_indent=20, typo_taille=16) : Trace une ligne
horizontale pour
hauteur = canvas["height"] l’en-tête, une ligne
Définit la hauteur et la largeur plus bas et sur toute
largeur = canvas["width"] du canvas à l’aide de variables la largeur du graphique
locales
semaine_largeur = 5 * jour_largeur
canvas.create_line(0, rangee_hauteur, largeur, ligne_hauteur, \
fill="grey")
Boucles sur le nombre
Définit x comme
for numero_semaine in range(5) : de semaines de 0 à 4
la largeur du titre
plus la largeur
x = titre_largeur + numero_semaine * semaine_largeur d’une semaine
fois le numéro
canvas.create_line(x, 0, x, hauteur, fill="grey") de semaine

canvas.create_text(x + semaine_largeur / 2, rangee_hauteur / 2, \


Dessine une ligne verticale text=f"Semaine {numero_semaine+1}", \
à partir de x sur toute la
hauteur du graphique font=("Helvetica", typo_taille, "bold"))
def ouvrir_projet():

Dessine une chaîne de caractères à la position x


plus une demi-largeur de semaine et une demi-ligne vers le bas
AFFICHAGE DU GRAPHIQUE

3.6 EXÉCUTEZ LE CODE


Votre diagramme de Gantt est Hauteur
prêt. Enregistrez le fichier et exécutez Semaine 1 Semaine 2 Semaine 3 Semaine 4 Semaine 5
de ligne
le code. Cliquez sur le bouton,
choisissez un fichier CSV et observez
Largeur
les en-têtes et les lignes affichés.
de semaine

Hauteur Largeur
du titre

LE WIDGET CANVAS DE TK
Le widget Canvas crée une zone à l’intérieur de laquelle (0,0) X
vous pouvez dessiner ou ajouter du texte. Vous créez
ces éléments en appelant des méthodes avec une

CANVAS[“HAUTEUR”]
ou plusieurs coordonnées en arguments, suivies d’un
certain nombre d’arguments mots-clés facultatifs pour
spécifier des informations de style (couleurs, épaisseurs
de ligne ou polices, voir les tableaux ci-dessous). Les CANVAS
coordonnées du canvas sont spécifiées en pixels à partir
du coin supérieur gauche de la zone de dessin. Les Y
couleurs peuvent être spécifiées soit par leur nom (red
ou yellow par exemple), soit par leur code hexadécimal
(comme #FF0000). Le texte est centré sur les
coordonnées transmises par défaut. L’argument anchor CANVAS[“LARGEUR”]
peut être défini avec une constante « point cardinal »
(tkinter.N, tkinter.NE ou tkinter.E) pour aligner plutôt
le coin ou le bord du texte sur les coordonnées.

MÉTHODES DE BASE ARGUMENTS DE STYLE SUPPLÉMENTAIRES


Méthode Description Argument Description
create_line(x1, y1, x2, y2, …) Ajoute une ligne de width Largeur de ligne
(x1, y1) à (x2, y2)

fill Couleur de remplissage d’une forme


create_rectangle(x1, y1, x2, y2, …) Ajoute un rectangle de ou couleur des lignes et du texte
(x1, y1) à (x2, y2)

outline Couleur du contour des formes

create_oval(x1, y1, x2, y2, …) Ajoute un ovale qui s’inscrit


dans un cadre de
(x1, y1) à (x2, y2) font Police utilisée pour le texte, un tuple
(nom, taille) ou un tuple (nom, taille,
style)
create_text(x1, y1, text=t, …) Ajoute une étiquette
de texte ancrée à (x1, y1) anchor Point d’ancrage du texte utilisé
affichant la chaîne t pour son affichage aux coordonnées
spécifiées
PYTHON
Planificateur de projet 138 139
3.7 AFFICHAGE DES TÂCHES
Enfin, ajoutez ce code pour dessiner le titre et la barre de
durée pour chaque tâche. Tapez ces lignes à la suite de la fonction Trace le titre de la tâche une demi-ligne
charte_graphe() puis enregistrez le fichier. Exécutez le code pour sous y et avec un décalage de
visualiser le diagramme de Gantt complet lorsque vous ouvrez le titre_indent vers la droite
fichier projet.csv.

...canvas.create_text(x + semaine_largeur / 2, rangee_hauteur / 2, \


text=f"Semaine {numero_semaine+1}", \
font=("Helvetica", typo_taille, "bold"))
Ordonne les tâches pour
jours_debut = ordre_taches(taches) déterminer les jours de début

y = rangee_hauteur Commence par y, une ligne plus


Boucle sur les numéros de tâches
bas à partir du haut du canvas
dans l’ordre dans lequel ils apparaissent
for num_tache in jours_debut : dans le dictionnaire jours_debut

tache = taches[num_tache]
canvas.create_text(titre_indent, y + rangee_hauteur / 2, \
text=tache.titre, anchor=tkinter.W, \
font=("Helvetica", typo_taille))
barre_x = titre_largeur + jours_debut[num_tache] \
* jour_largeur
Calcule les
barre_y = y + (rangee_hauteur – barre_hauteur) / 2 coordonnées
du coin
supérieur
barre_largeur = tache.duree * jour_largeur
gauche
de la barre
canvas.create_rectangle(barre_x, barre_y, barre_x + \ et sa largeur
barre_largeur, barre_y + \
barre_hauteur, fill="red")
y += rangee_hauteur

Ajoute une hauteur de ligne (rangee_hauteur) Dessine une barre de couleur


à la valeur y rouge en utilisant ces valeurs

Semaine Semaine Semaine Semaine Semaine


1 2 3 4 5

Conception du jeu

Mise en œ
uv
fonctions de re des Ébauche des images
base
Trucs et astuces
Empêcher le redimensionnement de la fenêtre
Si l’utilisateur redimensionne manuellement la fenêtre du diagramme de Gantt,
le contenu s’en trouve déplacé ou coupé. Il est très compliqué de redessiner Empêche la fenêtre racine
correctement la fenêtre à chaque fois qu’elle est redimensionnée, il faut donc d’être redimensionnée
empêcher cette action en ajoutant la ligne de code ci-dessous. en largeur ou en hauteur

racine.title("Planificateur de projet")
racine.resizable(width=False, height=False)
bouton_ouvrir = tkinter.Button(root, text="Ouvrir un projet...", \
command=ouvrir_projet)

Vous ne pourrez plus


redimensionner la fenêtre

Planificateur de projet

Ouvrir un projet…

Semaine 1 Semaine 2 Semaine 3 Semaine 4 Semaine 5

Conception du jeu

Ébauche des images

Décomposition de la fonctionnalité
en étapes
Mise en œuvre des fonctions
de base
Tests et révision

Amélioration des images

Mise en œuvre des fonctions


avancées
Tests et révision

Publier sur l’App Store


PYTHON
Planificateur de projet 140 141

Servez-vous d’un cadre pour positionner le bouton


Vous pouvez utiliser un widget Frame Tk pour repositionner le bouton Ouvrir
un projet…, actuellement placé au milieu du bord supérieur de la fenêtre. Ajoutez Crée un cadre à la racine
les lignes de code suivantes au bas du fichier .py pour créer bouton_cadre, de la fenêtre avec un petit
puis mettez à jour bouton_ouvrir pour qu’il se place à l’intérieur du widget. décalage en x et y

racine = tkinter.Tk()
racine.title("Planificateur de projet")
racine.resizable(width=False, height=False)
bouton_cadre = tkinter.Frame(racine, padx=5, pady=5) Place le cadre en haut
de la fenêtre, remplissant
bouton_cadre.pack(side="top", fill="x") toute la largeur de x

bouton_ouvrir = tkinter.Button(bouton_cadre, text="Ouvrir un \


projet...", command=ouvrir_projet)
bouton_ouvrir.pack(side="left") Place le bouton à gauche du cadre

canvas = tkinter.Canvas(racine, width=1150, height=400, bg="white")

Crée le bouton_ouvrir à l’intérieur


du bouton_cadre au lieu de la racine

...
Ouvrir un projet
TRUCS ET ASTUCES

Ajouter une étiquette nom de fichier


Vous pouvez placer une étiquette à l’intérieur de la fenêtre avec le nom du
fichier traité. Ajoutez les lignes de code suivantes. La méthode config utilisée ici
permet de reconfigurer un widget après sa création. Elle reprend le mot-clé de la
fonction de création de widget d’origine. Cela permettra de spécifier l’attribut
text du widget Label après avoir ouvert le fichier.

def ouvrir_projet():
nomfichier = askopenfilename(title="Ouvrir un projet", initialdir=".", \
filetypes=[("CSV Document","*.csv")])
taches = lire_taches(nomfichier)
charte_graphe(taches, canvas)
nomfichier_label.config(text=nomfichier) Met à jour l’attribut text
de l’étiquette avec
racine = tkinter.Tk() le nom du fichier

racine.title("Planificateur de projet")
racine.resizable(width=False, height=False)
bouton_cadre = tkinter.Frame(racine, padx=5, pady=5)
bouton_cadre.pack(side=”top”, fill=”x”)
bouton_ouvrir = tkinter.Button(button_cadre, text= "Ouvrir un projet...", \
command=ouvrir_projet)
bouton_ouvrir.pack(side="left")
Crée un nouveau label
nomfichier_label = tkinter.Label(bouton_cadre) dans le bouton_cadre

nomfichier_label.pack(side="right") Place l’étiquette


à droite du cadre
canvas = tkinter.Canvas(root, width=1150, height=400, bg="white")

Planificateur de projet

Ouvrir un projet… Desktop/PlanificateurProjet/projet.csv Le nom du fichier


apparaîtra à droite
du bouton Ouvrir
Semaine 1 Semaine 2 Semaine 3 Semaine 4 Semaine 5 un projet…

Conception du jeu

Ébauche des images


PYTHON
Planificateur de projet 142 143

Ajouter un bouton Effacer


Vous pouvez également ajouter un bouton qui effacera Met à jour l’attribut text
tous les éléments de la fenêtre ainsi que le graphique en de l’étiquette avec une chaîne
ajoutant les lignes suivantes. de caractères vide

charte_graphe(taches, canvas)
nomfichier_label.config(text=nomfichier)
def effacer_canvas():
nomfichier_label.config(text="")
canvas.delete(tkinter.ALL) Supprime tous les éléments
Crée un nouveau bouton dans
existants dans la zone du canvas
la fenêtre qui lancera la
racine = tkinter.Tk() fonction effacer_canvas()

racine.title("Planificateur de projet")
bouton_ouvrir = tkinter.Button(racine, text="Ouvrir un projet...", \
command=ouvrir_projet)
bouton_ouvrir.pack(side="left")
bouton_effacer = tkinter.Button(bouton_cadre, text="Effacer", \
command=effacer_canvas)
bouton_effacer.pack(side="left") Place le nouveau bouton à gauche
de la fenêtre
nomfichier_label = tkinter.Label(bouton_cadre)
canvas = tkinter.Canvas(racine, width=1150, height=400, bg="white")
canvas.pack(side="bottom")

Ouvrir un projet… Effacer


Objets et classes
Une des caractéristiques les plus importantes de Python
est qu’il s’agit d’un langage orienté objet (voir page 13).
Cela signifie que ses données peuvent être organisées
en termes de classes et d’objets, produisant un modèle
à partir duquel plusieurs objets peuvent être créés.

SELECTIONNEZ

Classe
Le mot-clé class permet de définir un
modèle en associant un certain nombre
de variables (attributs) et de fonctions
(méthodes) à un nom. Ici, la classe
Voiture définit la forme que devraient
avoir les objets ci-dessous.
VOITURE VÉLO

Objet
Un objet est une instance d’une classe, tout
comme une vraie voiture est une instance
du concept de voiture. Les champs et
méthodes d’un objet voiture contiendraient
des données et du code pour une instance
particulière de la classe Voiture. Ainsi, l’objet
nommé « sport » aurait une « vitesse_max » BERLINE SPORT
plus élevée que l’objet « berline ».

Les champs vitesse_courante


Les champs contiennent des données
sur un objet. Dans cet exemple,
les champs sont susceptibles d’inclure vitesse_max
des valeurs qui pourraient figurer
dans un programme de simulation,
comme vitesse_courante, vitesse_max,
et niveau_essence. niveau_essence
PYTHON
Objets et classes 144 145
Les objets et les classes, qu’est-ce que c’est ?
Un objet est un type de données qui modélise un élément du monde réel, tel
qu’une voiture. Les programmeurs peuvent ainsi créer une représentation
informatique de celui-ci. Les objets se composent de champs, contenant
des données, et de méthodes, contenant du code. Une classe, en revanche,
définit la forme qu’un objet particulier devrait avoir, les types de champ
qui lui sont associés et ce que ses méthodes doivent faire.

Décrit les attributs


communs à toute Champs de
voiture la classe Voiture

class voiture:
vitesse_courante = 0
vitesse_max = 0
CAMION
niveau_essence = 0
def acceleration(self):
print("On accélère")
def freinage(self):
print("On ralentit")
Méthodes de
la classe Voiture
SUV ma_voiture = Voiture()
ma_voiture_vitesse_courante = 4.5
ma_voiture_vitesse_max = 8.5
ma_voiture_niveau_essence = 4.5
Méthodes
Accélérer
Les méthodes définissent
le comportement
d’un objet. Les méthodes Donne aux champs de l’objet
d’un objet voiture seront Freiner ma_voiture des valeurs spécifiques
donc des actions qui
pourraient être effectuées Instancier une classe
sur ou avec une voiture Un programme conçu pour modéliser le fonctionnement d’une
Tourner voiture pourrait inclure la classe Voiture, avec des attributs
comme accélérer, freiner
et tourner. communs à toutes les voitures. La voiture d’un utilisateur
(ici, un modèle sportif) serait alors un objet, avec des champs
contenant des valeurs liées à cette voiture et des méthodes
définissant les actions possibles avec cette voiture.
Gestionnaire de budget
La gestion du budget est une tâche que l’ordinateur peut faciliter. Il existe
diverses applications pour suivre ses dépenses, basées sur la définition
de budgets par types de dépenses. Ce projet crée un gestionnaire de budget
simple à l’aide de dictionnaires et de classes Python.

Ce que fait le programme Planificateur de budget


Ce gestionnaire de budget permettra aux utilisateurs de suivre leurs Plutôt que de créer directement
un programme, ce projet créera
dépenses à partir d’un budget global de 2500. Pour commencer, un budget un ensemble de fonctions pouvant être
est alloué pour différents types de dépenses, comme l’épicerie ou appelées dans la console Python,
les factures de ménages. Les dépenses pourront alors être comparées ou être importées et utilisées
dans d’autres programmes.
à leur budget alloué, et un résumé donnera un rapide aperçu des finances.

Python 3.7.0 Shell

>>> budget_ajout("Courses", 500)


2000.00
Alloue les dépenses
>>> budget_ajout("Location", 900) aux budgets

1100.00
>>> depense("Courses", 35)
Renvoie le budget restant
465.00
>>> depense("Courses", 15)
450.00
>>> afficher_resume()
Budget Budgeté Dépensé Restant
--------------- ---------- ---------- ----------
Courses 500.00 50.00 450.00
Location 900.00 0.00 900.00
--------------- ---------- ---------- ----------
Total 1400.00 50.00 1350.00

Le résumé donne
un aperçu de toutes
les dépenses
PYTHON
Gestionnaire de budget 146 147
VOUS ALLEZ APPRENDRE COMMENT L’UTILISER
❯ Comment utiliser les dictionnaires Durée : La bibliothèque développée dans ce projet,
Python 1 heure complétée d’une interface utilisateur,
❯ Comment déclencher des Lignes de code : 43
constitue une application de gestion
exceptions pour les erreurs financière simple. Diviser un programme
Niveau de difficulté en modules et encapsuler du code et
❯ Comment formater des chaînes de
des données dans des classes sont deux
caractères pour la sortie
techniques courantes en programmation.
❯ Comment créer une classe Python

Appels de fonction Conception du programme


Les fonctions écrites dans ce programme permettront Dans ce projet, la bibliothèque budget est
d’allouer un montant à différents budgets nommés. Elles
assureront ensuite le suivi des dépenses par rapport aux créée à partir des fonctions ajoutées puis un
différents montants budgétés. Le diagramme ci-dessous résumé de toutes les dépenses est affiché.
montre un exemple d’une série d’appels de fonction. Tout le code est ensuite converti en une
classe Python qui pourra être réutilisée.

UTILISATEUR DE BIBLIOTHÈQUE
LA BIBLIOTHÈQUE BUDGET DÉBUT

budget_ajout
("Courses", 500)

Ajout du budget
2000

budget_ajout
("Location", 900)
Ajout des dépenses

1100

depense
("Courses", 35) Affichage du résumé

465

Conversion du code
en classe
depense
("Courses", 15)

450
FIN
MISE EN ŒUVRE

Mise en œuvre
1 Pour créer ce gestionnaire de budget, vous aurez besoin
d’un nouveau fichier Python pour le code de base, que
vous développerez ultérieurement. Les dictionnaires Python
vont servir à enregistrer les montants budgétés et dépensés.

1.1 CRÉEZ UN NOUVEAU FICHIER


La première étape consiste à créer un nouveau
fichier pour le code du projet. Ouvrez IDLE et sélectionnez
File/New File. Créez un nouveau dossier sur votre bureau
appelé GestionnaireBudget et enregistrez ce fichier vide
à l’intérieur. Nommez-le « budget.py ». GESTIONNAIRE
BUDGET.PY BUDGET

1.2 CONFIGURER LES VARIABLES


Créez maintenant des variables globales
pour le suivi des montants disponibles, budgétés
disponible = 2500.00 Définit la variable
et dépensés. Vous utiliserez des dictionnaires disponible avec le
Python (voir encadré ci-dessous) pour les budgets budgets = {} montant de départ
et les dépenses, qui seront mis en relation par
leur nom, tel que « Courses ». Saisissez ce code depenses = {}
dans le nouveau fichier.
Les accolades sont utilisées
pour créer un dictionnaire – un
dictionnaire vide dans ce cas

DICTIONNAIRES
Lorsque vous choisissez une structure de données ci-dessous, la première colonne contient les clés
Python, réfléchissez à la manière dont vous écririez du dictionnaire et la seconde les valeurs
les informations à stocker. Souvent, la méthode la plus correspondantes. Si la table comporte plusieurs
simple consiste à les ranger dans un tableau comme colonnes de valeurs, celles-ci peuvent être stockées
ci-dessous. Si les informations de la première colonne dans des dictionnaires séparés en utilisant les mêmes
sont uniques (pas de doublons), vous pouvez utiliser clés. Vous pouvez donc avoir un dictionnaire pour
un dictionnaire, c’est-à-dire une structure de données les budgets et un autre pour les dépenses.
constituée de paires clé:valeur. Dans le tableau

FORMAT DU DICTIONNAIRE
Nom du budget Montant du budget
Course 500

Factures 200

Divertissement 50

Les informations du
{"Courses": 500, "Factures": 200, "Divertissement": 50} tableau ci-dessus sous
forme de dictionnaire
Python
PYTHON
Gestionnaire de budget 148 149
Ajout d’un budget
2 Dans cette section, vous allez créer
des budgets pour les différentes dépenses. Vous allez
commencer par le code qui permettra d’ajouter
ces budgets, puis vous le compléterez pour contrôler
les erreurs courantes.

VÊTEMENTS LOCATION COURSES

2.1 AJOUTEZ UNE FONCTION


disponible sera
BUDGET
La fonction d’ajout du budget prendra
def budget_ajout(nom, montant): globale lorsqu’elle
sera définie dans
le nom de ce dernier et le montant
à budgéter. Elle les stockera ensuite global disponible cette fonction
dans le dictionnaire des budgets Stocke
et déduira le montant du montant budgets[nom] = montant le montant
disponible. La fonction renverra alors budgété dans
le nouveau montant disponible disponible -= montant le dictionnaire
pour afficher ce qui reste à budgéter. budgets
Ajoutez ce code sous les variables depenses[nom] = 0
globales.
return disponible
Déduit le montant
budgété du montant Renvoie le nouveau Définit le montant dépensé
disponible montant disponible pour ce budget sur 0 ENREGISTRER

2.2 EXÉCUTEZ LE FICHIER


Enregistrez puis exécutez
le fichier en sélectionnant le menu
>>> budget_ajout("Courses", 500) Saisissez cette
ligne et appuyez
Run/Run Module. Cela ouvrira
la console Python. Vous pouvez tester 2000.0 Valeur renvoyée par l’appel de fonction sur Entrée

la fonction en tapant un exemple


d’appel derrière >>> qui est l’invite >>> budgets
de commande de cette console.
Saisissez des extraits de code Python, {'Courses': 500}
ils seront exécutés lorsque vous
appuierez sur Entrée ou retour. >>> depenses
{'Courses': 0}
Saisissez le nom des
variables derrière l’invite
pour afficher leurs valeurs
AJOUT D’UN BUDGET

2.3 VÉRIFIEZ LES ERREURS


Pour voir ce qui se passe si vous ajoutez deux fois
un budget, saisissez le code ci-dessous dans la console. Vous
remarquerez que le dictionnaire des budgets sera mis à jour
avec la nouvelle valeur, mais que le montant disponible PLANIFICATEUR DE BUDGET
sera réduit une deuxième fois. Pour éviter cela, vous devez
vérifier si le nom du budget a déjà été utilisé. Modifiez la
fonction budget_ajout() comme indiqué dans la fenêtre Location 900
d’édition ci-dessous. Courses 500
Location 400
>>> budget_ajout("Location", 900) Vetements 300

1100.0
>>> budget_ajout("Location", 400)
Le montant disponible
700.0 est réduit deux fois
>>> budgets
{'Courses': 500, 'Location': 400}

def budget_ajout(nom, montant):


global disponible Vérifie si le nom existe
déjà comme clé dans le
if nom in budgets: dictionnaire des budgets

Quitte la fonction immédiatement


raise ValueError("Le budget existe déjà") avec une exception si un nom de
budget apparaît plusieurs fois
budgets[nom] = montant

EXCEPTIONS
En Python, les erreurs sont signalées par des exceptions Il existe de nombreux types d’exceptions standards
qui interrompent l’exécution normale du code. À moins en Python. Chacune d’elles peut recevoir une chaîne de
que l’exception ne soit interceptée, le programme se caractères qu’elle va afficher à l’utilisateur pour expliquer
fermera immédiatement et affichera l’exception qui a été ce qui n’a pas fonctionné. Le tableau ci-dessous répertorie
déclenchée et la ligne de code à laquelle elle s’est produite. quelques types d’exceptions standards et quand les utiliser.

TYPES D’EXCEPTIONS
Nom Quand l’utiliser
TypeError Une valeur n’a pas le bon type : une chaîne a été utilisée, par exemple, alors qu’un nombre était attendu

ValueError Une valeur est invalide : elle est trop grande, par exemple, ou trop petite

RuntimeError Une autre erreur inattendue s’est produite dans le programme


PYTHON
Gestionnaire de budget 150 151
2.4 EXÉCUTEZ
LE MODULE
Testez le code pour vérifier si
>>> budget_ajout("Courses", 500)
l’erreur est maintenant corrigée.
Lors de son exécution, les trois
2000.0
variables globales reprennent
leurs valeurs initiales. Saisissez >>> budget_ajout("Location", 900)
ce code dans la console. Vous
allez immédiatement recevoir 1100.0
un message indiquant que vous
essayez d’ajouter deux fois >>> budget_ajout("Location", 400)
le même budget. Vérifiez
les variables, vous constaterez Traceback (most recent call last):
que leurs valeurs sont correctes.
File "<pyshell>", line 1, in <module>
budget_ajout("Location", 400)
Message d’erreur
affiché à l’écran File "budget.py", line 7, in budget_ajout
raise ValueError("Le budget existe déjà")
ValueError: Le budget existe déjà

>>> budgets
{'Courses': 500, 'Location': 900}
Les variables
ne seront pas mises >>> disponible
à jour avec les
mauvaises valeurs
1100.0

2.5 DÉVELOPPEZ LE CONTRÔLE DES ERREURS


Vous allez maintenant tester dans la console l’élaboration l’éditeur. Enregistrez ensuite le fichier et exécutez à nouveau
d’un budget supérieur à ce qui est disponible. Pour corriger le code pour vérifier que le nouveau message d’erreur
une telle erreur, ajoutez une autre vérification dans la fonction s’affiche et que vous ne pouvez pas « sur-budgétiser ».
budget_ajout(). Mettez à jour le code dans la fenêtre de

>>> budget_ajout("Vetements", 2000)


-900.0 Une valeur négative
indique un dépassement
de budget

if name in budgets:
raise ValueError("Le budget existe déjà") Vérifie si le montant budgété
est supérieur au montant
if montant > disponible: disponible

Déclenche une
raise ValueError("Fonds insuffisants") exception et quitte
la fonction
budgets[nom] = montant immédiatement
ENREGISTRER
AJOUT D’UN BUDGET

>>> budget_ajout("Courses", 500)


2000.0
>>> budget_ajout("Location", 900)
1100.0
>>> budget_ajout("Vetements", 2000)
Traceback (most recent call last):
File "<pyshell>", line 1, in <module>
budget_ajout("Vetements", 2000)
Un message d’erreur
File "budget.py", line 9, in budget_ajout de dépassement
de budget s’affiche
raise ValueError("Fonds insuffisants")
ValueError: Fonds insuffisants

Suivi des dépenses


3 Il faut ensuite ajouter un moyen de
suivre toutes les dépenses. Pour ce faire,
vous allez ajouter une fonction qui permettra
de saisir l’argent dépensé, puis
une autre pour afficher le résumé.
Celui-ci indiquera le montant
total dépensé et le montant
restant. LOCATION VÊTEMENTS
COURSES RESTE  À DÉPENSER

3.1 AJOUT DE LA FONCTION


DEPENSE
Ajoutez la fonction depense() sous return disponible
Déclenche une exception si la
la fonction budget_ajout() pour valeur de nom n’est pas une clé
noter le montant que vous avez def depense(nom, montant): dans le dictionnaire dépenses
dépensé et le nom du budget que
vous souhaitez suivre. L’opérateur if nom not in depenses:
Python « += » est utilisé pour ajouter
un montant à une variable. Enregistrez raise ValueError("Ce budget n’est pas prévu")
le fichier, puis exécutez le module
pour tester cette nouvelle fonction. depenses[nom] += montant
Ajoute le montant à la clé correspondante
dans le dictionnaire dépenses
PYTHON
Gestionnaire de budget 152 153
3.2 RENVOI DU MONTANT RESTANT
Ajoutez ce code à la fin de la fonction depense() afin
de suivre le reliquat budgétaire, puis enregistrez et exécutez le
>>> budget_ajout("Courses", 500)
fichier pour tester le code. Vous remarquerez que vous pouvez
dépenser plus que le montant budgété. Inutile de traiter cette 2000.0
situation avec une exception, vous désirez suivre les dépenses
excédentaires. >>> depense("Courses", 35)
Récupère le montant
budgété pour nom 465
mbudgete = budgets[nom] >>> depense("Courses", 15)
mdepense = depenses[nom] 450
return mbudgete - mdepense >>> depense("Courses", 500)
Une valeur négative indique
Renvoie le montant Obtient le montant -50 que les dépenses dépassent le budget
restant dans le budget total dépensé

3.3 IMPRESSION D’UN RÉSUMÉ


Dans cette étape, vous allez ajouter une fonction qui échéant). Ajoutez ce code au bas du fichier. Enregistrez ensuite
affichera chaque budget, le montant initialement budgété, le les modifications puis exécutez le fichier. Le résumé affichera
montant dépensé et le montant restant à dépenser (le cas les chiffres pour chaque catégorie.

def afficher_resume():
Parcourt toutes les clés
for nom in budgets: du dictionnaire budgets
Récupère le montant
mbudgete = budgets[nom] budgété pour la clé nom
Récupère le montant
mdepense = depenses[nom] dépensé pour la clé nom
Calcule le montant restant en déduisant
restant = mbudgete - mdepense le montant budgété des dépenses

print(nom, mbudgete, mdepense, restant) Affiche un résumé d’une


seule ligne pour ce budget

>>> budget_ajout("Courses", 500)


2000.0
>>> budget_ajout("Location", 900)
1100.0
>>> depense("Courses", 35)
465
>>> depense("Courses", 15)
450
>>> afficher_resume()
Courses 500 50 450
Courses 500 50 450
Location 900 0 900
Location 900 0 900
SUIVI DES DÉPENSES

3.4 MISE EN FORME DU RÉSUMÉ


À ce stade, le résumé est assez difficile à lire. Modifiez la ligne print dans la fonction afficher_resume()
Pour résoudre ce problème, vous allez aligner les comme indiqué ci-dessous. Cela va créer puis afficher une chaîne
chiffres dans un tableau en appliquant la mise en forme de caractères à partir des valeurs, chacune ayant une largeur
des chaînes de caractères (voir encadré ci-dessous). et un nombre de décimales spécifiques.

restant = mbudgete - mdepense


print(f'{nom:15s} {mbudgete:10.2f} {mdepense:10.2f} '
f'{restant:10.2f}')
Le montant sera affiché
avec deux décimales

>>> budget_ajout("Courses", 500)


2000
>>> budget_ajout("Location", 900)
1100
>>> depense("Courses", 35)
465
>>> depense("Courses", 15)
450
>>> afficher_resume() Les valeurs auront deux
décimales et seront
Courses 500.00 50.00 450.00 alignées en colonnes,
comme dans un tableau
Location 900.00 0.00 900.00

FORMAT DES CHAÎNES DE CARACTÈRES


En Python, on peut créer des chaînes de caractères EXEMPLES DE CHAÎNES DE CARACTÈRES FORMATÉES
à partir de valeurs en leur appliquant un format spécial.
Exemple Résultat
Elles sont créées comme des chaînes normales,
à l’exception du caractère « f » avant les guillemets f'{greeting} World!' 'Hello World!'
d’ouverture. À l’intérieur de la chaîne, vous pouvez
insérer du code entre accolades. À l’exécution, il sera f'{greeting:10s}' 'Hello '
remplacé par les valeurs correspondantes. Ce code inclut
f'{cost:5.2f}' ' 3.47'
le plus souvent des noms de variables, mais vous pouvez
aussi insérer des calculs arithmétiques. Tout ce qui n’est f'{cost:5.1f}' ' 3.5'
pas entre crochets est utilisé tel quel. Des instructions
de mise en forme détaillées peuvent être ajoutées après f'La réponse est {a * b}' 'La réponse est 42'
un signe deux-points. Un nombre suivi d’une lettre,
par exemple, permet de spécifier une largeur.
PYTHON
Gestionnaire de budget 154 155
3.5 AJOUTEZ UN EN-TÊTE AU TABLEAU
Maintenant, ajoutez un en-tête
au tableau afin de mieux identifier
les nombres dans chaque catégorie.
Ajoutez deux instructions print BUDGÉTÉ DÉPENSES RESTANT
dans la fonction afficher_resume().
Commencez par saisir la ligne avec
-------------- --------- ------------------
les tirets – 15 tirets suivis de trois séries
de 10 tirets, avec des espaces entre 500.00 50.00 450.00
les deux. Alignez ensuite les titres
entre les tirets. 900.00 0.00 900.00

def afficher_resume()
print("Budget Budgété Dépenses Restant")
print("--------------- ---------- ---------- ----------")
for nom in budgets:
Les titres ont été alignés sur les tirets
mbudgete = budgets[nom]
mdepense = depenses[nom]

3.6 AJOUTEZ UNE LIGNE AU BAS DU TABLEAU


Pour compléter le tableau récapitulatif, vous pouvez cette ligne qu’avec celle du budget. N’oubliez pas de
y ajouter une ligne de fin avec le total de chaque colonne. remplacer le nom du budget par « Total » au lieu du nom
Mettez à jour la fonction afficher_resume() comme du budget, et total_budgete, total_depense
indiqué ci-dessous. Appliquez la même mise en forme sur et total_restant pour les autres variables.

def afficher_resume():
print("Budget Budgété Dépenses Restant")
print("--------------- ---------- ---------- ----------")
total_budgete = 0
total_depense = 0 Définit le total
des variables à 0
total_restant = 0
for nom in budgets:
SUIVI DES DÉPENSES

mbudgete = budgets[nom]
mdepense = depenses[nom]
restant = mbudgete - mdepense
print(f'{nom:15s} {mbudgete:10.2f} {mdepense:10.2f} '
f'{restant:10.2f}')
total_budgete += mbudgete
total_depense += mdepense Ajoute le montant aux totaux

total_restant += restant
print("--------------- ---------- ---------- ----------")
print(f'{"Total":15s} {total_budgete:10.2f} {total_depense:10.2f} '
f'{total_budgete - total_depense:10.2f}')

Affiche une ligne


de séparation
suivie du résumé
>>> budget_ajout("Courses", 500) avec les totaux
2000.0
>>> budget_ajout("Location", 900)
1100.0
>>> depense("Courses", 35)
465
>>> depense("Courses", 15)
450
>>> afficher_resume()
Budget Budgété Dépenses Restant
--------------- ---------- ---------- ----------
Courses 500.00 50.00 450.00
Tableau récapitulatif
Location 900.00 0.00 900.00 final affiché avec
un en-tête et un pied
--------------- ---------- ---------- ---------- de page

Total 1400.00 50.00 1350.00


PYTHON
Gestionnaire de budget 156 157
Conversion du code
4 en classe
Dans cette section, vous allez
prendre tout le code écrit jusqu’à
présent et le transformer en classe
Python (voir pages 144-145). Cela
permettra à l’utilisateur de suivre
plusieurs budgets simultanément.

4.1 INDENTATION DU CODE


Cliquez ici pour ajouter
Python étant un langage structuré Format Run Options
à l’aide de l’indentation, vous devez des retraits à l’ensemble
correctement aligner le code avant Indent Region du fichier
de le convertir en classe. Sélectionnez tout Dedent Region
le code du fichier, puis choisissez « Indent Comment Out Region
Region » dans le menu Format. Ajoutez
ensuite un en-tête de classe en haut
du fichier, avant les variables.

Définit la nouvelle classe class GestionnaireBudget:


disponible = 2500
Les variables sont maintenant indentées budgets = {}
depenses = {}

4.2 AJOUTEZ UN INITIALISATEUR


Augmentez le retrait des trois variables et ajoutez-leur initiales des variables d’instance. Le premier argument
un en-tête de fonction. Les fonctions à l’intérieur d’une classe de l’initialiseur est la nouvelle instance, appelée self
sont appelées méthodes. La méthode _ _init_ _ est appelée par convention. Vous pouvez également ajouter
lorsqu’une nouvelle instance d’une classe est créée. Cette des arguments supplémentaires qui vous permettront
méthode est appelée « initialiseur » car elle définit les valeurs de fournir des valeurs utiles, telles que le montant ici.

class GestionnaireBudget:
Arguments
de l’initialiseur
def __init__(self, montant):
disponible = 2500
budgets = {}
depenses = {}
CONVERSION DU CODE EN CLASSE

4.3 CRÉEZ DES VARIABLES D’INSTANCE


Convertissez ensuite les trois variables en variables
d’instance en ajoutant « self. » devant leur nom. Utilisez
class GestionnaireBudget:
l’argument montant plutôt que 2500 comme valeur initiale
pour la variable d’instance disponible.
def __init__(self, montant):
self.disponible = montant
Convertit les variables self.budgets = {}
en variables d’instance
self.depenses = {}

4.4 TRANSFORMEZ LES FONCTIONS EN MÉTHODES


Vous devez maintenant transformer toutes les autres fonctions
du code en méthodes. Comme avec l’initialiseur, vous allez ajouter self
comme premier argument de chaque fonction, puis self. avant chaque
utilisation des variables d’instance. Modifiez la fonction budget_ajout()
comme indiqué ci-dessous. Supprimez la ligne global disponible Supprimez la ligne
car cette dernière est désormais une variable d’instance. global disponible
entre ces deux lignes de code

def budget_ajout(self, nom, montant):


if nom in self.budgets:
raise ValueError("Le budget existe déjà")
if montant > self.disponible:
raise ValueError("Fonds insuffisants")
self.budgets[nom] = montant
self.disponible -= montant
self.depenses[nom] = 0
return self.disponible
def depense(self, nom, montant):
if nom not in self.depenses:
raise ValueError("Ce budget n’est pas prévu")
self.depenses[nom] += montant
mbudgete = self.budgets[nom]
mdepense = self.depenses[nom]
return mbudgete - mdepense
def afficher_resume(self): Ajoute un argument à la fonction
PYTHON
Gestionnaire de budget 158 159

print("Budget Budgété Dépenses Restant")


print("--------------- ---------- ---------- ----------")
total_budgete = 0
total_depense = 0
total_restant = 0
for nom in self.budgets:
mbudgete = self.budgets[nom]
mdepense = self.depenses[nom]

Ajoutez self. devant chaque


utilisation de la variable d’instance

ENREGISTRER

4.5 EXÉCUTEZ LE MODULE


Enregistrez et exécutez le module. Tapez ces lignes dans la console pour
tester le code. Cela ajoutera une nouvelle instance de classe GestionnaireBudget.
Le code inspecte les variables d’instance en mettant mesdepenses. devant leur nom. Définit la variable mesdepenses
Vous pouvez appeler des méthodes de la même manière, en saisissant le nom comme une instance de classe
de la variable avant le nom de la fonction avec un point. GestionnaireBudget

>>> mesdepenses = GestionnaireBudget(2000)


>>> mesdepenses.disponible
2000
>>> mesdepenses.budgets
{}
>>> mesdepenses.depenses
{}
>>> mesdepenses.budget_ajout("Location", 700)
1300
>>> mesdepenses.budget_ajout("Courses", 400)
900
CONVERSION DU CODE EN CLASSE

>>> mesdepenses.budget_ajout("Factures", 300)


600
>>> mesdepenses.budget_ajout("Divertissement", 100)
500
>>> mesdepenses.budgets
{'Location': 700, 'Courses': 400, 'Factures': 300, 'Divertissement': 100}
>>> mesdepenses.depense("Courses", 35)
365
>>> mesdepenses.afficher_resume()
Budget Budgété Dépenses Restant
--------------- ---------- ---------- ----------
Location 700.00 0.00 700.00
Courses 400.00 35.00 365.00
Factures 300.00 0.00 300.00
Divertissement 100.00 0.00 100.00
--------------- ---------- ---------- ----------
Total 1500.00 35.00 1465.00

5 GESTION DE PLUSIEURS BUDGETS


Le code suivant réinitialise le budget en créant Les variables disponible, budget et depenses étant
une nouvelle instance de la classe GestionnaireBudget. stockées dans chaque instance, elles sont distinctes les unes
Avec plusieurs instances, vous pourrez même suivre plusieurs des autres et peuvent avoir des valeurs différentes par instance.
budgets. Pour tester, créez un nouveau budget appelé vacances.

Crée une nouvelle instance


de la classe GestionnaireBudget

>>> mesdepenses = GestionnaireBudget(2500)


>>> mesdepenses.budget_ajout("Courses", 500)
2000
Affiche le résumé de la nouvelle instance
>>> mesdepenses.afficher_resume()
PYTHON
Gestionnaire de budget 160 161

Budget Budgété Dépenses Restant


--------------- ---------- ---------- ----------
Courses 500.00 0.00 500.00
--------------- ---------- ---------- ----------
Total 500.00 0.00 500.00
>>> vacances = GestionnaireBudget(1000) Ajoute une nouvelle instance
de GestionnaireBudget
>>> vacances.budget_ajout("Billets d’avion", 250)
750
>>> vacances.budget_ajout("Hotel", 300)
450
>>> vacances.depense("Billets d’avion", 240)
10
>>> vacances.afficher_resume()
Budget Budgété Dépenses Restant
--------------- ---------- ---------- ----------
Billets d’avion 250.00 240.00 10.00
Hotel 300.00 0.00 300.00
--------------- ---------- ---------- ----------
Total 550.00 240.00 310.00

5.1 UTILISEZ LE CODE


Le code de ce projet peut être réutilisé dans d’autres et enregistrez-le dans le dossier GestionnaireBudget
programmes comme n’importe quelle autre bibliothèque en le nommant « test.py ». Ajoutez ensuite ce code
Python (voir pages 104-105). Essayez de créer un nouveau pour créer une instance de la classe GestionnaireBudget
module qui importera celui-ci. Ouvrez un nouveau fichier et en appeler des méthodes.

import budget Importe le module budget

mesdepenses = budget.GestionnaireBudget(2500) On fait référence à la classe


GestionnaireBudget
en la préfixant du nom
mesdepenses.budget_ajout("Courses", 500)
du module budget suivi
d’un point
mesdepenses.afficher_resume()
TRUCS ET ASTUCES

Trucs et astuces
Gérer les changements
Vous avez déjà modifié la méthode budget_ajout pour Lisez attentivement ce code pour bien
éviter les doublons. Il serait également utile d’avoir la possibilité comprendre la logique. Ajoutez une ligne
de changer un budget existant. Pour ce faire, ajoutez la dans le module test.py pour appeler
méthode suivante sous la méthode budget_ajout existante. cette nouvelle méthode et la tester.

def change_budget(self, nom, nouveau_montant): Vérifie


si le budget à
if nom not in self.budgets: modifier existe
Récupère
raise ValueError("Le budget n’existe pas") l’ancien
montant
ancien_montant = self.budgets[nom] du budget

if nouveau_montant > ancien_montant + self.disponible: Vérifie


si la somme
raise ValueError("Fonds insuffisants") des montants
ancien et
Modification du budget disponible
self.budgets[nom] = nouveau_montant couvre
le nouveau
self.disponible -= nouveau_montant - ancien_montant montant

return self.disponible

Réduit disponible de la différence


entre l’ancien et le nouveau montant

Enregistrer les détails des dépenses


Notre projet assure le suivi du total des dépenses dans chaque budget.
Cependant, dans un programme plus avancé, vous aurez besoin
de gérer chaque poste de dépense. Vous pouvez le faire en enregistrant
les montants dépensés dans le dictionnaire des dépenses, puis
en les additionnant chaque fois que vous aurez besoin du total.

1 CRÉER UNE LISTE DE DÉPENSES


Commencez par modifier le dictionnaire
depenses dans la méthode budget_ajout.
self.budgets[nom] = montant
Stockez une liste vide dans ce dictionnaire plutôt
que 0. Cela permettra d’y stocker plusieurs
self.depenses[nom] = []
valeurs.
self.disponible -= montant
return self.disponible
Enregistre une liste vide
PYTHON
Gestionnaire de budget 162 163

2 AJOUTER DES DÉPENSES À LA LISTE


Dans la méthode depense, modifiez la variable depense
afin que chaque nouvelle dépense soit ajoutée à la liste. Puisque
depenses n’additionne plus automatiquement les montants
dépensés, vous devez modifier la variable depense pour effectuer
les calculs et obtenir le total dépensé.

raise ValueError("Ce budget n’est pas prévu")


self.depenses[nom].append(montant) Ajoute le montant
à la liste
mbudgete = self.budgets[nom]
mdepense = sum(self.depenses[nom])
return mbudgete - mdepense

3 OBTENIR LES DÉPENSES TOTALES


Vous devez maintenant afficher tous les éléments avec la méthode afficher_
resume. Modifiez la variable depense comme indiqué ci-dessous. Vous constaterez
que le code fonctionne de manière identique si vous exécutez le module « test.py »,
avec un enregistrement pour chaque poste de dépense.

for nom in self.budgets:


mbudgete = self.budgets[nom]
Récupère le montant
mdepense = sum(self.depenses[nom]) dépensé pour chaque
budget
restant = mbudgete - mdepense

NOURRITURE

GE
ÉLECTRIC
ITÉ VOYA
Pygame Zero
Pygame Zero est un outil pour créer des jeux
en langage Python. L’écriture du code est simplifiée
par les fonctions puissantes et les types de données
disponibles dans la bibliothèque pygame.

Installation de Pygame Zero sur Windows


Suivez les étapes ci-dessous pour installer les dernières
versions de pygame et Pygame Zero sur un ordinateur
Windows. Vous devez disposer d’une connexion
Internet active. Installez un gestionnaire de paquets
2 La manière la plus simple d’installer ou de mettre à
DÉPART Ouvrez l’invite jour des bibliothèques et des modules Python est d’utiliser
1 de commande un gestionnaire de paquets appelé « pip ». Tapez la
Sous Windows 10, cliquez sur commande suivante dans l’invite de commandes et appuyez
Démarrer et ouvrez l’invite
de commande en tapant
c:\ sur Entrée.

« Cmd » dans le champ de


recherche. Si vous disposez
d’une ancienne version de Voici à quoi python -m pip install -U pip
Windows, recherchez l’invite ressemble l’icône
de commande dans le dossier de l’invite
Systèmes. de commande

Installation de Pygame Zero sur Mac


Les dernières versions de pygame et Pygame
Zero s’installent sous macOS à l’aide
du « gestionnaire de paquets Homebrew ».
Vous devez disposer d’une connexion Internet.
Installez Python 3
2 Avec Homebrew, vérifiez si Python 3 est
déjà installé sur le système, sinon installez-le.
Tapez la commande suivante dans la fenêtre
Terminal, puis appuyez sur Entrée.
Ouvrez le terminal et installez un gestionnaire de paquets
1 Servez-vous de l’application Terminal pour installer les modules.
Vous la trouverez dans le dossier « Utilitaires » sous « Applications ».
DÉPART Tapez la commande suivante, puis appuyez sur Entrée pour installer brew install python3
« Homebrew ». Vous devrez aussi fournir votre mot de passe utilisateur.

ruby -e "$(curl -fsSL https://raw.


githubusercontent.com/Homebrew/
install/master/install)"
PYTHON
Pygame Zero 164 165

MISES À JOUR
Il arrive que les programmeurs rencontrent des problèmes
avec leurs programmes Pygame Zero après la mise à jour
de leur système d’exploitation. Pour les résoudre, il suffit
de désinstaller puis de réinstaller les outils ajoutés lors
de l’installation de Pygame Zero en suivant les instructions ARRIVÉE
ci-dessous.

Installez Pygame
3 Une fois le gestionnaire de paquets Installez Pygame Zero
« pip » installé, tapez la commande 4 Enfin, tapez la commande
ci-dessous, puis appuyez sur Entrée pour suivante, puis appuyez sur Entrée
installer la bibliothèque pygame. pour installer Pygame Zero.

pip install pygame pip install pgzero

ARRIVÉE
Installez des outils supplémentaires
3 Pour installer les outils dont le système a besoin pour Installez Pygame Zero
exécuter Pygame Zero, utilisez Homebrew et saisissez la
5 Pour terminer, cette
commande suivante dans la fenêtre du terminal suivie de Entrée. commande installe Pygame Zero.

brew install sdl sdl_mixer sdl_sound pip3 install pgzero


sdl_ttf

Installez pygame
4 Saisissez cette
commande pour installer pip3 install pygame
la bibliothèque pygame
puis appuyez sur Entrée.
Knight’s Quest
Ce jeu au rythme effréné mettra vos réflexes à rude épreuve.
Il utilise des coordonnées pour créer une zone de jeu en deux
dimensions et la classe Actor de Pygame Zero pour créer
les personnages et les objets à collectionner dans le jeu.
Son exécution s’appuie sur une boucle d’événement.

Comment jouer Exploration des donjons


Ce projet est un exemple de style de jeu
Le but de ce jeu de plateau est de diriger le chevalier autour du donjon appelé dungeon crawl. Dans de tels jeux,
à l’aide des touches fléchées, mais sans traverser les murs ou la porte le joueur navigue généralement dans
verrouillée. Vous récupérez des clés en passant au travers et vous devez un environnement labyrinthique, collectant
des objets et combattant ou évitant
éviter les gardes qui se dirigent vers vous. Tout contact avec eux met fin les ennemis. Ce jeu utilise la vue 2D
à la partie. Vous gagnez si vous pouvez vous rendre à la porte après avoir classique, où le joueur semble regarder
récupéré toutes les clés. la zone de jeu d’en haut.

Jeu Pygame Zero

Les cases
du damier sont
créées pour
l’arrière-plan

Les fissures
rendent le
donjon plus
réaliste

La porte peut
être créée
n’importe où
sur le pourtour
du donjon
PYTHON
Knight’s Quest 166 167

VOUS ALLEZ APPRENDRE COMMENT L’UTILISER


❯❯Comment utiliser les listes Durée : Les concepts de ce projet sont applicables
❯❯Comment indexer des chaînes 2 heures à tous les jeux de type plateau, en particulier
de caractères ceux qui sont joués sur les téléphones
Lignes de code : mobiles. Le fond en mosaïque est utilisé dans
❯❯Comment utiliser les boucles 151 d’autres types de jeu. La logique appliquée ici
imbriquées
Niveau de difficulté pourrait être adaptée à des projets
❯❯Comment créer un jeu simple de robotique simples.
avec Pygame Zero

La boucle de jeu Pygame Zero


Un programme Pygame Zero est un exemple de programme sur boucle
d’événement. Celle-ci s’exécute en continu, appelant d’autres parties
du programme lorsqu’un événement se produit afin que des actions
puissent être entreprises. Cette boucle fait partie de Pygame Zero,
il suffit donc d’écrire les gestionnaires qui gèrent ces événements.

DÉBUT
Le décor
Le jeu est basé sur une grille simple
sur laquelle sont placées
des images carrées appelées Configuration du jeu
« tuiles ». Le décor du jeu se Les instructions de premier niveau du fichier
compose de cases représentant Python sont exécutées en priorité. Elles Configuration
le sol, les murs et la porte. peuvent donc initialiser l’état du jeu et du jeu
configurer Pygame Zero qui ouvrira alors une
fenêtre et répétera la boucle d’événements en
continu.
Gestion des événements d’entrée
À chaque exécution de la boucle, Pygame
Zero vérifie les événements d’entrée tels Gestion
qu’une touche pressée, un bouton appuyé des événements
GARDE d’entrée
ou les mouvements de la souris. Il appelle
le gestionnaire approprié (voir p. 173)
dès qu’un tel événement se produit.

Gestion des événements d’horloge


L’horloge de Pygame Zero permet de Gestion
planifier les futurs appels aux gestionnaires des événements
CHEVALIER d’événements. Ces appels retardés d’horloge
s’effectuent dans cette partie de la boucle
d’événements.

CLÉ Mise à jour de l’état du jeu


À ce stade, Pygame Zero permet à
l’utilisateur d’appeler le gestionnaire de mise Mise à jour
Les acteurs à jour pour effectuer une tâche à chaque de l’état du jeu
Les objets mobiles ou à itération de boucle. Ceci est une fonction
collectionner dans le jeu sont facultative.
appelés acteurs. Dans ce jeu,
les acteurs sont de la même taille
que les tuiles de sorte que chacun Dessin de l’interface
est contenu dans un carré de la Pour terminer, Pygame Zero appelle
Dessin
grille. Ils sont dessinés au-dessus le gestionnaire de dessin, qui redessine
de l’interface
du décor afin que l’arrière-plan le contenu de la fenêtre du jeu pour refléter
puisse être vu derrière eux. son état actuel.
CONFIGURATION

Configuration
1 Pour démarrer avec ce projet, vous devez
créer les dossiers qui contiendront tous les fichiers.
L’étape suivante sera d’écrire le code pour dessiner
l’arrière-plan et les joueurs à l’écran.

1.1 CRÉEZ LE FICHIER DU JEU 1.2 PRÉPAREZ LE DOSSIER DES IMAGES


Créez un nouveau dossier sur votre bureau et Vous avez maintenant besoin d’un dossier
nommez-le « KnightsQuest ». Ensuite, lancez IDLE et créez pour y stocker les images du projet. Créez ce dossier
un nouveau fichier nommé « quest.py » dans ce dossier en « images » dans le dossier KnightsQuest. Téléchargez
choisissant New File dans le menu File puis Save as… dans le pack de ressources de ce livre sur le site dunod.com.
ce même menu. Copiez ensuite les fichiers images du projet dans
le nouveau dossier « images ».

IDLE

File Edit Shell

New File N Sélectionnez cette


Open... O option pour créer
Open Module... un nouveau fichier IMAGES
Recent Files
Module Browser B

1.3 INITIALISEZ PYGAME ZERO Importe la fonctionnalité


Saisissez ces lignes de code de Pygame Zero
dans le fichier « quest.py » pour définir
les dimensions de la grille de jeu.
Vous obtiendrez un programme
Pygame Zero fonctionnel. import pgzrun
Enregistrez le fichier, puis choisissez
Run Module dans le menu Run
(ou appuyez sur la touche F5
de votre clavier) pour exécuter le GRID_WIDTH = 16
code. Une fenêtre noire va s’ouvrir à
ce stade. Fermez-la et continuez. GRID_HEIGHT = 12 Ces lignes définissent la largeur
et la hauteur de la grille de jeu
et la taille de chaque tuile
GRID_SIZE = 50

WIDTH = GRID_WIDTH * GRID_SIZE


WIDTH et HEIGHT sont Ceci définit
des noms de variables HEIGHT = GRID_HEIGHT * GRID_SIZE la taille de la
de Pygame Zero fenêtre du jeu

Lance Pygame Zero pgzrun.go()


ENREGISTRER
PYTHON
Knight’s Quest 168 169
DÉVELOPPEMENT AGILE
Chaque étape de ce projet décrira une nouvelle Ce processus de développement de
fonctionnalité qui rendra le programme plus programme qui consiste à décrire, développer
attractif, puis le code nécessaire pour la mettre en et tester de manière itérative de nouvelles
œuvre. Chaque étape se terminera avec un fonctionnalités fait partie d’un style de
programme que vous pourrez exécuter et tester. programmation appelé développement agile.

ELOPPER ELOPPER
DÉ V DÉ V
ER

ER

ÉCRIRE
ÉCRIRE

ITÉRATION 1 ITÉRATION 2
TEST

TEST

1.4 DESSINEZ LE FOND


Dans cette étape, vous allez dessiner le sol du donjon
sous la forme d’un damier remplissant la fenêtre du jeu.
Ajoutez les lignes de code suivantes à votre programme.
Cette fonction
convertit une
HEIGHT = GRID_HEIGHT * GRID_SIZE position de grille
en coordonnées
def screen_coords(x, y): d’écran

return (x * GRID_SIZE, y * GRID_SIZE)


def draw_background(): Boucle sur
chaque ligne
for y in range(GRID_HEIGHT): de la grille

for x in range(GRID_WIDTH): Boucle sur


chaque colonne
screen.blit("floor1", screen_coords(x, y)) de la grille

def draw():
draw_background()
pgzrun.go()

Le gestionnaire draw est


appelé automatiquement Dessine le sol screen.blit() dessine
à partir de la boucle de jeu du donjon comme l’image nommée à la
(voir p. 167) fond d’écran position d’écran donnée
CONFIGURATION

COORDONNÉES DE GRILLE ET D’ÉCRAN


La zone de jeu de ce projet est une grille de 16 carrés de 0 50 100 150
large sur 12 de haut. Chacun d’eux mesure 50 × 50 pixels. 0
La position d’un carré est indiquée par ses coordonnées x
et y, écrites sous forme d’une paire (x, y). La coordonnée x (0, 0) (1, 0) (2, 0)
fait référence à un numéro de colonne et la coordonnée y
à un numéro de ligne. En programmation, le comptage 50
commence à 0, donc la position de grille en haut à gauche
est (0, 0) et celle en bas à droite est (15, 11). En Python,
(0, 1) (1, 1) (2, 1)
range(n) itère sur les nombres 0 à n-1, donc
range(GRID_HEIGHT) itère de 0 à 11 et
range(GRID_WIDTH) de 0 à 15. 100
L’imbrication d’une boucle dans une autre permet au
programme de parcourir chaque position de la grille. (0, 2) (1, 2) (2, 2)
En multipliant les coordonnées de la grille par la taille
des cases, vous obtenez les coordonnées du coin supérieur
150
gauche de cette case par rapport au coin supérieur gauche
de la fenêtre du jeu. Pygame Zero appelle cela l’écran.

1.5 DÉFINISSEZ LE DÉCOR


Vous pouvez maintenant dessiner les murs
du donjon, ajouter une porte et définir la carte du
jeu. Ajoutez le code suivant sous les constantes dans
votre fichier IDLE. La carte est définie par 12 chaînes HEIGHT = GRID_HEIGHT * GRID_SIZE
de caractères, chacune représentant une ligne de la W représente
grille. Chaque chaîne a une largeur de 16 caractères, MAP = ["WWWWWWWWWWWWWWWW",
une case
chaque caractère décrivant une case de la grille.
"W W",
Les espaces
K est une clé, "W W", représentent
Le donjon est représenté et G est un garde les cases vides
par 12 rangées et par
16 colonnes de carreaux "W W KG W",
"W WWWWWWWWWW W",
"W W",
"W P W",
P est le joueur
"W WWWWWWWWWW W",
"W GK W W",
"W W",
"W D",
"WWWWWWWWWWWWWWWW"]

D est
SORTIE À L’ÉCRAN la porte
PYTHON
Knight’s Quest 170 171
1.6 AJOUTEZ UNE FONCTION POUR DESSINER LE DÉCOR
Ajoutez la fonction draw_scenery() au-dessus de la cette chaîne de caractères avec [x] sélectionne l’élément
fonction draw() pour dessiner l’arrière-plan de chaque case sur représenté sur la case de la colonne X (également à partir
la carte. Puisque cette dernière est une liste de chaînes de caractères, de 0). Le deuxième index est écrit immédiatement après
MAP[y] représente la ligne de grille y (à partir de 0). L’indexation de le premier sous la forme MAP[y][x].

screen.blit("floor1", screen_coords(x, y)
Boucle sur chaque
def draw_scenery(): position de la grille

for y in range(GRID_HEIGHT):
for x in range(GRID_WIDTH): Extrait l’élément
présent sur cette
square = MAP[y][x] position de grille

Dessine un carreau
if square == "W": à la position
d’écran
screen.blit("wall", screen_coords(x, y)) représentée par W

elif square == "D": Dessine une porte


à la position D
screen.blit("door", screen_coords(x, y))
def draw():
draw_background() Dessine le décor une fois que
l’arrière-plan a été dessiné,
draw_scenery() par-dessus ce dernier

LA CLASSE ACTOR
Pygame Zero fournit une classe appelée Actor pour référence. Il s’agit de deux chaînes
représenter les acteurs, ou les objets mobiles dans les de caractères, la première donnant le point
jeux. Vous pouvez créer un objet Actor avec le nom de d’ancrage x (« left », « middle » ou « right »)
l’image à utiliser pour le dessiner, en ajoutant et la seconde le point d’ancrage y (« top »,
éventuellement des mots-clés pour spécifier d’autres « middle » ou « bottom »). Vous allez définir
propriétés de l’objet. La propriété la plus importante est cette propriété sur le coin supérieur gauche
pos, qui spécifie les coordonnées d’écran sur lesquelles de l’image, car elle correspond aux
l’image doit être dessinée. La propriété anchor spécifie coordonnées renvoyées par la fonction
à quel point de l’image les coordonnées de position font screen_coords().

LEFT MIDDLE RIGHT


TOP

MIDDLE Il y a 9 points
d’ancrage
en tout

LES ACTEURS BOTTOM


CONFIGURATION

1.7 INITIALISEZ LE JOUEUR


Créez un acteur pour le joueur et définissez sa position
de départ sur la carte en ajoutant une nouvelle fonction
de configuration sous la fonction screen_coords().

def screen_coords(x, y):


return (x * GRID_SIZE, y * GRID_SIZE)
def setup_game():
Définit player comme une
global player variable globale

Crée un nouvel objet


player = Actor("player", anchor=("left", "top")) Actor et définit sa position
Boucle sur chaque d’ancrage
for y in range(GRID_HEIGHT):
position de la grille
for x in range(GRID_WIDTH):
Extrait l’élément présent sur
cette position de grille
square = MAP[y][x]
Vérifie si cette position
if square == "P": correspond au joueur Définit la position du joueur
aux coordonnées de cette
player.pos = screen_coords(x, y) position de grille

1.8 DESSINEZ LE JOUEUR


Après avoir initialisé le joueur, vous devez le dessiner à
l’écran. Ajoutez une fonction draw_actors() au-dessus de la
fonction draw() dans le code puis ajoutez un appel à cette
fonction à la fin de la fonction draw(). Enfin, appelez la fonction
setup_game() juste avant l’exécution de Pygame Zero.

screen.blit("door", screen_coords(x, y))


def draw_actors():
player.draw() Dessine l’acteur joueur
à l’écran à sa position
actuelle
def draw():
draw_background()
draw_scenery()
draw_actors()
setup_game()
pgzrun.go()

Dessine les acteurs une fois que


l’arrière-plan et le décor ont été
dessinés, par-dessus ces derniers ENREGISTRER
PYTHON
Knight’s Quest 172 173
Déplacements du joueur
2 Le joueur étant créé, il est temps d’écrire
le code pour le déplacer sur l’écran. Pour
ce faire, vous utiliserez un gestionnaire
d’événements qui réagit aux pressions
des touches.

Récupérer la position Ajouter une distance


DÉBUT actuelle (x, y) pour se déplacer
sur la grille sur l’axe x

Récupérer la case Ajouter une distance


du nouvel pour se déplacer
emplacement (x, y) sur l’axe y

OUI
La case est-elle
un mur ?

NON

OUI
La case est-elle
une porte ?

NON
Organigramme de la logique
des déplacements
Lorsque l’utilisateur appuie sur
une touche fléchée, l’acteur joueur se Définir la nouvelle
déplace d’une case dans cette direction, FIN
position en (x, y)
sauf si celle-ci est occupée par un mur
ou la porte.
DÉPLACEMENTS DU JOUEUR

2.1 AJOUTEZ UNE FONCTION UTILITAIRE


Vous devez d’abord définir une fonction pour déterminer d’une case, puis arrondir le résultat avec la fonction intégrée
sur quelle case de la grille se trouve l’acteur. Pour ce faire, vous round(). Ajoutez cette fonction sous la fonction
pouvez diviser les coordonnées x et y de l’acteur par la taille screen_coords() existante.

return (x * GRID_SIZE, y * GRID_SIZE)


Détermine la position
d’un acteur sur la grille
def grid_coords(actor):
return (round(actor.x / GRID_SIZE), round(actor.y / GRID_SIZE))

2.2 AJOUTEZ LE Dernière ligne de


GESTIONNAIRE DE CLÉS
Ajoutez maintenant un
draw_actors() la fonction draw()

gestionnaire d’événements qui


réagira lorsque l’utilisateur
def on_key_down(key): Réagit lorsque
l’utilisateur appuie
appuiera sur une touche fléchée.
Cette fonction permettra au joueur if key == keys.LEFT: sur une touche

de se déplacer dans la bonne


direction. Ajoutez cette nouvelle move_player(-1, 0) Le joueur se
déplace d’une case
fonction sous la fonction draw().
elif key == keys.UP: vers la gauche

move_player(0, -1) Le joueur se déplace


d’une case vers
elif key == keys.RIGHT: le haut

move_player(1, 0) Le joueur se déplace


d’une case vers
la droite
elif key == keys.DOWN:
move_player(0, 1) Le joueur se déplace
d’une case vers
le bas

2.3 DÉPLACEZ L’ACTEUR Récupère la


Ensuite, définissez la def move_player(dx, dy): position actuelle
fonction move_player(). du joueur
Cette fonction reçoit la distance (x, y) = grid_coords(player) sur la grille
en cases pour le déplacement
du joueur sur les axes x et y,
respectivement. Ajoutez cette
x += dx Ajoute la
distance
fonction immédiatement après Ajoute la distance sur l’axe x à x
la fonction on_key_down(). y += dy sur l’axe y à y
Correspond à
square = MAP[y][x]
la case à cette
position
Interrompt l’exécution de la if square == "W":
fonction move_player(),
si le joueur touche le mur return
elif square == "D":
Met à jour la position return La fonction
du joueur avec les s’interrompt s’il
nouvelles coordonnées player.pos = screen_coords(x, y) s’agit d’une
porte
PYTHON
Knight’s Quest 174 175
DÉPLACEMENT SUR LA GRILLE
Les coordonnées de la grille et de l’écran
débutant dans le coin supérieur gauche,
un déplacement vers la gauche ou vers (0, -1)
le haut représente un changement
négatif sur l’axe x ou y respectivement
et un déplacement vers la droite ou vers (-1, 0) (1, 0)
le bas un changement positif.

(0, 1)

3 AJOUTEZ LES CLÉS


Vous devez maintenant ajouter quelques clés à
récupérer par le joueur. Pour chaque clé marquée sur
la carte, créez un acteur avec l’image key et définissez
sa position sur la grille. Ajoutez ce code à la fonction
setup_game() pour créer les acteurs clés. Les clés
apparaîtront aux
coordonnées
définies dans
le code

Définit keys_to_collect
comme une variable globale

def setup_game():
global player, keys_to_collect
player = Actor("player", anchor=("left", "top"))
keys_to_collect = [] Définit keys_to_
collect comme une liste
for y in range(GRID_HEIGHT): initialement vide

for x in range(GRID_WIDTH):
square = MAP[y][x]
if square == "P":
player.pos = screen_coords(x, y)
Crée une clé si la case
elif square == "K": est un K
Crée l’acteur clé
key = Actor("key", anchor=("left", "top"), \ avec une image,
un ancrage
et une position
pos=screen_coords(x, y))
Ajoute cet acteur
keys_to_collect.append(key) à la liste des clés
créées ci-dessus
AJOUTEZ LES CLÉS

NOMS SPÉCIAUX 3.1 DESSINEZ LES CLÉS


Rendez le jeu plus intéressant en ajoutant
plusieurs clés à collecter par le joueur. Dessinez ces
Il aurait semblé naturel de nommer la variable clés en ajoutant les lignes suivantes à la fonction
globale de la liste des clés keys. Cependant, draw_actors().
vous devez être prudent lors du choix des
noms de vos variables pour éviter toute
confusion avec les noms de fonctions def draw_actors():
Dessine tous les acteurs de
intégrées ou les noms spécifiques à Pygame la liste keys_to_collect
player.draw()
Zero. Key est un objet spécial qui représente
les touches du clavier. for key in keys_to_collect:
key.draw()

3.2 RÉCUPÉREZ LES CLÉS


Lorsque le joueur se déplace sur une case
contenant une clé, le programme supprime cette clé de
la liste des clés à collecter et arrête de la dessiner à l’écran.
Dès qu’il n’y a plus de clés à récupérer, le joueur est
autorisé à se déplacer dans la case de la grille représentant
la porte. Pour obtenir ce résultat, apportez les
modifications suivantes à la fonction move_player()
puis enregistrez le code et testez le programme. Vous
devriez pouvoir entrer par la porte après avoir récupéré
toutes les clés, mais voyez ce qui se passe si vous essayez
d’aller plus loin – nous allons résoudre ce problème
dans les prochaines étapes.

Déplacez le joueur sur


la clé pour la ramasser

Vérifie si la liste
keys_to_collect
n’est pas vide

elif square == "D":


Boucle sur chaque clé
if len(keys_to_collect) > 0: de la liste
La fonction s’interrompt
return si la liste n’est pas vide Récupère la position
for key in keys_to_collect: sur la grille d’un acteur clé

Vérifie si la nouvelle position du joueur


(key_x, key_y) = grid_coords(key) correspond à la position de la clé

if x == key_x and y == key_y: Supprime cette clé de la liste si


la position du joueur
keys_to_collect.remove(key) correspond à sa position

break Sortie de la boucle for,


puisqu’une case ne peut
player.pos = screen_coords(x, y) contenir qu’une seule clé
ENREGISTRER
PYTHON
Knight’s Quest 176 177
3.3 GAME OVER !
Si le joueur se déplace dans la case qui contient la porte
(après avoir ramassé toutes les clés), le jeu doit prendre fin et le
joueur ne doit plus être autorisé à bouger. Vous allez donc mettre
à jour la fonction setup_game() afin de définir une nouvelle Définit game_over
variable globale qui vérifie si le jeu est terminé ou non. comme une variable
globale

def setup_game():
global game_over, player, keys_to_collect
game_over = False Définit
la variable
player = Actor("player", anchor=("left", "top")) sur False
initialement
keys_to_collect = []
for y in range(GRID_HEIGHT):

3.4 DÉCLENCHEZ
LE GAME OVER
Vous allez maintenant régler la
fin du jeu lorsque le joueur arrive
à la porte. Modifiez la fonction def move_player(dx, dy):
move_player() puis testez le
programme. Vous ne devriez global game_over
plus pouvoir bouger lorsque
if game_over: Vérifie si game_over
vous arrivez à la porte, le
est défini
programme ne plante plus.
return La fonction
s’interrompt,
(x, y) = grid_coords(player) sans
déplacement
x += dx
y += dy
square = MAP[y][x]
if square == "W":
return
Définit
elif square == "D": game_over
sur True
if len(keys_to_collect) > 0: et continue le
déplacement
return Vérifie si toutes
les clés ont été
ramassées
else:
game_over = True
for key in keys_to_collect:
ENREGISTRER
AJOUTEZ LES CLÉS

3.5 MESSAGE DE FIN


Lorsque le joueur arrive à la porte, le programme
s’arrête, mais il ne sait pas que le jeu est terminé. Vous devez
ajouter un message « GAME OVER » qui s’affichera à l’écran à
la fin du jeu. Définissez une nouvelle fonction draw_game_
over(), pour afficher les mots GAME OVER à l’écran. Ajoutez
le code au-dessus de la fonction draw(). GAME OVER

Définit la position du message


GAME OVER à l’écran

def draw_game_over(): Ancre le bord


inférieur Dessine le texte
screen_middle = (WIDTH / 2, HEIGHT / 2) du texte à cet endroit

screen.draw.text("GAME OVER", midbottom=screen_middle, \


fontsize=GRID_SIZE, color="cyan", owidth=1)
def draw():
draw_background() Dessine le texte
à cet endroit
draw_scenery()
draw_actors()
if game_over:
draw_game_over()

DESSINER UN TEXTE AVEC PYGAME ZERO


La fonction screen.draw. ARGUMENTS
text() permet de dessiner Nom de la propriété Description
un texte à l’écran. On lui
transmet une chaîne de fontsize Taille de la police en pixels
caractères avec quelques
arguments facultatifs, comme Chaîne de caractères donnant un nom de couleur ou un code
color HTML de type « #FF00FF », ou une combinaison RVB comme
indiqué ci-contre. Consultez (255, 0, 255)
la documentation en ligne de
Pygame Zero pour connaître Un nombre donnant une largeur relative pour dessiner un
les autres arguments. owidth contour autour de chaque caractère ; la valeur par défaut étant
0 si non spécifiée ; 1 représente une bonne largeur de contour

La couleur du contour (au même format que color),


ocolor
noir par défaut si non spécifié

topleft, bottomleft, topright,


Utilisez un de ces mots clés avec la paire de coordonnées x et y
bottomright, midtop, midleft,
par rapport à un point d’ancrage
midbottom, midright, center
PYTHON
Knight’s Quest 178 179
3.6 CRÉEZ LES GARDES
Jusqu’à présent, il est très facile de gagner. Pour compliquer
un peu les choses, ajoutez des gardes comme obstacles. Pour chaque
garde sur la carte, créez un acteur avec l’image appropriée Définit guards
et définissez sa position sur la grille en modifiant la fonction comme variable
setup_game() comme indiqué ci-dessous. globale

def setup_game():
global game_over, player, keys_to_collect, guards
game_over = False
player = Actor("player", anchor=("left", "top"))
keys_to_collect = []
Définit guards avec
guards = [] une liste initialement vide

for y in range(GRID_HEIGHT):
for x in range(GRID_WIDTH):
square = MAP[y][x]
if square == "P":
player.pos = screen_coords(x, y)
elif square == "K":
key = Actor("key", anchor=("left", "top"), \
pos=screen_coords(x, y))
keys_to_collect.append(key) Crée l’acteur
guard
elif square == "G":
guard = Actor("guard", anchor=("left", "top"), \
pos=screen_coords(x, y))
guards.append(guard)

Crée une garde si Ajoute cet acteur à la liste


la case est de type G des gardes créée ci-dessus

3.7 DESSINEZ LES GARDES


Pour ajouter un autre garde au jeu,
ajoutez ce code à la fonction draw_actors().
key.draw()
Dessine tous
Enregistrez puis exécutez le programme pour
vérifier si les gardes apparaissent à l’écran.
for guard in guards: les acteurs
de la liste
guard.draw() des gardes

ENREGISTRER
DÉPLACEMENTS DES GARDES

Déplacements des gardes


4 Une fois que les gardes sont en place, ils doivent se DÉBUT

rapprocher d’une case le long de l’axe x ou y toutes les


demi-secondes en direction du joueur, sauf si celle-ci
représente un mur. Si le mouvement positionne le garde
sur la case occupée par le joueur, alors la partie est Déplacement
du garde
terminée. Comme le joueur, les gardes ne doivent plus
bouger si la partie est terminée. Ajoutez le code dans
cette section pour faire bouger les gardes.

OUI
Le jeu est-il terminé ?

NON

Récupérer la position
du garde sur la grille

Récupérer la position
du joueur sur la grille

Trouver la case adjacente au garde,


la plus proche du joueur et non un mur

Déplacer l’acteur garde vers


la nouvelle position de grille

OUI Le garde est-il à


la même position que
le joueur ?

Terminer le jeu
NON

FIN
PYTHON
Knight’s Quest 180 181
4.1 AJOUTEZ UNE FONCTION POUR DÉPLACER LE GARDE
Vérifie si le joueur
Ajoutez la fonction move_guard() qui doit déplacer
n’importe quel acteur garde. Vous allez donc lui transmettre Récupère est à droite du
les coordonnées du garde sur lequel elle doit agir. Ajoutez le code la position garde et si la case
suivant immédiatement après la fonction move_player(). du joueur à droite est un mur

break
player.pos = screen_coords(x, y)
def move_guard(guard):
Définit game_over
global game_over comme variable globale

if game_over: La fonction s’interrompt,


sans déplacement,
return si le jeu est terminé

(player_x, player_y) = grid_coords(player) Récupère


la position
(guard_x, guard_y) = grid_coords(guard) de ce garde

if player_x > guard_x and MAP[guard_y][guard_x + 1] != "W":


Incrémente la position x du garde
guard_x += 1 de 1 si la condition ci-dessus est vraie

elif player_x < guard_x and MAP[guard_y][guard_x - 1] != "W":


guard_x -= 1 Vérifie si le joueur est
à gauche du garde
elif player_y > guard_y and MAP[guard_y + 1][guard_x] != "W":
guard_y += 1
elif player_y < guard_y and MAP[guard_y - 1][guard_x] != "W":
guard_y -= 1
guard.pos = screen_coords(guard_x, guard_y) Met à jour la position
de l’acteur garde aux
if guard_x == player_x and guard_y == player_y: coordonnées d’écran
de la position de grille
(éventuellement mise à jour)
game_over = True

Termine le jeu si la position


du garde correspond à celle
du joueur

4.2 DÉPLACEZ TOUS LES GARDES


Ajoutez maintenant une Boucle sur chaque
fonction pour déplacer chacun
def move_guards():
garde dans la liste
des gardes à tour de rôle. Ajoutez ce des gardes
code juste en dessous des lignes que for guard in guards:
vous avez tapées à l’étape précédente.
move_guard(guard) Déplace tous
les acteurs gardes
de la liste
DÉPLACEMENTS DES GARDES

4.3 APPELEZ LA FONCTION Définit l’intervalle


Enfin, ajoutez ce code pour
appeler la fonction move_guards()
GRID_SIZE = 50 de temps entre
deux déplacements
toutes les demi-secondes. Vous devez
ajouter une nouvelle constante en haut
GUARD_MOVE_INTERVAL = 0.5 de garde à l’écran

du fichier pour spécifier cet intervalle.

4.4 PLANIFIEZ L’APPEL


Pour garantir un déplacement régulier des gardes INTERVAL seconde. Exécutez le programme et vérifiez si
toutes les demi-secondes, vous devez ajouter une minuterie les gardes poursuivent le joueur. Vous devriez pouvoir voir
qui appelle régulièrement la fonction move_guards(). le message GAME OVER si un garde attrape le joueur.
Ajoutez le code suivant au bas du fichier qui appelle la Changez la valeur de GUARD_MOVE_INTERVAL pour rendre
fonction move_guards() après chaque GUARD_MOVE_ le jeu plus facile ou plus difficile.

setup_game()
clock.schedule_interval(move_guards, GUARD_MOVE_INTERVAL)
pgzrun.go()

Planifie des appels réguliers à


la fonction move_guards() ENREGISTRER

L’OBJET CLOCK
L’objet clock fournit des méthodes pour planifier les fonction, saisissez son nom sans les parenthèses, car
appels de fonction dans un programme, notamment il n’y a aucun moyen de connaître quels arguments
celles présentées ci-dessous. Pour appeler une seront utilisés lors de son futur appel.

MÉTHODES POUR PLANIFIER LES APPELS DE FONCTION


Méthode Description

Appelle function dans delay secondes. Plusieurs appels de


clock.schedule(function, delay)
cette fonction planifieront plusieurs appels futurs à function,
même si les précédents ne se sont pas encore produits.

Similaire à clock. schedule(), sauf qu’un nouvel appel annulera


clock.schedule_unique(function, delay) tous les appels planifiés précédemment qui ne se sont pas
encore produits.

clock.schedule_interval(function, interval) Appelle function toutes les interval secondes.

clock.unschedule(function) Annule tous les précédents appels à function.


PYTHON
Knight’s Quest 182 183
5 SUIVI DU RÉSULTAT
Lorsque le jeu se termine et que le texte GAME OVER
s’affiche, vous pouvez ajouter un message précisant si le
joueur a déverrouillé la porte et gagné, ou s’il a été attrapé
par un garde et qu’il a perdu. Créez une nouvelle variable
globale pour enregistrer si le joueur a gagné ou perdu. Définit player_won
Ajoutez ce code à la fonction setup_game(). comme variable globale

def setup_game():
global game_over, player_won, player, keys_to_collect, guards
game_over = False
Définit la variable comme
player_won = False False initialement

player = Actor("player", anchor=("left", "top"))

5.1 DÉFINISSEZ
UNE VARIABLE
Maintenant, définissez la variable
def move_player(dx, dy):
globale lorsque le jeu se termine
alors que le joueur a atteint la porte
global game_over, player_won
avec toutes les clés. Ajoutez ce
code à la fonction move_ if game_over:
player().
return
(x, y) = grid_coords(player)
x += dx
y += dy
square = MAP[y][x]
if square == "W":
return
elif square == "D":
if len(keys_to_collect) > 0:
return
else:
game_over = True
Définissez-la en True quand player_won = True
le joueur gagne le jeu
for key in keys_to_collect:
SUIVI DU RÉSULTAT

5.2 AJOUTEZ LES MESSAGES


Rassembler toutes les clés et atteindre la porte du nouveau message. Cela ancre le bord supérieur
est le seul moyen pour le joueur de gagner la partie. Si le jeu du message au centre de l’écran. Comme le message GAME
se termine d’une autre manière, le joueur a donc perdu. OVER est ancré par son bord inférieur, ce nouveau message
Vous devez afficher un message approprié dans chaque cas. apparaîtra centré en dessous. Lancez le jeu et perdez
Ajoutez le code suivant à la fonction draw_game_over(). délibérément. Fermez ensuite la fenêtre puis relancez le jeu
Vous utiliserez la propriété midtop pour définir l’emplacement en essayant de gagner. Cela ne devrait pas être trop dur.

screen.draw.text("GAME OVER", midbottom=screen_middle, \


fontsize=GRID_SIZE, color="cyan", owidth=1)
if player_won:
screen.draw.text("Vous avez gagné!", midtop=screen_middle, \
fontsize=GRID_SIZE, color="green", owidth=1)
Affiche le message à l’écran
else:
screen.draw.text("Vous avez perdu!", midtop=screen_middle, \
fontsize=GRID_SIZE, color="red", owidth=1)

Utilisez différentes
couleurs pour faire
ressortir les différents
résultats

GAME OVER GAME OVER Le nouveau message


VOUS AVEZ GAGNÉ ! VOUS AVEZ PERDU ! apparaît ici

ENREGISTRER

5.3 RELANCEZ LE JEU


Pour le moment, le seul moyen de redémarrer le jeu est setup_game() contient tout le code nécessaire
de fermer la fenêtre et de relancer le programme. Ajoutez le code à l’initialisation du jeu, et elle recréera tous les acteurs
suivant après la fonction draw() pour que l’utilisateur puisse dans leurs positions de départ. Elle réinitialisera également
relancer le jeu en appuyant sur la barre d’espace. La fonction les variables pour le suivi de la progression du jeu.

if game_over:
draw_game_over()
def on_key_up(key):
Vérifie si la barre d’espace a été
if key == keys.SPACE and game_over: activée une fois le jeu terminé

setup_game() Appelle setup_game()


pour réinitialiser le jeu
PYTHON
Knight’s Quest 184 185
5.4 AJOUTEZ UN MESSAGE
Il faut signaler au joueur qu’il peut appuyer
sur la barre d’espace pour redémarrer. Ajoutez un message
à la fin de la fonction draw_game_over(). Utilisez
l’ancrage midtop pour positionner le texte sous le centre
de l’écran. Lancez le jeu. Vous devriez pouvoir le relancer GAME OVER
maintenant. VOUS AVEZ PERDU !
Appuyez sur la barre
d’espace pour redémarrer

else:
screen.draw.text("Vous avez perdu!", midtop=screen_middle, \
fontsize=GRID_SIZE, color="red", owidth=1)
screen.draw.text("Appuyez sur la barre d’espace pour redémarrer", \
midtop=(WIDTH / 2, HEIGHT / 2 + GRID_SIZE), \
Affiche le nouveau
message à l’écran fontsize=GRID_SIZE / 2, color="cyan", owidth=1)

Animer les acteurs


6 Pour le moment, les acteurs donnent l’impression de sauter d’une
case à l’autre dans la grille. Ce serait beaucoup mieux si leur déplacement
était plus fluide. Vous pouvez y parvenir en utilisant la fonction animate()
de Pygame Zero.

6.1 ANIMEZ LES GARDES


La fonction animate() crée des animations qui s’exécutent la propriété que vous souhaitez modifier (pos)
automatiquement à chaque itération de la boucle de jeu pour mettre et la durée de fonctionnement de l’animation
à jour les propriétés des acteurs. Apportez la modification suivante (duration). Si vous enregistrez et exécutez le code
à la fonction move_guard() pour animer les gardes. Les paramètres maintenant, vous verrez les gardes se déplacer plus
de la fonction animate() incluent l’acteur à animer (guard), harmonieusement vers le joueur.

elif player_y < guard_y and MAP[guard_y - 1][guard_x] != "W":


guard_y -= 1
animate(guard, pos=screen_coords(guard_x, guard_y), \
duration=GUARD_MOVE_INTERVAL) Déplace l’acteur guard
de manière fluide au lieu
if guard_x == player_x and guard_y == player_y: de le téléporter d’un coup
d’une case à l’autre
game_over = True
ANIMER LES ACTEURS

ANIMATIONS
La fonction animate() peut recevoir deux et on_finished, qui vous permet de spécifier
autres arguments facultatifs : tween, qui le nom d’une fonction que vous souhaitez appeler
spécifie comment animer les valeurs à la fin de l’animation. La valeur de tween doit être
intermédiaires de la propriété, l’une des chaînes mentionnées ci-dessous.

VALEURS DU MOT CLÉ TWEEN


Valeur Description
Animer uniformément depuis la valeur de propriété actuelle
"linear"
jusqu’à la nouvelle ; c’est la valeur par défaut

"accelerate" Commencer lentement puis accélérer

"decelerate" Commencer rapidement puis ralentir

"accel_decel" Accélérer puis ralentir à nouveau

"end_elastic" Osciller (comme attaché à un élastique) à la fin

"start_elastic" Osciller au début

"both_elastic" Osciller au début et à la fin

"bounce_end" Rebondir (comme une balle) à la fin

"bounce_start" Rebondir au début

"bounce_start_end" Rebondir au début et à la fin

6.2 ANIMEZ LE JOUEUR


Contrairement aux gardes, le joueur n’a pas de touches de mouvement afin d’échapper rapidement
vitesse de déplacement particulière, vous devez donc la aux gardes. Mettez à jour la fonction move_player()
définir. Pour ce faire, ajoutez une constante en haut de comme indiqué ci-dessous. Testez le jeu et vérifiez si
votre fichier. Choisissez 0,1 seconde comme durée l’acteur joueur glisse rapidement d’une case à l’autre.
pendant laquelle l’utilisateur pourra appuyer sur les

GUARD_MOVE_INTERVAL = 0.5
Temps nécessaire à l’acteur
PLAYER_MOVE_INTERVAL = 0.1
player pour passer
d’une position à une autre

keys_to_collect.remove(key)
break
animate(player, pos=screen_coords(x, y), \ Met à jour la
position du joueur
duration=PLAYER_MOVE_INTERVAL) après 0,1 seconde
ENREGISTRER
PYTHON
Knight’s Quest 186 187
Créer un damier en arrière-plan
7 Reprenons certains des éléments graphiques
précédents et voyons si nous pouvons rendre le jeu
un peu plus intéressant. Pour le moment, l’arrière-plan
est constitué de la même case répétée sur tout le sol.
Ajoutez un motif de damier pour donner au sol un aspect
« carrelage ».

7.1 METTRE À JOUR LA FONCTION D’ARRIÈRE-PLAN


Dans un damier, les cases impaires de la première rangée pour les autres cases. Vous déterminez si un nombre est
sont d’une couleur et les cases paires d’une autre ; sur la deuxième pair ou impair en utilisant l’opérateur modulo de Python
ligne, les couleurs sont inversées. Les lignes suivantes répètent (voir l’encadré ci-dessous). Apportez les modifications
ce modèle. Vous pouvez le faire en utilisant la première couleur sur suivantes à la fonction draw_background().
les colonnes impaires de lignes impaires puis la deuxième couleur

def draw_background():
for y in range(GRID_HEIGHT):
Vérifie si les valeurs x Dessine la case floor1
for x in range(GRID_WIDTH): et y sont toutes à cette position si
les deux impaires la condition ci-dessus
if x % 2 == y % 2: ou paires est vraie

screen.blit("floor1", screen_coords(x, y))


else:
screen.blit("floor2", screen_coords(x, y))

Dessine la vignette floor2


si une seule des valeurs x et y
est paire ou impaire

L’OPÉRATEUR MODULO (RESTE)


N N % 2 N % 3 N % 4 N % 5
Pour déterminer la parité d’un nombre, on peut diviser
ce nombre par deux, puis vérifier s’il y a un reste 0 0 0 0 0
ou non. L’opérateur arithmétique modulo de Python 1 1 1 1 1
retourne le reste d’une division. Il s’écrit sous la forme 2 0 2 2 2
a % b qui donne le reste de la division de a par
3 1 0 3 3
b. Vérifiez le résultat de la division des coordonnées x 4 0 1 0 4
et y par 2. Si les restes sont identiques, alors soit la ligne
et la colonne sont toutes deux impaires, soit elles sont 5 1 2 1 0
6 0 0 2 1
toutes les deux paires. Voici quelques exemples
du fonctionnement de l’opérateur modulo. 7 1 1 3 2
8 0 2 0 3
9 1 0 1 4
CRÉER UN DAMIER EN ARRIÈRE-PLAN

7.2 AJOUTEZ DES FISSURES !


Pour terminer, rendez le donjon plus réaliste en ajoutant aléatoires dans la fonction draw_background() et vous
quelques fissures au sol. Vous pouvez le faire en dessinant les dessinerez une fissure en fonction de ces nombres. Étant donné
fissures sur quelques images de case choisies au hasard. que les mêmes cases doivent être choisies pour les fissures chaque
Commencez par importer le module random de Python et fois que la fonction draw_background() est appelée, définissez
ajoutez-le au début du fichier. Vous devez utiliser la fonction la valeur d’initialisation (voir ci-dessous, à droite) à un nombre
randint(a, b) de ce module, qui renvoie un nombre entier spécifique au début de la fonction.
aléatoire entre a et b (voir ci-contre). Vous choisirez des nombres

import pgzrun PLAYER_MOVE_INTERVAL = 0.1


import random BACKGROUND_SEED = 123456

Rend la fonctionnalité du Ajoute une nouvelle


module random disponible constante avec la valeur
d’initialisation du générateur
de nombre

Indique au programme de choisir des nombres


aléatoires à partir de BACKGROUND_SEED

def draw_background():
random.seed(BACKGROUND_SEED)
for y in range(GRID_HEIGHT):
for x in range(GRID_WIDTH):
if x % 2 == y % 2:
screen.blit("floor1", screen_coords(x, y))
else:
screen.blit("floor2", screen_coords(x, y)) Choisit un
nombre aléatoire
n = random.randint(0, 99) entre 0 et 99

Vérifie si n est inférieur à 5


if n < 5:
screen.blit("crack1", screen_coords(x, y)) Dessine crack1 sur
le dessus de la case à
cette position si n
elif n < 10: est inférieur à 5
screen.blit("crack2", screen_coords(x, y))

Vérifie si n est Dessine crack2 sur le dessus


inférieur à 10 de la case à cette position si n est
inférieur à 10, mais pas à 5
PYTHON
Knight’s Quest 188 189
NOMBRES ALÉATOIRES ET PROBABILITÉ
La fonction randint() renvoie un entier dans une vous verrez que si n est un nombre entre 0 et 4,
plage spécifique. Des appels répétés retourneront des l’image crack1 sera dessinée. Ainsi, vous pouvez
numéros à peu près répartis dans cette plage. En fait, vous attendre à ce que cela se produise sur
cette fonction renvoie des nombres pseudo-aléatoires environ 5 % des carreaux. Si n est supérieur à 5 et
car ils sont générés par un algorithme qui générera se situe entre 5 et 9, l’image crack2 sera
toujours la même séquence de nombres à partir d’une dessinée, ce qui devrait également se produire
valeur d’initialisation. Si vous choisissez à plusieurs pour environ 5 % des carreaux. La carte
reprises des nombres aléatoires entre 0 et 99, alors comportant 118 carreaux, vous pouvez vous
vous devriez obtenir les numéros 0 à 4 environ 5 % attendre à voir environ 6 fissures de chaque type
du temps. Si vous regardez l’exemple ci-dessous, (5 % de 118).

Récupère un entier
n = random.randint(0, 99) aléatoire entre
0 et 99
if n < 5:
screen.blit("crack1", screen_coords(x, y)) Dessine crack1 si n
se situe entre 0 et 4
elif n < 10:
screen.blit("crack2", screen_coords(x, y)) Dessine crack2 si n
se situe entre 5 et 9

7.3 C’EST L’HEURE DE JOUER


Le jeu devrait maintenant être prêt. Exécutez le
programme pour vous assurer qu’il fonctionne correctement.
S’il y a un problème, vérifiez soigneusement et corrigez votre
code (voir pages 118‑121) et exécutez-le à nouveau.

Déplacez le joueur
rapidement pour
récupérer toutes les clés.
Attention aux gardes

ENREGISTRER
Trucs et astuces
Ouvrir la porte
Les utilisateurs vont immédiatement se rendre compte qu’ils cela deviendra évident. La meilleure façon de
doivent collecter des clés, mais ils ne comprendront pas le faire est de ne dessiner la porte que lorsqu’il
forcément quand il sera possible de quitter le donjon. Si vous reste des clés à collecter. Modifiez la fonction
ouvrez visuellement la porte dès que la dernière clé est collectée, draw_scenery() comme indiqué ci-dessous.

screen.blit("wall", screen_coords(x, y))


elif square == "D" and len(keys_to_collect) > 0: Vérifie s’il reste
des clés à collecter
screen.blit("door", screen_coords(x, y))

Continue de bouger !
Il serait intéressant que le joueur se déplace de façon continue move_player() comme indiqué ici. Ajoutez ensuite la fonction
lorsqu’une touche fléchée est maintenue enfoncée, plutôt repeat_player_move() sous cette dernière. Elle utilise
que d’être obligé de l’enfoncer de façon répétitive. L’argument des membres de l’objet keyboard de Pygame Zero pour vérifier
on_finished de la fonction animate() permet justement si une touche particulière est pressée. Si vous trouvez que le jeu
à l’utilisateur de spécifier quelle fonction doit être appelée est maintenant trop facile, modifiez la constante PLAYER_MOVE_
à la fin du mouvement de l’acteur. Modifiez la fonction INTERVAL pour ralentir le joueur et rendre le jeu plus difficile.

Vérifie si la touche fléchée


break est toujours pressée
et répète le mouvement
animate(player, pos=screen_coords(x, y), \
Réglez cet intervalle à
duration=PLAYER_MOVE_INTERVAL, \ la moitié de l’intervalle
de déplacement du
on_finished=repeat_player_move) garde, pour compliquer
la tâche du joueur

def repeat_player_move(): GUARD_MOVE_INTERVAL = 0.5


if keyboard.left: Vérifie si la PLAYER_MOVE_INTERVAL = 0.25
touche fléchée
move_player(-1, 0) gauche est
toujours
pressée
elif keyboard.up:
move_player(0, -1) Appelle move_player()
à nouveau pour répéter le
elif keyboard.right: mouvement

move_player(1, 0)
Le joueur va maintenant
elif keyboard.down:
se déplacer en continu
dans la direction choisie
move_player(0, 1)
PYTHON
Knight’s Quest 190 191

Faites un peu plus de place


Vous pouvez rendre le jeu plus intéressant en concevant au début du fichier. Ensuite, modifiez
une carte plus grande et plus compliquée. Essayez celle soigneusement la constante MAP comme
que nous proposons ci-dessous. Commencez par modifier indiqué ici. Vous pouvez ajouter autant
la taille de la grille en modifiant les valeurs des constantes de gardes ou de clés que vous le souhaitez.

GRID_WIDTH = 20 MAP = ["WWWWWWWWWWWWWWWWWWWW",


GRID_HEIGHT = 15 "W w W",
"W W W",
Augmentez la valeur Ce donjon comporte "W W W D",
de ces variables 20 colonnes, donc
il devrait y avoir "W W G K W W",
20 caractères W
dans cette ligne "W WWWWWWWWWWWW W",
N’oubliez pas d’ajouter
la porte sur cette ligne "W W",
"W W",
"W WWWWW WWWWW W",
"W W W KW W",
"W W P WG W W",
"W WWWWWWWW W W",
"W G W",
"W K W",
"WWWWWWWWWWWWWWWWWWWW"]

Ce donjon comporte 15 rangées,


donc il devrait y avoir 15 lignes au total
GRANDE ZONE DE JEU

Téléchargez de nouveaux
personnages
Vous pouvez télécharger vos
propres images pour ajouter
différents personnages au jeu,
ou configurer un arrière-plan
complètement nouveau.
Copiez les nouvelles images
dans le dossier « images »
créé précédemment. Modifiez
ensuite le code de sorte que
les noms d’image de l’acteur
correspondent aux nouveaux ENNEMI JOUEUR OBJET
noms de fichiers.
LES AUTEURS

Clif Kussmaul est consultant principal chez Green Dr Tammy Pirmann est professeure d’informatique au
Mango Associates, LLC, où il conçoit et met en œuvre College of Computing and Informatics de l’université
des projets de recherche, des ateliers de développement Drexel de Philadelphie (États-Unis). Reconnue pour son
pédagogiques et des activités scolaires. Il a enseigné action sur l’équité dans l’enseignement de l’informatique
pendant 20 ans en université et a travaillé à temps plein et pour sa promotion de la recherche guidée, elle a été
et à temps partiel dans le développement de logiciels coprésidente du Standards Committee de la Computer
et le conseil. Science Teachers Association et conseillère pour le K12
CS Framework.
Sean McManus a écrit et co-écrit des livres sur la
programmation, notamment Mission Python, Scratch Dr Martin Goodfellow est maître de conférences au
Programming in Easy Steps, Cool Scratch Projects in Easy département des sciences de l’informatique de l’université
Steps et Raspberry Pi For Dummies. de Strathclyde. Il a également développé du contenu
pédagogique et organisé des ateliers d’informatique pour
Craig Steele est un spécialiste en enseignement d’autres organisations dans le monde entier, notamment
de l’informatique qui aide les gens à développer leurs Google, Oracle, CoderDojo Scotland, Glasgow Life,
compétences numériques dans un environnement Makeblock et la BBC.
amusant et créatif. Il dirige Digital Skills Education et
il fait partie des fondateurs de CoderDojo en Écosse, Jonathan Hogg est un artiste audiovisuel qui a passé la
qui gère des clubs de programmation gratuits pour les dernière décennie à construire des œuvres à partir
jeunes. Craig a organisé des ateliers numériques avec de combinaisons de logiciels, d’électronique, de son,
la Raspberry Pi Foundation, le Glasgow Science Centre, de lumière, de bois, de plastique et de métal. Il travaille
la Glasgow School of Art et le projet BBC micro:bit. souvent avec des jeunes, animant des ateliers créatifs
et techniques. Il a commencé sa carrière dans la
Dr Claire Quigley a étudié l’informatique à l’université recherche et l’enseignement de l’informatique à
de Glasgow, où elle a obtenu une licence et un doctorat. l’université de Glasgow.
Elle a travaillé au laboratoire d’informatique de l’université
de Cambridge et au Glasgow Science Center. Elle est David Krowitz a appris à programmer au début
actuellement coordinatrice STEM chez Glasgow Life et des années 80 sur un Commodore VIC-20 branché sur
enseigne à temps partiel au Conservatoire royal d’Écosse, un téléviseur noir et blanc portable. Depuis, il étudie et
en collaboration avec des étudiants en musique (BEd). pratique la programmation. Aujourd’hui, Dave consacre
Claire participe à la gestion de CoderDojo Scotland depuis son temps à créer une architecture de microservices
sa création en 2012. pour les entreprises. C’est un inconditionnel des modèles
de conception orientés objet et de l’architecture logicielle.

Vous aimerez peut-être aussi