Algorithmique 1 Introduction

publicité
Lycée Maximilien Sorre
BTS SIO 1
Année 2016-2017
Algorithmique
1
Introduction
1.1 Algorithmes
Le mot algorithme vient du nom du mathématicien et astronome Al Khuwarizmi (latinisé
au Moyen Âge en Algoritmi), qui, au IXe siècle écrivit le premier ouvrage systématique sur
la solution des équations linéaires et quadratiques.
Dénition.
Un
algorithme
est une suite nie d'opérations ou d'instructions à appliquer
dans un ordre déterminé à un nombre ni de données pour résoudre un problème en un
nombre ni d'étapes.
Exemples.
•
•
On peut trouver des exemples d'algorithmes dans la vie courante :
recette de cuisine,
notice de montage de meuble.
Remarque. Dans le domaine informatique, les algorithmes sont une suite nie d'instructions
écrites dans un langage informatique permettant de demander à l'ordinateur de résoudre un
problème donné.
1.2 Langages informatiques
Le langage est ce qui permet à deux humains de communiquer. Si nous nous comprenons,
c'est parce que nous appliquons un ensemble de règles qui dénit notre langage (en français,
les règles d'orthographe et de grammaire).
L'ordinateur a son propre langage, avec ses propre règles. Le langage de l'ordinateur est le
langage binaire, qui est composé uniquement de 0 et de 1.
Exemple.
On peut par exemple traduire le mot Bonjour (codage UTF-8) par le code
binaire 01000010011011110110111001101010011011110111010101110010 .
Bien sûr, cela ne serait pas très pratique d'écrire directement nos algorithmes en binaire.
C'est pour cela que pour communiquer avec la machine, on a recours à ce que l'on appelle un
langage informatique (comme par exemple Python, C, C++, etc). Les algorithmes sont écrits
dans un langage informatique, et un programme se charge ensuite de traduire ces algorithmes
en langage binaire compréhensible par la machine.
Durant l'année, nous allons utiliser deux langages pour nos algorithmes :
•
un langage naturel, peu formel, exprimé en français ; ce langage est aussi appelé
•
le langage informatique nommé
code.
Remarque.
pseudo-
Python.
En général, on comprend quelqu'un même si il fait des fautes d'orthographe
ou de grammaire. Attention, l'ordinateur lui n'est qu'une machine. Si on ne respecte pas les
règles du langage informatique utilisé, l'ordinateur ne comprendra pas.
1
1.3 Python
Python est un langage informatique multi-plateforme placé sous licence libre et utilisé dans
de nombreux milieux (en particulier dans le domaine scientique et dans de nombreuses
entreprises). Python a été crée en 1989 par le programmateur Guido van Rossum, fan de la
série télévisée des Monty Python (d'où le nom Python ).
Durant l'année, nous allons utiliser la version 3 de Python (les exemples donnés dans ce
document sous formulés avec la version Python 3.4.0).
Pour faciliter l'écriture d'algorithmes, nous allons travailler dans un environnement de développement intégré (en anglais IDE, pour Integrated Development Environment). Plusieurs
environnements de programmation existent. Par exemple
•
Idle 3 est l'environnement classique, qui est presque toujours installé avec Python (fonc-
tionne sous Windows, Linux et Mac OS).
•
Le pack Python portable contient une version de Python, l'environnement de programma-
tion PyScripter et plusieurs bibliothèques Python.
Ce pack peut être copié sur clé USB et exécuté sans installation sur l'ordinateur. Le téléchargement se fait à l'adresse :
http://portablepython.com/wiki/PortablePython3.2.5.1/
L'avantage de ce pack est qu'il permet d'avoir un environnement Python familier où que l'on
soit pourvu de ne pas oublier sa clé USB. L'un de ses inconvénients est qu'il ne fonctionne
que sous Windows.
•
Spyder est un environnement sous licence libre relativement proche de ce que fournit le
pack Python portable. Il fonctionne sous Windows, Linux et Mac OS. Téléchargement du
pack Anaconda contenant Spyder et des bibliothèques Python à l'adresse :
http://continuum.io/downloads
En général, les environnements de programmation sont constitués de plusieurs zones, notamment :
•
un interpréteur dans lequel on saisit des instructions en Python. L'interpréteur les traduit
en langage machine, puis traduit la réponse fournie par la machine en Python, et ache
cette réponse. Le symbole
>>> signie que l'interpréteur est prêt à recevoir une instruction.
Les instructions sont traitées directement, une par une.
•
un éditeur de texte, dans lequel on écrit les algorithmes (dans un chier ayant l'exten-
sion .py). Une commande permet ensuite d'envoyer tout le contenu du chier en cours à
l'interpréteur (bouton avec un triangle vert dans PyScripter et Spyder).
2
Exemple.
Avec PyScripter :
Exemple.
Avec Spyder :
3
1.4 Premiers exemples d'instructions
Dans la suite de ce document, nous allons donc apprendre à communiquer avec l'ordinateur.
Faisons donc une première tentative (à taper dans l'interpréteur) :
>>> Bonjour Python !
Remarque.
Les trois chevrons (>>>) sont ceux qui apparaissent dans l'interpréteur et ne
sont pas à taper.
À notre Bonjour Python ! , Python répond :
SyntaxError: invalid syntax
Cela veut tout simplement dire que Python ne comprend pas ce qu'on lui demande. Mais
alors, que comprend Python ? Python comprend plusieurs types de données. En particulier,
nous travaillerons avec :
•
•
•
•
•
des entiers (int ou integer),
des nombres réels (oat) (attention, la virgule est représentée par un point en Python),
des booléens (bool ou boolean),
des chaînes de caractères, écrites entre guillemets (str ou string),
des listes (list).
Par exemple, si on tape :
>>>"Bonjour"
Python répond :
`Bonjour'
Et si on tape :
>>> 8
Python répond :
8
Python comprend de quoi on parle, mais comme on ne lui a rien demandé de faire, il se
contente de répéter ce qu'on lui dit. Demandons par exemple à l'ordinateur de faire des calculs et voyons ce qu'il répond :
>>>
>>>
>>>
>>>
1+1
10-3
29*61
12/4
Pour la puissance, on utilise le symbole **. Par exemple pour calculer
210
:
>>> 2**10
Exemple.
Deux exemples importants d'opérations que Python sait faire sont le calcul du
quotient et du reste d'une division euclidienne. Le quotient (ou partie entière de la division)
// et le reste est donné par l'opération que l'on appelle modulo ,
%. Par exemple 13 = 3 × 4 + 1, donc :
est donné par le symbole
donnée par le symbole
>>> 13//3
va retourner :
>>> 13%3
va retourner :
4
1
Remarque. Dans le cas de nombres réels, l'instruction x//n renvoie la partie entière de x/n.
4
Remarque.
Attention, les calculs avec des nombres réels (ottants) donnent parfois des
résultats approximatifs à cause de la façon dont sont stockés ces nombres en Python (essayez
par exemple de calculer
3.11 + 2.08).
En général ces approximations sont très bonnes n'ont
pas d'impact sur les résultats naux des algorithmes.
En plus des opérations décrites ci-dessus, Python dispose de fonctions toutes faites, que l'on
utilise en inscrivant le nom de la fonction, suivi des paramètres de la fonction mis entre parenthèses. Par exemple :
>>>min(2,3)
>>>max(5.1,1)
Certaines fonctions ne sont pas reconnues de base par Python, comme par exemple la racine
carrée. Pour que Python ait accès à ces fonctions, il faut lui dire d'aller les chercher dans une
bibliothèque. Par exemple la fonction racine carrée (sqrt en Python) est dans la bibliothèque
math . Pour utiliser la fonction racine carrée, on commence par importer les fonctions de
la bibliothèque math :
>>> from math import *
Le symbole * signie qu'on veut importer toutes les fonctions de la bibliothèque math. On
peut aussi n'importer qu'une fonction, par exemple la fonction sqrt :
>>> from math import sqrt
Exemples.
>>>
>>>
>>>
>>>
>>>
Quelques fonctions de la bibliothèque math :
from math import *
sqrt(4)
pow(5,2)
abs(-3)
floor(3.1)
Remarque.
#
#
#
#
#
importation de la bibliothèque math
racine carrée
équivaut à 5**2, c'est-à-dire 52
valeur absolue
partie entière
Pour obtenir de l'aide sur les fonctions d'une bibliothèque, et la liste de ces
fonctions, utiliser la commande help. Par exemple pour la bibliothèque math :
>>> help("math")
Exemples.
Quelques fonctions de la bibliothèque random permettant de générer des
nombres pseudo aléatoires :
>>> from random import *
>>> random()
>>> randint(1,10)
Remarque.
# importation de la bibliothèque random
# génère un nombre réel aléatoire entre 0 et 1
# génère un entier aléatoire entre 1 et 10
Pour apprendre l'algorithmique, il faut être curieux et ne pas hésiter à essayer.
Si Python n'arrive pas à terminer l'opération que vous lui demandez d'eectuer (si le symbole
>>>
n'apparaît pas dans l'interpréteur), cliquer sur le bouton d'interruption (bouton avec un
carré) ou appuyer simultanément sur la touche Ctrl et sur la touche c devrait interrompre le
calcul en cours.
5
1.5 Éditeur de texte
Comme on l'a vu, lorsqu'on tape une instruction dans l'interpréteur, celle-ci est directement
exécutée. En revanche, cette instruction n'est pas gardée en mémoire, et on la perd si l'on
quitte Python. C'est pour cela que l'on a recours à un éditeur de texte : les instructions successives sont tapées dans un chier texte d'extension .py que l'on sauvegarde régulièrement.
Cela permet de modier à tout moment nos programmes, de les diuser ou d'y faire appel
ultérieurement.
La première étape est de créer un nouveau chier et de le sauvegarder, par exemple sous le
nom
``exemple1.py''.
Vous pouvez maintenant taper vos diérentes instructions dans le
chier, puis envoyer ces instructions à l'interpréteur à l'aide de la commande exécuter.
Remarque.
Il est vivement conseillé de conserver tous les chier écrits au cours de l'année
sur une clé USB.
Remarque (très importante).
bole
#
Pour commenter le rôle des instructions, on utilise le sym-
suivi de notre commentaire (sur une seule ligne). Le texte suivant le symbole
#
n'est
pas pris en compte par l'interpréteur, et ne sert qu'à fournir des informations utiles à la compréhension des programmes.
Dans Pyscripter, on peut mettre en commentaire une portion du texte en sélectionnant celle-ci
et en cliquant sur le bouton commenter . En cliquant une deuxième fois sur le bouton, on
fait la manipulation inverse.
Exemple.
Reproduire dans l'éditeur de texte l'algorithme suivant, puis l'exécuter (les nombres sur le
côté gauche ne sont pas à reproduire, ils servent uniquement à se repérer plus facilement lors
de la lecture de ce document) :
1.
2.
3.
4.
5.
6.
# Algorithme : premier exemple
# Rôle : ne sert à rien
print(Premier exemple d'algorithme) # cette instruction affiche un message
1+2 # cette instruction calcule 1+1, mais n'affiche rien !
print(1+2) # si l'on veut afficher, il faut utiliser la commande print
6
1.6 Formalisme
Pour pouvoir utiliser un algorithme qu'un autre a écrit (ou que l'on a écrit il y a longtemps),
il faut comprendre parfaitement la façon dont il fonctionne et ce qu'il fait. C'est pourquoi il
est
indispensable de faire en sorte que les algorithmes que l'on écrit soient compréhensibles
par tous. L'objectif de cette partie est de mettre en place des normes d'écritures an de rendre
les algorithmes plus lisibles.
Remarque.
Le respect du formalisme est pris en compte dans la notation de l'épreuve d'al-
gorithmique.
En général, un algorithme comporte trois parties :
Le titre
1)
et si possible une brève description du rôle de l'algorithme (en particulier si
l'algorithme est long). Le titre doit être choisi intelligemment !
La déclaration des variables, qui consiste à préciser le nom des variables utilisées ainsi
2)
que leur type (voir partie 1.7).
Les instructions, qui constituent le corps de l'algorithme.
3)
Exemple. En pseudo-code, cela donne :
1. Algorithme : Affichage dix pour cent
2. Rôle : affiche 10% d'un nombre fourni par l'utilisateur
3. Variables : numériques : quantite, dix_pour_cent_de_quantite
4.
5. DEBUT
6.
Saisir : quantite
7.
dix_pour_cent_de_quantite ← 0.1 * quantite
8.
Afficher : dix_pour_cent_de_quantite
9. FIN
Remarque. En pseudo-code, on indique clairement le début et la n du corps de l'algorithme,
et le corps de l'algorithme est écrit en retrait (indentation).
Remarque.
•
La déclaration des variables est indispensable dans certains langages (par exemple en C),
et on le fait toujours en pseudo-code.
•
En revanche en Python, on ne déclare pas les variables. Si l'algorithme est long, on peut
néanmoins mettre en commentaire des informations sur les variables.
Exemple.
1.
2.
3.
4.
5.
6.
L'algorithme précédent donne en Python :
# Algorithme : Affichage dix pour cent
# Rôle : affiche 10% d'un nombre fourni par l'utilisateur
quantite = float(input("Veuillez indiquer une quantité"))
dix_pour_cent_de_quantite = 0.1 * quantite
print("10% de la quantité indiquée valent",dix_pour_cent_de_quantite)
7
2
Variables
2.1 Ce qu'est une variable
Pour concevoir un algorithme il est (quasiment) indispensable d'utiliser ce que l'on appelle
des variables. Une variable est un emplacement dans la mémoire de l'ordinateur auquel est
donné un nom, et dans lequel est stockée une valeur. On se sert de ce nom pour accéder à son
contenu ou le modier.
Remarque.
Le nom d'une variable est laissé au choix du concepteur de l'algorithme.
Attention : il doit
néanmoins respecter certaines règles :
•
•
•
Il doit commencer par une lettre et ne pas comporter d'espace.
On évitera rigoureusement les noms avec accent en Python.
Python est sensible à la casse : la variable
nom_de_variable et la variable Nom_De_Variable
ne sont pas les mêmes.
•
Il est très important de donner des noms de variable qui permettent de retrouver ce que
la variable contient. Par exemple si je veux créer une variable qui contient un âge, je ne
l'appelle pas
toto,
ou
x,
mais
age.
Une variable peut être :
•
numérique
s'il s'agit d'un nombre, par exemple un nombre entier (int en Python) ou
d'un nombre réel (oat en Python)
•
alphanumérique
s'il s'agit d'une succession de symboles, par exemple des mots, des
phrases. C'est le cas par exemple des chaînes de caractère (str en Python)
•
booléenne si elle vaut VRAI (représenté par un 1) ou FAUX (représenté par un 0). Un
booléen se note bool en Python.
Remarque. Pour connaître la classe d'une variable en Python, on utilise la commande type.
Par exemple :
>>> annee=2014
>>> type(annee)
Python répond :
<class `int'>
ce qui signie que la variable
annee
est du type
8
int.
2.2 Aectation d'une variable
2.2.1 En pseudo-code
Dénition. L'aectation est une opération permettant de dénir la valeur initiale d'une
variable (on parle alors d'initialisation), puis de modier la valeur de cette variable. En
pseudo-code, on note :
nom_variable
←
valeur
où :
• < nom_variable > est le nom de la variable dont on souhaite
• < valeur > est la valeur que l'on veut placer dans la variable.
Exemple.
Si on veut aecter à la variable
A
modier la valeur,
la valeur 5, on écrit :
A←5
Remarque.
On peut aecter à une variable la valeur d'une autre variable.
cela, la variable apparaissant à droite
B←3
A←B
A←B+2
Attention, pour
doit avoir été initialisée au préalable. Par exemple :
Attention ! L'aectation A ← B est un peu la même chose que de faire un copier-coller. Cela
ne veut pas dire que dorénavant A et B auront la même valeur, mais que la valeur contenue
dans A est écrasée par la valeur contenue dans B au moment de l'aectation.
Remarque.
On peut aussi mettre la même variable à droite et à gauche. Par exemple :
A ← 10
A ← A × 30
Après la deuxième aectation,
Dénition.
A
vaut
10 × 30 = 300.
On appelle incrémentation l'opération (très courante) consistant à ajouter 1 à
une variable. Par exemple :
A ← A + 1.
Exercice 1.
Sur feuille, représenter dans un tableau les valeurs des variables A, B, C et D
après chacune des opérations suivantes (on notera NI si la variable n'a pas été initialisée) :
1.
A←1
2.
B←2
3.
C←5
4.
D←A
5.
A←A+1
6.
B ←D+C
7.
C ←D+1
9
2.2.2 En Python
Pour aecter une valeur à une variable en Python, on utilise le symbole
←
= à la place du symbole
utilisé en pseudo-code.
Remarque.
Même si en mathématiques
A = B
veut dire la même chose que
B = A,
en
informatique, et en particulier en Python, on fera toujours très attention à mettre la variable
dont on veut changer la valeur à gauche, et la valeur que l'on veut donner à cette variable à
droite.
Exemple.
1.
2.
3.
4.
5.
6.
7.
8.
Reproduire et tester l'algorithme suivant en Python
# Algorithme : age de Bob
annee = 2015
annee = annee +1
print(annee)
annee_de_naissance_de_bob = 1901
age_de_bob = annee - annee_de_naissance_de_bob
print(age_de_bob)
2.3 Lecture et écriture de variables
L'ordinateur peut interagir avec l'utilisateur de deux façons diérentes : l'ordinateur peut lire
un texte ou une valeur saisie par l'utilisateur (entrée), et l'ordinateur peut acher du texte
ou le contenu d'une variable (sortie).
2.3.1 Lecture
La saisie permet de transmettre une information à l'ordinateur par l'intermédiaire du clavier
et de la stocker dans la mémoire pour pouvoir la réutiliser.
• En pseudo-code, on écrit
Saisir nom_variable
•
:
En Python, on utilise la commande
input, et on précise en paramètre de cette commande
(entre parenthèses) une chaîne de caractère que l'ordinateur va acher.
Exemple.
Donnons à Python l'instruction suivante :
>>> nom = input("Quel est votre nom ?")
Python va alors acher :
Quel est votre nom ?
Il faut alors saisir une réponse, par exemple Bob :
Python va alors enregistrer notre réponse dans la variable nom . On peut vérier cela en
demandant à Python ce que vaut cette variable :
>>> print(nom)
10
Remarque (très importante).
Si on ne précise rien, la valeur fournie par l'utilisateur à
l'aide de la commande input est une chaîne de caractère (str en Python) :
>>> age = input("Quel est votre âge ?")
Si on saisit (par exemple) 2, la valeur saisie est stockée dans la variable age que l'on peut
acher :
>>> print(age)
Python va alors acher :
`2'
(Remarquez que 2 est écrit entre guillemets).
Si on demande le type de la variable age :
>>> type(age)
Python va acher :
<class 'str'>
(la variable age est donc une chaîne de caractères)
Attention, Python ne gère pas les entiers et les chaînes de caractères de la même façon, et si
on ne fait pas attention, on peut avoir de mauvaises surprises. Par exemple si on demande :
>>> print(age*2)
Python va acher :
`22'
Pour forcer par exemple la variable
age
à être un entier, on ajoute une opération de
transtypage, qui permet ici de transformer la chaîne de caractères en un entier. Pour trans-
former une variable en une variable de type
int,
on utilise la fonction
int
avec comme
argument la variable à transformer.
Exemple.
1.
2.
3.
4.
5.
6.
7.
Reproduisez l'algorithme suivant :
# Algorithme : saisie d'une variable entière
age_str = input("Quel est votre âge ?")
age = int(age_str)
print(age)
print(type(age))
print(age*2)
# cette fois-ci, on obtient le resultat voulu
Exercice 2.
Écrire une commande permettant de demander à l'utilisateur sa taille, et d'en-
registrer cette donnée dans une variable de type
float.
2.3.2 Écriture
Les sorties sont les informations transmises par l'ordinateur à l'utilisateur.
• En pseudo-code, on écrit par exemple :
Afficher Bonjour ! • En Python, on utilise la commande print,
et on précise en argument de cette commande
ce que l'ordinateur va acher.
Exemple.
Instruction
Acher la chaîne de caractères Bonjour !
Pseudo-code
Afficher
Afficher A
Acher le contenu de la variable A
Remarque.
Bonjour ! Python
print("Bonjour !")
print(A)
Attention à bien distinguer une chaîne de caractères, écrite entre guillemets, et
une variable, écrite sans guillemets
11
Remarques.
• Pour acher des guillemets dans une chaîne de caractères,
>>> print("Bob a dit : \"Je m'appelle Bob. \"")
on utilise
\",
par exemple :
On peut aussi passer à la ligne dans une chaîne de caractère, avec le symbole
•
La commande
print
\n.
permet d'acher plusieurs chaînes de caractères ou contenus de
variables sur une même ligne. Il sut pour cela de séparer les diérentes choses à acher
par des virgules. Par exemple :
>>> print("1+1 =",1+1)
Exemple.
Reproduire et tester l'algorithme suivant :
1. # Algorithme : Affichage de l'age de Bob
2.
3. age_de_bob = int(input("Quel âge a Bob ?"))
4. print("Bob a",age_de_bob,"ans.")
2.4 Exercices
Remarque. À partir de maintenant, sauf si on veut tester rapidement l'eet d'une commande
simple, nous écrirons nos instructions dans l'éditeur de texte. Une fois que touts les instructions voulues sont écrites, on les envoie à l'interpréteur à l'aide du bouton Exécuter ou
Run de l'éditeur de texte (triangle vert dans PyScripter et Spyder).
Exercice 3.
Une épicerie vend de la farine à 1 euro le kilo, et des tablettes de chocolat à
2,5 euros. Écrire une suite d'instruction demandant à un client combien de kilos de farine
(nombre réel, pas nécessairement entier) et combien de tablettes de chocolat (nombre entier)
il désire, et qui ache le prix qu'il devra payer.
Exercice 4.
Bob veut acheter des livres qui coûtent 5 euros chacun. Écrire une suite d'ins-
tructions pour 1) demander à Bob combien il a, 2) dire a Bob combien il peut acheter de
livres au maximum, 3) dire a Bob combien il lui restera.
Exercice 5.
Bob part en voyage aux États-Unis.
a) Écrire en pseudo-code un algorithme qui demande de saisir une somme en euros, qui
convertit cette somme en dollars (1 euro vaut environ 1,13 dollars), et qui ache le résultat.
b) Programmer l'algorithme de la question (a) en Python.
c) Bob veut ramener des chapeaux de cowboy de son voyage. Il trouve des chapeaux à 3,99
dollars pièce. Compléter l'algorithme précédent en achant combien de chapeaux pourront
être achetés au maximum avec la somme saisie.
Exercice 6.
a) Écrire en pseudo-code un algorithme qui demande de saisir une somme en centimes, puis
qui donne le nombre de pièces minimal de 2 centimes et 1 centime nécessaires pour payer
cette somme.
Par exemple si l'utilisateur saisit 17 centimes, l'ordinateur achera : 8 pièces de 2 centimes
et 1 pièce de 1 centime.
b) Implémenter en Python l'algorithme précédent, puis le modier pour qu'il donne la décomposition de la somme en pièces de 1, 2, 5, 10, 20 et 50 centimes.
12
3
Fonctions et procédures
3.1 Fonctions prédénies et modules
Les fonctions sont un concept très important en programmation. Elle permettent notamment
de décomposer un programme complexe en sous-programmes plus simples et d'améliorer ainsi
la lisibilité d'un algorithme.
En Python, il existe un certain nombre de fonctions prédénies. Pour utiliser ces fonctions, on
met le nom de la fonction, suivi des
paramètres (ou arguments) de la fonction mis entre
parenthèses. Les paramètres, si il y en a plusieurs, sont séparés par des virgules.
Exemple.
1.
2.
3.
4.
min et type
m = min(3.1,5)
print(m)
t = type(42)
print(t)
sont des fonctions. Exemples d'utilisation :
Il existe un très grand nombre de fonctions prédénies en Python. Très peu de ces fonctions
sont directement chargées en mémoire. Les autres sont regroupées dans des chiers que l'on
appelle modules
l'instruction
import
ou bibliothèques.
Pour charger ces modules en mémoire, on utilise
(voir l'exemple ci-dessous).
Exemple. Pour utiliser la fonction randint de la bibliothèque random, on peut utiliser l'instruction
•
import
de plusieurs façons diérentes :
Méthode 1 : en important la fonction voulue depuis (from en anglais) la bibliothèque dans
l'espace de noms principal :
1. from random import randint
2. nb = randint(0,10)
3. print(nb)
•
Méthode 2 : en important toutes les fonctions de la bibliothèque dans l'espace de noms
principal :
1. from random import *
2. nb = randint(0,10)
3. print(nb)
Attention, si une fonction de l'espace de noms principal a le même nom que l'une des
fonctions importées, cette première fonction sera écrasée par l'opération d'importation.
•
Méthode 3 : en important toutes les fonctions de la bibliothèque dans un sous-espace
de l'espace de noms principal. Pour utiliser les fonctions de la bibliothèque, il faut alors
spécier l'espace de noms dans lequel elles ont été chargées. Par défaut, ce nom est le nom
de la bibliothèque :
1. import random
2. nb = random.randint(0,10)
3. print(nb)
On peut aussi choisir un nom tout autre (ci-dessous bob) :
1. import random as bob
2. nb = bob.randint(0,10)
3. print(nb)
Remarque. Pour obtenir la liste des fonctions contenues dans une bibliothèque, on utilise la
help.
help("random")
commande
Par exemple :
13
3.2 Création de fonctions et procédures
3.2.1 Premier exemple
Si on utilise régulièrement la même portion de code, on peut en faire une fonction que l'on
pourra ensuite utiliser à volonté. De même, si un algorithme est très long, on peut faciliter
sa lecture en le décomposant en sous-programmes simples, chacun de ces sous-programmes
étant matérialisé par une fonction.
Exemple.
par
1.
2.
3.
4.
Imaginons par exemple que l'on ait régulièrement besoin de la fonction f dénie
f (x) = x2 + 5x + 3. On peut alors créer en Python une fonction f de la façon suivante :
def f(x):
"""Fonction f : f(x) renvoie x*x + 5*x + 3"""
res = x*x + 5*x + 3
return res
Une fois dénie, on peut utiliser la fonction
5.
6.
7.
8.
f
de la façon suivante :
y = f(4)
print(y)
print("f(3) vaut : ", f(3))
print("f(15,1) vaut : ", f(15.1))
Remarque.
La première ligne de la fonction est l'aide de la fonction. On peut acher cette
ligne dans l'interpréteur avec l'instruction
>>> help(f)
help
:
3.2.2 Cas général
Pour dénir une fonction, on utilise la syntaxe suivante :
•
En pseudo-code :
1.
2.
3.
4.
5.
6.
7.
•
Fonction nom_fonction(parametre_1, parametre_2, ...) :
Variables locales : ...
DEBUT Fonction
instructions
Retourner : valeur_1, valeur_2,...
FIN Fonction
En Python :
1. def nom_fonction(parametre_1, parametre_2, ...) :
2.
"""Aide de la fonction"""
3.
instructions
4.
return valeur_1, valeur_2,...
14
Remarques.
•
Par convention (en cours d'algorithmique uniquement), nous ferons commencer le nom de
nos fonctions par une majuscule et le nom des variables par une minuscule.
•
Les parenthèses après le nom de la fonction sont obligatoires. Si une fonction ne nécessite
pas de paramètres, on ne met rien entre les parenthèses.
•
En Python, on commence en général la fonction par une ligne de documentation écrite
entre triples guillemets (on parle de docstrings). Cette ligne n'est pas obligatoire, mais
documenter ses fonctions est une bonne habitude à prendre.
•
L'instruction
Retourner
ou
return précède la liste des valeurs renvoyées
return ne sont pas eectuées.
par la fonction.
Attention, les instructions après le
•
En général, on utilise une fonction en aectant la valeur renvoyée par celle-ci à une va-
riable :
a = fonction(parametres)
Par exemple :
a = input("Veuillez saisir quelque chose")
• Une fonction peut ne rien renvoyer. On parle alors de procédure. Dans une procédure, on
ne met donc pas d'instruction Retourner ou return. Évidemment, on ne peut pas aecter
le résultat d'une procédure à une variable (puisque celui-ci n'existe pas). Pour utiliser une
procédure, on utilise la syntaxe suivante :
procedure(parametres)
Exemple.
La fonction Python
print
est en fait une procédure.
print
ache du texte ou
la valeur de variables, mais ne renvoie aucun résultat. Par exemple l'instruction :
>>> a = print("1")
n'aecte aucune valeur à la variable
>>> print(a)
a
:
L'utilisation correcte de print est la suivante :
>>> print("1")
Exemples.
•
Fonction cube :
1. def cube(x) :
2.
"""cube(x) renvoie le cube de x"""
3.
res = x*x*x
4.
return res
Utilisation :
5. a = cube(3)
6. print(a)
•
Procédure achage de la somme de deux nombres :
1. def aff_somme(x,y) :
2.
"""aff_somme(x,y) affiche la valeur de x+y"""
3.
print(x,"+",y," vaut : ",x+y)
Utilisation :
4. aff_somme(3,2)
15
•
Fonction (inutile) renvoyant 42 :
1. def reponse() :
2.
"""fonction sans argument renvoyant 42"""
3.
return 42
Utilisation :
4. a = reponse()
5. print(a)
3.3 Structure générale d'un algorithme
Lorsqu'on construit un algorithme, on met en premier les importations de bibliothèques, puis
on met les sous-programmes, avant de mettre l'algorithme principal.
Exemple.
Lors d'un jeu, on lance trois fois un dé à 6 faces, le score vaut la racine carrée de
la somme des trois lancers.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
# Algorithme : score au dé
# Importations :
from random import *
from math import *
# Fonctions :
def lancer(n) :
"""Simule un lancer de dé à n faces"""
de = randint(1,n)
print("Vous obtenez : ",de)
return de
# Main :
score = sqrt(lancer(6) + lancer(6) + lancer(6))
print("Votre score : ", score)
3.4 Variables locales et variables globales
Dénitions.
•
Lorsque des variables sont dénies à l'intérieur d'une procédure ou d'une fonction, elles
ne sont accessibles que pour cette dernière. On dit que ce sont des
variables locales. Les
paramètres d'une fonction sont également des variables locales.
•
Les variables dénies à l'extérieur d'une procédure ou d'une fonction sont appelées
va-
riables globales. Elles sont accessibles à l'intérieur des sous-programme. On peut également dénir une variable globale à l'intérieur d'une fonction à l'aide de l'instruction
Remarque.
global.
Les variables locales dénies dans une fonction (ou une procédure) seront sup-
primées de la mémoire après exécution de la fonction.
16
Exemples.
•
Exemple 1 :
1.
2.
3.
4.
5.
•
x = 5
def affiche(x):
print(x)
affiche(3)
print(x) # la variable globale x n'a pas été modifiée
Exemple 2 :
1.
2.
3.
4.
5.
6.
•
On pourra tester les instructions en Python suivantes :
x = 5
def affiche():
x=3 # création d'une variable locale
print(x)
affiche()
print(x) # la variable globale x n'a pas été modifiée
Exemple 3 :
1. x = 5
2. def affiche():
3.
print(x) # Affiche la variable globale x
4. affiche()
•
Exemple 4 :
1.
2.
3.
4.
5.
6.
7.
x = 5
def affiche():
global x
x = 3 # Affectation de la valeur 3 à la variable globale x
print(x)
affiche()
print(x) # la variable globale x a été modifiée
Remarque. Pour éviter toute confusion, on donnera des noms distincts aux variables locales
et globales, bien que cela ne soit pas nécessaire à la bonne marche de l'algorithme.
3.5 Récursivité
Les fonctions disposent d'une particularité très intéressante : la
récursivité quand une fonction fait appel à elle-même.
Exemple.
La procédure ci-dessous est récursive :
1. def decompte(n):
2.
"""Fonction décompte ! """
3.
print(n)
4.
if n>0:
5.
decompte(n-1)
6.
7. # test :
8. decompte(10)
17
récursivité.
On parle de
Remarque.
Attention, l'utilisation de fonction récursives peut donner lieu à une exécution
innie. Pour éviter cela, il faut toujours faire attention à ce que la fonction se termine dans
tous les cas. Il faut en particulier toujours penser à
Exemple.
4.
spécier les valeurs de départ.
Dans l'exemple précédent, remplacer les lignes 4 et 5 par :
decompte(n-1)
Tester cette nouvelle fonction. Cela devrait provoquer une erreur.
3.6 Exercices
Exercice 7.
Écrire en pseudo-code et en Python une fonction prenant en paramètres d'entrée deux nombres
réels et retournant leur produit.
Exercice 8.
Écrire en Python une procédure prenant en paramètres d'entrée une phrase et achant 3 fois
la phrase.
Exercice 9.
La température en degrés Fahrenheit est égale à 32 plus 1,8 fois la température en degrés
Celsius.
a) Écrire en pseudo-code et en Python une fonction prenant en paramètre une température
en degrés Celsius et renvoyant cette température en degrés Fahrenheit.
b) Écrire une fonction faisant la conversion inverse.
Exercice 10.
Écrire en pseudo-code et en Python une procédure
conv_duree
prenant en paramètre une
durée en secondes puis achant cette même durée en heures, minutes et secondes.
Par exemple
conv_duree(7422)
ache
"2 heures, 3 minutes et 42 secondes".
Exercice 11 (jeu de calcul mental).
Écrire en pseudo-code et en Python une fonction prenant en paramètre un entier
n
et qui :
• tire au hasard deux entiers, notés x et y, entre 1 et n,
• ache ces deux entiers,
• demande de saisir le produit de ces deux entiers et stocke le resultat dans une variable
reponse,
• calcule puis ache la variable erreur, valant la valeur absolue de (reponse - x * y),
• retourne erreur.
Exercice 12.
On rappelle que le PGCD de deux entiers
r
est le reste de la division euclidienne de
deux entiers
a
et
b
et renvoyant le PGCD
a et b est égal au PGCD des deux entiers b et r où
a par b. Écrire une fonction prenant en argument
de a et b. La fonction pourra être récursive.
18
4
Les structures conditionnelles
4.1 Un premier exemple
Exemple. L'algorithme suivant, donné en pseudo-code puis en Python, contient une structure
conditionnelle.
•
En pseudo-code :
1. Algorithme : compare à 10
2. Variable numérique : nombre
3.
4.
5.
6.
7.
8.
9.
•
DEBUT
FIN
Saisir : nombre
SI nombre > 10 ALORS :
Afficher : "Le nombre choisi est plus grand que 10"
FINSI
En Python :
1. # Algorithme : compare à 10
2.
3. nombre = float(input("Choisissez un nombre : "))
4. if nombre > 10 :
5.
print("Le nombre choisi est plus grand que 10")
Exercice 13.
Que fait l'algorithme ci-dessus ? Tester son exécution en Python.
4.2 Si, Alors
La structure conditionnelle de base (on l'appelle la structure Si, Alors ) fonctionne de la
façon suivante : si la condition est vraie, alors on exécute les instructions. Sinon, on passe à la
suite de l'algorithme. Une structure conditionnelle Si, Alors s'écrit de la façon suivante :
En pseudo-code :
SI condition ALORS :
instructions
FINSI
...
En Python :
if condition :
instructions
...
Remarques.
•
En Python, il n'y a pas de ALORS. C'est le symbole : qui marque l'entrée dans le bloc
d'instructions.
•
Dans tous les langages, les instructions d'une structure conditionnelle forment un bloc
qui est décalé vers la droite. Ce décalage est appelé indentation. Sur un ordinateur, une
indentation se forme à l'aide de la touche tab .
•
En pseudo-code, le décalage est esthétique, et ne sert qu'à rendre l'algorithme lisible.
Mais en Python, ce décalage est
indispensable. Essayez de ne pas décaler les instructions,
ou de les décaler de deux crans, vous constaterez que l'algorithme ne fonctionne plus, ou
plus comme prévu.
19
•
En Python, il n'y a pas de FINSI. Pour marquer la n du bloc d'instructions et passer à
la suite de l'algorithme, il sut d'arrêter de décaler les instructions.
•
On peut imbriquer plusieurs structures conditionnelles, à condition de décaler autant de
fois que nécessaire.
4.3 Opérateurs de comparaison
Les conditions qui apparaissent dans les structures conditionnelles sont exprimées à l'aide
d'opérateurs de comparaison. Il y a six opérateurs de comparaison :
•
•
=, 6=, <, ≤, >, ≥.
==, ! =, <, <=, >, >=.
En pseudo-codes, ces opérateurs (bien connus) sont notés :
En Python, ces opérateurs sont (dans le même ordre) :
Exemples (à taper dans l'interpréteur en Python).
>>>
>>>
>>>
>>>
>>>
>>>
1==2
1!=2
1<2
40<=40
15>3
1>=2
# teste si 1 est égal à 2
# teste si 1 est différent de 2
Remarque. Les conditions qui apparaissent dans les structures conditionnelles peuvent prendre
deux valeurs : Vrai ou Faux. Ce sont donc des booléens (type bool en Python). Rappel : les
booléens sont au nombre de deux : Vrai (
True en Python) et Faux (False en Python).
Exemple (à taper dans l'interpréteur en Python).
>>> variable_booleenne = (1>1)
>>> print(variable_booleenne)
>>> type(variable_booleenne)
Remarque. À partir de maintenant, le type booléen est à connaître. Il faut également savoir
manier les variables booléennes.
4.4 Opérateurs booléens
Pour éviter de devoir imbriquer des structures conditionnelles, on peut utiliser des conditions
complexes basées sur des opérateurs booléens (ou opérateurs logiques).
Exemple.
On rappelle que l'eau est liquide entre 0 degrés et 100 degrés. On donne l'algorithme ci-dessous
en pseudo-code :
1.
2.
3.
4.
5.
6.
7.
8.
9.
Algorithme : Indicateur d'eau liquide
Variable numérique : temperature
DEBUT
FIN
Saisir : temperature
SI temperature > 0 ET temperature < 100 ALORS :
Afficher : "L'eau est liquide."
FINSI
20
Exercice 14.
Traduire en Python l'algorithme ci-dessus, puis le tester. Que fait l'algorithme ?
Comme pour les nombres, il existe des opérations pour les booléens. Les deux opérateurs les
plus importants sont donnés ci-dessous.
Dénitions.
•
L'opérateur
ET se traduit en python par and :
(A ET B) est vrai si et seulement si à la fois A est vrai et B est vrai.
•
L'opérateur
OU (ou inclusif ) se traduit en python par or :
(A OU B) est faux si A est faux et B est faux, et (A OU B) est vrai tout le reste du temps.
Remarques.
•
Le ET logique a la même signication que dans le langage courant. En revanche le OU
logique est un OU inclusif alors que dans le langage courant, le OU est souvent exclusif
(par exemple, dans fromage ou dessert , il faut choisir l'un ou bien l'autre).
•
Deux autres opérateurs booléens peuvent être utiles : il s'agit de la négation NON (not
en Python) et du ou exclusif (le ou du langage courant cette fois-ci) OUX (∧ en Python).
Exemples (à taper dans l'interpréteur en Python).
>>>
>>>
>>>
>>>
(1<2) or (2<3)
(1==1) and (1>150)
not (24>=37)
not (True and (40==12))
4.5 Sinon, Sinon Si
Pour éviter de devoir utiliser plusieurs structures conditionnelles à la suite, nous allons maintenant voir les structures conditionnelles plus riches que la structure Si, Alors .
Exemple.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Algorithme : Indicateur de
Variable numérique : age
majorité
DEBUT
FIN
Saisir : age
SI age < 18 ALORS :
Afficher : "Vous êtes mineur."
SINON :
Afficher : "Vous êtes majeur."
FINSI
Exercice 15.
Traduire en Python l'algorithme ci-dessus, puis le tester. Que fait cet algorithme ?
21
La structure Si, Alors, Sinon permet de donner certaines instructions si la condition est satisfaite, et d'autres instructions si la condition n'est pas satisfaite. Cette structure se formalise
de la façon suivante :
En pseudo-code :
SI condition ALORS :
instructions
SINON :
autres instructions
FINSI
...
En Python :
if condition :
instructions
else :
autres instructions
...
La structure Si, Alors, Sinon Si, Sinon est une version enrichie de la structure Si, Alors,
Sinon permettant de distinguer le comportement de l'algorithme selon plusieurs conditions :
si la première condition est satisfaite, on suit les instructions prévues dans ce cas (instructions
1). Sinon, on teste si la seconde condition est satisfaite. Si c'est la cas, on suit les instructions
associées (instructions 2), et sinon, on passe à la condition suivante.
Remarque.
Il peut y avoir autant de conditions que l'on veut. Les conditions sont examinées dans l'ordre.
Si l'une des conditions est satisfaite, alors on eectue les instructions correspondantes puis
on sort de la boucle et les autres conditions de sont donc pas examinées. Si aucune condition
n'est satisfaite, on suit les instructions écrites après le SINON (si il y en a un).
Cette structure se formalise de la façon suivante :
En pseudo-code :
SI condition 1 ALORS :
instructions 1
SINON SI condition 2 ALORS :
instructions 2
SINON SI condition 3 ALORS :
instructions 3
# etc...
SINON :
autres instructions
FINSI
...
En Python :
if condition 1 :
instructions 1
elif condition 2 :
instructions 2
elif condition 3 :
instructions 3
# etc...
else :
autres instructions
...
22
4.6 Exercices
Exercice 16.
Bob ne va à la plage que si l'une des deux conditions suivantes au moins est satisfaite :
la température de l'air est supérieure à 25 degrés,
la température de l'eau est supérieure à 20 degrés.
Écrire en Python un algorithme demandant la température de l'eau et de l'air, et achant
un message si Bob peut aller à la plage.
Exercice 17.
Écrire une fonction prenant en paramètres 2 nombres et retournant le plus grand des deux.
Exercice 18.
Le mot de passe est James-Bob. Écrire un algorithme qui demande à l'utilisateur le mot de
passe, et qui ache un bip d'alarme si le mot de passe est incorrect.
Exercice 19.
Une place dans un cinéma coûte 5 euros pour les moins de 10 ans, 6 euros pour les moins de
18 ans et 8 euros pour les autres. Écrire une
procédure prix qui prend en paramètre un âge
et ache le prix correspondant.
Exercice 20.
Bob possède un sac qui contient 10 boules numérotées de 1 à 10 et telles que : les boules 1 et
2 sont blanches, les boules 3, 4 et 5 sont noires et les 5 autres boules sont rouges. Bob vous
propose un jeu : vous devez parier sur une couleur, puis, il tire une boule au hasard, et si
cette boule est de la couleur que vous avez choisie, vous avez gagné.
a) Faire un algorithme qui tire au hasard le numéro d'une boule et qui ache sa couleur.
Indice : on pourra utiliser la fonction randint de la bibliothèque random.
b) Écrire un algorithme qui demande de choisir une couleur, qui tire une boule au hasard, et
qui ache si vous avez gagné ou non.
c) Transformer l'algorithme précédent en une procédure
23
jeu
ne prenant aucun paramètre.
5
Les boucles
5.1 Premier exemple
On veut acher la table de multiplication de 7, de
7×1
à
7 × 10.
Un premier algorithme
pour faire cela est l'algorithme suivant :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Algorithme : affichage de la table de 7
Variables :
DÉBUT
Afficher : "7 fois 1 =",7*1
Afficher : "7 fois 2 =",7*2
Afficher : "7 fois 3 =",7*3
Afficher : "7 fois 4 =",7*4
Afficher : "7 fois 5 =",7*5
Afficher : "7 fois 6 =",7*6
Afficher : "7 fois 7 =",7*7
Afficher : "7 fois 8 =",7*8
Afficher : "7 fois 9 =",7*9
Afficher : "7 fois 10 =",7*10
FIN
Dans l'algorithme ci-dessus, on répète grosso modo dix fois la même instruction. Imaginons
maintenant qu'on veuille aller jusqu'à
7 × 100.
En suivant l'idée précédente, il faudrait alors
écrire 100 instructions.
Pour éviter cela, on a recours à une structure itérative (ou boucle).
•
En pseudo code, cela donne :
1.
2.
3.
4.
5.
6.
7.
8.
9.
•
Algorithme : affichage de la table de 7
Variable numérique : compteur
DÉBUT
compteur ← 1
TANT QUE compteur ≤ 100 :
Afficher : "7 fois ", compteur, " = ", 7*compteur
compteur ← compteur +1
FIN TANT QUE
FIN
En Python, cela donne :
1. # Algorithme : affichage de la table de 7
2.
3. compteur = 1
4. while compteur <= 100 :
5.
print("7 fois ", compteur, " = ", 7*compteur)
6.
compteur = compteur +1
Dénition.
Une structure itérative (ou boucle) est une structure permettant d'exécuter plusieurs fois
de suite un même bloc d'instructions. Il existe trois types de boucles :
•
•
•
Tant que
Répéter . . .jusqu'à
Pour
24
5.2 Structure Tant que La structure tant que permet de répéter un bloc d'instructions tant qu'une condition est
satisfaite. Une telle structure se formalise de la façon suivante :
En pseudo-code :
En Python :
1. TANT QUE condition :
2.
instructions
3. FIN TANT QUE
4. ...
1. while condition :
2.
instructions
3. ...
Lorsque l'on rencontre l'instruction Tant que dans un algorithme, on évalue la condition :
•
•
si la condition est vériée, on eectue les instructions,
si elle n'est pas vériée, on sort de la boucle, et on passe à l'instruction située après le
Fin Tant que .
Exemple.
1.
2.
3.
4.
5.
6.
7.
8.
9.
L'algorithme ci-dessous ache les nombres de 1 à 5 :
Algorithme : affichage de 1 à 5
Variable numérique : i
DEBUT
i ←1
TANT QUE i ≤ 5
Afficher : i
i ← i+1
FIN TANT QUE
FIN
Quel rôle joue la variable i ?
Remarque. Attention, si la structure Tant que est mal utilisée, l'exécution de l'algorithme peut ne jamais prendre n. Pour que l'exécution de la boucle Tant que se termine
en temps ni, il faut qu'à un moment la condition devienne fausse.
En particulier, lorsque l'on utilise un compteur, il faut penser à l'initialiser correctement, et
à modier sa valeur à chaque itération.
Exemple.
Les deux algorithmes suivants donnent lieu à une boucle innie :
1. compteur ← 1
2. TANT QUE compteur ≤ 100 :
3.
Afficher : 7*compteur
4. FIN TANT QUE
Que fait l'algorithme ci-dessus ?
1. compteur ← 1
2. TANT QUE compteur > 0 :
3.
Afficher : 7*compteur
4.
compteur ← compteur +1
5. FIN TANT QUE
Que fait l'algorithme ci-dessus ?
Remarque. La boucle Tant que est une boucle non déterministe : on ne sait pas forcément
à l'avance combien d'itérations seront eectuées. Il arrive qu'elle ne soit pas exécutée du tout
lorsque la condition est fausse dès le départ.
5.3 Structure Répéter . . . jusqu'à Il existe un deuxième type de structure itérative non déterministe, très proche du Tant
que : c'est la structure Répéter . . . jusqu'à . Elle se formalise de la façon suivante :
25
En pseudo-code :
1. RÉPÉTER :
2.
instructions
3. JUSQU'À condition
4. ...
En Python, cette structure n'existe pas. On
compense cette absence à l'aide de la structure
while .
Avec la structure Répéter . . . jusqu'à , les instructions sont eectuées une ou plusieurs fois
jusqu'à ce que la condition soit vériée.
Remarque. Contrairement à ce qui se passe avec la structure Tant que , avec la structure
Répéter . . . jusqu'à , les instructions sont eectuées au moins une fois.
Exemple.
On utilise couramment la structure Répéter . . . jusqu'à pour des contrôles de
saisie. On peut par exemple utiliser cette structure pour vérier qu'une valeur saisie est bien
entière :
1.
2.
3.
4.
5.
6.
7.
8.
Algorithme : contrôle de saisie
Variable numérique : n
DÉBUT
RÉPÉTER
Afficher : "Saisir un entier naturel"
Saisir : n
JUSQU'À : Partie_Entière(n)=n
FIN
5.4 Structure Pour La dernière structure itérative que nous allons étudier est la structure Pour . Cette structure
est utilisée lorsque le nombre d'itérations est connu dès le départ. On parle alors de boucle
déterministe.
Exemple.
7 × 10.
•
7×1
à
On peut faire cela en utilisant une structure Pour .
En pseudo code, cela donne :
1.
2.
3.
4.
5.
6.
7.
•
Reprenons l'exemple de l'achage de la table de multiplication de 7, de
Algorithme : affichage de la table de 7
Variable numérique : compteur
DÉBUT
POUR compteur ALLANT DE 1 À 10 :
Afficher : "7 fois ", compteur, " = ", 7*compteur
FIN POUR
FIN
En Python, cela donne :
1. # Algorithme : affichage de la table de 7
2. for compteur in range(1,11) :
3.
print("7 fois ", compteur, " = ", 7*compteur)
La structure Pour utilise une variable, que l'on appelle compteur, qui sert à repérer le
nombre d'itérations déjà eectuées. Le compteur part d'une valeur de départ et augmente à
26
chaque itération d'un nombre xe, appelé pas, jusqu'à atteindre une valeur d'arrivée. Pour
chaque valeur du compteur, le bloc d'instructions est eectué une fois.
La structure Pour se formalise de la façon suivante :
En pseudo-code :
1. POUR compteur ALLANT DE valeur_depart À valeur_arrivee PAR PAS DE pas :
2.
instructions
3. FIN POUR
4. ...
En Python :
1. for compteur in range(valeur_depart,valeur_arrivee +1,pas) :
2.
instructions
3. ...
Remarques.
•
Contrairement à ce qui se passe dans la boucle Tant que , dans la boucle Pour la
valeur du compteur est modiée automatiquement.
•
On peut ne pas préciser de valeur pour le pas. La valeur par défaut du pas est de 1. En
pseudo-code, cela donne :
POUR compteur ALLANT DE valeur_depart À valeur_arrivee :
et en Python :
for compteur in range(valeur_depart,valeur_arrivee +1) :
• En Python, si on écrit :
for compteur in range(a,b)
la boucle s'arrête juste
avant que le compteur atteigne la valeur b. Pour que le compteur
atteigne la valeur d'arrivée, il faut donc écrire :
for compteur in range(valeur_depart,valeur_arrivee
•
+1 )
En Python, on peut ne pas donner de valeur de départ, la valeur de départ par défaut
étant 0. Par exemple si on écrit :
for compteur in range(7)
le compteur ira de 0 à 6 par pas de 1.
Exemple.
•
En pseudo code :
1.
2.
3.
4.
5.
6.
7.
•
Achons par exemple les nombres pairs de 0 à 100 :
Algorithme : affichage des nombres pairs
Variable numérique : compteur
DÉBUT
POUR compteur ALLANT DE 0 À 100 PAR PAS DE 2 :
Afficher : compteur
FIN POUR
FIN
En Python :
27
1. # Algorithme : affichage des nombres pairs
2. for compteur in range(0,101,2) :
3.
print(compteur)
Remarque. On peut imbriquer plusieurs structures itératives, toujours en faisant très attention à indenter correctement.
Exemple.
Tester l'algorithme suivant :
En pseudo code :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Algorithme : étoiles
Variables numériques : i,j
DÉBUT
POUR i ALLANT DE 1 À 4 :
POUR j ALLANT DE 1 À i :
Afficher : "*"
FIN POUR
Afficher nouvelle ligne
FIN POUR
FIN
En Python :
1. # Algorithme : étoiles
2. for i in range(1,5) :
3.
for j in range(1,i+1) :
4.
print("*", end=" ")
5.
print("")
Remarques.
• Dans la commande :
print("*", end=" ")
le end= est une option de la commande print permettant de dénir ce qu'il se passe quand
tous les arguments ont été achés. Par défaut (si rien n'est précisé), on passe à la ligne.
L'instruction
end=" "
permet de remplacer le passage à la ligne par un espace.
Pour plus de détails, taper dans l'interpréteur :
>>> help(print)
• On peut interrompre
break
prématurément une boucle l'aide de la commande :
5.5 Exercices
Exercice 21.
val
Écrire en Python une
procédure table3 qui prend en paramètre une valeur
et ache la table de multiplication de 3, de
Exercice 22.
3×1
à
3 × val.
Bob joue avec un dé. Il décide de lancer le dé tant qu'il n'a pas obtenu un
6. Écrire en pseudo-code puis en Python un algorithme simulant les tirages successifs du dé
jusqu'à ce qu'un 6 apparaisse.
Indice : on pourra utiliser la fonction randint de la bibliothèque random.
Exercice 23.
Dans la mare qui est dans son jardin, Bob a mis un nénuphar. Au début, la
2
2
surface du nénuphar est de 9 cm . La surface de la mare est de 6m . Tous les mois, la surface
du nénuphar augmente de 20%.
a) Écrire une
fonction seuil prenant en paramètre une surface, et retournant le nombre
de mois mis par le nénuphar pour dépasser cette surface.
b) Écrire un algorithme faisant appel à la fonction
seuil
bout duquel le nénuphar aura recouvert toute la mare.
28
et achant le nombre de mois au
Exercice 24.
Écrire en Python un algorithme permettant de vérier qu'une valeur saisie est
bien entière. L'algorithme devra utiliser une structure Tant que .
Exercice 25 (suite de l'exercice 11). Le compte informatique de Bob est protégé par un mot
de passe. Écrire en pseudo-code puis en Python un algorithme qui demande de saisir un mot
de passe jusqu'à ce que le bon mot de passe soit saisi, sachant que le mot de passe de Bob
est : James-Bob.
Exercice 26.
une valeur
Écrire en pseudo-code puis en Python une
val
Exercice 27.
procédure prenant en paramètre
et achant les carrés des nombres entre 0 et
val.
Bob se lance dans la vente de plants de nénuphars. Il en vend 3 le premier
jours. Le nombre de plants vendus double ensuite chaque jour.
a) Écrire en pseudo-code puis en Python un algorithme achant le nombre de plants vendus
chaque jour jusqu'au trentième jour.
b) Modier l'algorithme précédent pour calculer le nombre total de plants vendus en 30 jours.
Exercice 28
.
(Le jeu du nombre à deviner)
Le but du jeu est de deviner un nombre entier
entre 0 et 50 choisi aléatoirement par l'ordinateur. Écrire en pseudo-code puis en Python un
algorithme qui :
1. tire au hasard un entier entre 0 et 50 qui sera le nombre à deviner (utiliser la fonction
randint de la bibliothèque random),
2. demande de saisir un entier entre 0 et 50 et ache un message disant si l'entier saisi est
plus petit ou plus grand que le nombre à deviner,
3. répète l'instruction ci-dessus (saisi d'un nombre et comparaison avec le nombre à deviner) tant que le bon nombre n'a pas été saisi.
4. Lorsque le nombre à deviner est égal au nombre saisi, l'algorithme ache un message
de victoire.
Exercice 29.
a) Écrire en pseudo-code puis en Python une
procédure prenant en paramètre un entier, et
achant la liste des diviseurs de cet entier.
b) Modier la procédure précédente en une
fonction retournant le nombre de diviseurs de
l'entier choisi comme paramètre.
Exercice 30.
•
Bob joue à un jeu de dés. Les règles sont les suivantes :
À chaque tour, on lance 10 fois de suite un dé. Si la somme des valeurs obtenues est paire,
on gagne 1 point, sinon, on perd 2 points.
•
On part de 10 points, et le jeu continue jusqu'à ce que le nombre de points soit inférieur
ou égal à 0.
a) Écrire un algorithme simulant un tour de ce jeu et achant le nombre de points obtenus
(1 ou -2).
b) Modier l'algorithme précédent pour simuler une partie complète, en achant pour chaque
tour le nombre de points obtenus pour le tour et le nombre de points restants au total.
29
6
Tableaux et listes
6.1 Un premier exemple
L'algorithme ci-dessous demande de saisir dix nombres et fait la somme de ces nombres :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Algorithme : somme
Variables numériques : nombre, somme
DEBUT
somme ← 0
POUR i allant de 0 à 9 :
Saisir : nombre
somme ← somme + nombre
FIN POUR
Afficher : somme
FIN
Dans cet algorithme, les nombres saisis ne sont pas stockés en mémoire. Si l'on commet une
erreur en saisissant l'un de nombres, il faut relancer l'algorithme et re-saisir chacun des dix
nombres.
Pour éviter cela, une première idée serait de créer dix variables, une pour chaque nombre saisi.
En cas d'erreur, il surait alors de modier la valeur de la variable concernée. Bien sûr, écrire
un tel algorithme est fastidieux, et cela serait pire encore si on voulait saisir cent valeurs au
lieu de dix.
Dans ce genre de situations, on a recours à une nouvelle structure : les tableaux (ou listes).
Exemple.
•
En pseudo-code, cela donne :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
•
Reprenons l'algorithme précédent à l'aide de tableaux.
Algorithme : somme avec tableau
Variables numériques : liste_nb(10), somme
DEBUT
somme ← 0
POUR i allant de 0 à 9 :
Saisir : liste_nb[i]
somme ← somme + liste_nb[i]
FIN POUR
Afficher : somme
FIN
Et en Python, l'algorithme précédent s'écrit :
1.
2.
3.
4.
5.
6.
7.
# Algorithme : somme avec tableau
somme = 0
liste_nb = [0]*10
for i in range(0,10) :
liste_nb[i] = float(input("Veuillez saisir un nombre"))
somme = somme + liste_nb[i]
print("Somme : ",somme)
Dans l'algorithme ci-dessus, les nombre saisis sont stockés dans une liste, c'est-à-dire variable
list. On peut par
>>> print(liste_nb)
de type
exemple acher cette liste en tapant dans l'interpréteur :
30
6.2 Que sont les tableaux et les listes ?
Les tableaux et les listes sont des regroupements de variables. Chacune des variables est
numérotée, ce numéro s'appelle un indice.
Remarque.
Attention, les indices peuvent commencer à 0 ou à 1 selon les langages. En
Python, les indices commencent à 0. Par convention, nous ferons également commencer les
indices à 0 en pseudo-code.
Au programme du BTS SIO, on ne distingue pas les tableaux et les listes. En général, les
deux termes tableau et liste désignent deux façons diérentes de stocker un regroupement de
variables. Pour mieux comprendre, regardons ce qu'il se passe dans la mémoire de l'ordinateur. En schématisant, on peut voir la mémoire d'un ordinateur comme un ensemble de cases
dans lesquelles sont stockées des valeurs. Chacune de ces cases a une adresse. On peut donc
accéder au contenu d'une case grâce à son adresse.
En général, un tableau est un groupe de cases consécutives. La taille (nombre de cases) d'un
tableau est xe. En contrepartie, on connaît directement l'adresse de n'importe quel élément
du tableau, et on peut donc accéder à cet élément pour un coût de 1 accès mémoire.
Une liste en revanche est un ensemble de cases non consécutives. Dans chaque case de la liste,
on stocke deux choses : une valeur de la liste et l'adresse de la case suivante. Pour accéder à
un élément de la liste, il faut donc visiter tous les éléments précédents (accéder à l'élément
d'indice i coûte (i+1) accès mémoire). En contrepartie, la taille d'une liste peut être modiée
à volonté.
Dans la suite, on appelle indiéremment liste ou tableau un regroupement de variables sans
se préoccuper de la façon dont ces variables sont stockées. Il est néanmoins utile de retenir
que pour faire référence à un tableau (ou à une liste), on indique l'adresse du premier élément
de ce tableau.
Remarques.
•
•
En Python, on utilise le type
list.
La liste qui ne contient aucun élément s'appelle la liste vide et se note simplement
6.3 Déclaration, accès aux éléments, modications
6.3.1 En pseudo-code
En pseudo-code, un tableau T de taille n est déclaré de la manière suivante :
Variables numériques : T(n)
31
[].
On représente ensuite un tableau en mettant entre crochets ses éléments séparés par des
virgules. Enn pour accéder à un élément du tableau on indique le nom du tableau suivi de
l'indice de l'élément entre crochet.
Exemple.
1.
2.
3.
4.
5.
6.
7.
Considérons l'algorithme suivant :
Algorithme : affichage de deux éléments
Variables numériques : T(10)
DÉBUT
T ← [2,3,5,7,9,0,1,4,8,6]
Afficher : T[3]
Afficher : T[9]
FIN
6.3.2 En Python
En Python, on utilise le type
list.
La création d'un tableau et l'accès à ses éléments se font
comme en pseudo-code.
Remarques.
•
•
La taille d'un tableau est donnée par la fonction
len.
En Python, contrairement à beaucoup d'autres langages, un tableau est non-typé, c'est à
dire qu'il peut contenir des variables de plusieurs types diérents.
•
En Python, on peut aussi accéder aux éléments à partir de la n du tableau en utilisant
des indices négatifs.
Exemple.
1.
2.
3.
4.
5.
6.
7.
8.
Tester en Python l'algorithme ci-dessous :
#Algorithme : exemples sur les tableaux
tab = [1,"Toto",3.5,[1,2],True]
print(tab)
print(tab[1])
print(tab[5]) # Une erreur apparaît car on dépasse la taille du tableau
print(tab[-1])
print(tab[-2])
print(len(tab))
6.3.3 Modication des éléments d'un tableau
On peut modier les éléments d'un tableau un par un (les listes et les tableaux sont des types
dits mutables). Par exemple pour aecter la valeur 8 à l'élément d'indice 3 d'un tableau T,
on écrit :
en pseudo-code :
et en Python :
T[3] ← 8
T[3] = 8
6.3.4 Création d'un tableau de taille donnée
Il arrive souvent que l'on ne connaisse pas dès le départ tous les éléments d'un tableau. Pour
construire un tableau petit à petit, il y a deux façons de procéder :
•
La méthode 1 :
consiste à créer un tableau de la taille voulue dont tous les éléments
sont identiques (par exemple 0), puis à modier les éléments un par un.
•
La méthode 2 : consiste à créer un tableau vide auquel on ajoute des éléments petit à
petit (voir ci-dessous pour les détails sur l'opération d'ajout d'un élément).
32
Exemple.
•
Remplissons par exemple un tableau avec dix nombres aléatoires.
Avec la méthode 1 :
1. tab = [0]*10 # On crée un tableau contenant 10 zéros
2. for i in range(0,10) :
3.
tab[i] = randint(1,100) # On modifie les éléments un par un
4. print(tab)
•
Avec la méthode 2 :
1. tab = [] # On part de la liste vide
2. for i in range(0,10) :
3.
tab = tab + [randint(1,100)] # On ajoute les éléments un par un
4. print(tab)
6.4 Opérations sur les tableaux en Python
6.4.1 Concaténation
Si l'on dispose de deux listes, on peut vouloir les coller l'une à l'autre pour n'avoir plus qu'une
liste. Cette opération s'appelle la concaténation. Il existe deux façons de faire en Python.
•
La première façon crée une nouvelle liste, et utilise l'opération
1.
2.
3.
4.
•
+
:
l = [1,2,3]
m = [4,5]
lm = l + m
print(lm)
La seconde façon utilise la méthode de liste
extend.
Cela ne crée pas une nouvelle liste,
mais modie la première des deux listes.
1.
2.
3.
4.
•
l = [1,2,3]
m = [4,5]
l.extend(m)
print(l)
On peut également concaténer plusieurs fois une liste à elle même avec le symbole :
∗.
1. l = [1,2,3]
2. m = l*5
3. print(m)
Remarques.
•
•
La seconde méthode est beaucoup moins coûteuse que la première.
L'opération
extend
est ce que l'on appelle une méthode de liste. Elle ne renvoie rien,
mais modie l'objet auquel on l'applique.
6.4.2 Ajout d'un élément à la n d'un tableau
Pour ajouter l'élément t à la n de la liste L :
•
on peut concaténer L à la liste [t]. Cela nécessite de créer une nouvelle liste. Exemple :
1. l = [1,2,3]
2. m = l + [4]
3. print(m)
33
•
ou on peut modier la liste existante en utilisant la méthode de liste
append
:
1. l = [1,2,3]
2. l.append(4)
3. print(l)
Remarque.
Comme précédemment, la seconde option est bien plus rapide.
6.4.3 Copie d'un tableau
Attention : comme on l'a signalé plus haut, une liste en Python est stockée sous la forme
d'une adresse mémoire. Il est donc indispensable de faire attention lorsque l'on veut copier
une variable de type
Exemple.
1.
2.
3.
4.
list
dans une autre variable.
Tester :
a = [1,2,3,4,5]
b = a
b[1] = 10
print(a)
a on stocke en réalité l'adresse de la liste dans la mémoire. Avec
recopie cette adresse dans la variable b. Tout changement eectué
Explication : dans la variable
l'instruction b
= a
on
sur les emplacements mémoires correspondants à cette adresse changera donc simultanément
a
et
b.
Pour créer une nouvelle liste (stockée dans un emplacement mémoire diérent) ayant les
mêmes valeurs que la liste
1.
2.
3.
4.
5.
a,
on procède comme suit :
a = [1,2,3,4,5]
c = a[:]
c[1] = 20
print(a)
print(c)
6.4.4 Autres opérations
Si on dispose d'une liste appelée
•
•
•
•
ma_liste,
on peut utiliser diérentes fonctions :
sous_liste = ma_liste[1:3]
Faire la somme de la liste : somme = sum(ma_liste)
Trouver le maximum de la liste : maximum = max(ma_liste)
Trouver le minimum de la liste : minimum = min(ma_liste)
Extraire une sous-liste :
Il existe aussi diérentes méthodes de listes :
• Trier une liste : ma_liste.sort()
• Trouver l'indice d'un élément : ma_liste.index(2)
• Inverser une liste : ma_liste.reverse()
• Enlever un élément : ma_liste.remove(2)
• La liste complète des méthodes de liste s'obtient en tapant
help(list)
34
dans l'interpréteur :
6.5 Exercices
Exercice 31.
Écrire en Python une procédure
afficheT
prenant en paramètre un tableau
et achant l'un après l'autre tous les éléments du tableau.
On pourra tester la procédure avec le tableau suivant :
[2, False, [3, 4, 5], "Bonjour",3.4, "?", 7*8, 0]
Exercice 32.
Écrire en pseudo-code puis en Python un algorithme demandant de saisir 5
valeurs réelles et stockant ces valeurs dans un tableau. On achera le tableau à la n de
l'algorithme.
Exercice 33. Écrire en pseudo-code puis en Python une fonction mult3 prenant en paramètre
liste_nb
une liste de réels notée
liste_nb
et retournant une liste dont les éléments sont ceux de
multipliés par 3.
Exercice 34.
Écrire en pseudo-code puis en Python une fonction
miroir
prenant en para-
mètre une liste et retournant la liste inversée.
Par exemple
miroir([1,2,3])
retourne
[3,2,1].
Exercice 35.
a) Écrire une fonction
maximum prenant en paramètre un tableau et retournant la plus grande
valeur du tableau.
b) Écrire une procédure
contient3 prenant en paramètre un tableau et achant si la valeur
3 apparaît dans le tableau. Si la valeur 3 apparaît, la procédure doit acher l'indice du
premier élément valant 3.
c) Écrire en Python un algorithme créant une liste de taille N composée d'entiers aléatoires
entre 1 et 1000, où N est un entier saisi par l'utilisateur, puis achant le maximum du
tableau, ainsi qu'un message disant si la valeur 3 apparaît dans le tableau.
Exercice 36 (Tri à bulles).
Considérons un tableau de taille
n
constitué de nombres entiers. Nous allons trier ces entiers
dans l'ordre croissant selon la méthode appelée tri à bulles. Le tri à bulles consiste à parcourir
le tableau en comparant les éléments consécutifs et à les échanger s'ils ne sont pas dans l'ordre
croissant. Après le premier parcours du tableau, le plus grand élément du tableau se situe
en dernière position, comme une bulle remontée en surface d'où le nom de la méthode. Et
après chaque parcours du tableau, un élément supplémentaire est trié. Donc au bout de
n−1
parcours, le tableau est entièrement trié.
a) Écrire en pseudo-code puis en Python le tri à bulles sous forme d'une fonction
b) En réalité, le tableau peut être trié avant que les
tribulles.
n−1 parcours aient été eectués. On peut
en eet s'arrêter dès lors qu'aucun n'échange n'est fait pendant un parcours. En s'aidant
de cela, modier la fonction précédente pour limiter le nombre de parcours.
Exercice 37 (Bataille navale).
On veut programmer un jeu de bataille navale. On joue sur un plateau de 5 cases sur 5. Un
bateau (de taille
1 × 1)
est placé aléatoirement sur l'une des cases.
a) On représente le plateau par une liste contenant 5 listes de taille 5, chaque liste représentant
une ligne du plateau. Les éléments des listes valent 0 sauf l'élément correspondant à la
case sur laquelle est le bateau, qui vaut 1. Écrire un algorithme plaçant aléatoirement un
bateau sur le plateau.
b) Écrire un algorithme qui demande à l'utilisateur de saisir des coordonnées jusqu'à ce que
bateau soit coulé.
35
7
Chaînes de caractères
7.1 Dénition et premiers exemples
Dans ce chapitre, nous abordons une nouvelle classe d'objets : les chaînes de caractères. Les
chaînes de caractères sont représentées en Python par le type
str (abréviation du mot anglais
string).
Dénition.
Une chaîne de caractère peut être dénie comme une succession quelconque de
caractères. En pseudo-code comme en Python, une chaîne de caractères peut être délimitée
soit par des guillemets, soit par des apostrophes.
Comme nous l'avons déjà vu à plusieurs reprises, on peut acher une (ou plusieurs) chaîne
de caractères à l'aide de la fonction
print.
Exemple.
1. phrase1 = "Bonjour tout le monde !"
2. phrase2 = 'Comment ça va ?'
3. print(phrase1, phrase2)
Dénition. Le nombre de caractères d'une chaîne de caractère s'appelle longueur de la chaîne.
Pour connaître la longueur d'une chaîne en Python, on utilise la fonction
len.
Exemple.
1. chaine = "blablabla"
2. print(len(chaine))
Remarque.
opérateurs
En Python, on peut également comparer deux chaînes de caractères à l'aide des
<, >, ! =
et
==.
L'ordre utilisé est l'ordre lexicographique.
7.2 Caractères, sous-chaînes
Remarque.
Comme pour les tableaux, les caractères d'une chaîne de caractères sont nu-
mérotés. Ces numéros s'appellent indices. On rappelle qu'en Python, et par convention en
pseudo-code (pour ce cours), les indices commencent à 0.
Pour accéder à un caractère d'une chaîne de caractères, on utilise son indice, mis entre crochets. Les indices permettent également d'extraire une sous-chaîne d'une chaîne de caractères
donnée.
Exemple.
1. chaine = "Les crocodiles peuvent rester 45 minutes sous l'eau"
2. print(chaine[0])
3. print(chaine[4:13])
Remarque.
Attention,
chaine[4:13]
contient les caractères d'indices 4 à 12 de la chaîne.
Tester par exemple le code ci-dessous :
1. chaine="0123456789"
2. print(chaine[3:4])
Remarque.
Attention, contrairement aux tableaux, il n'est pas possible de modier les ca-
ractères d'une chaîne un par un. Par exemple les deux instructions suivantes renvoient une
erreur :
1. chaine = "blabla"
2. chaine[1] = "h" # cette instruction renvoie une erreur
36
7.3 Opérations sur les chaînes de caractères
7.3.1 Concaténation
Comme les tableaux, les chaînes de caractères peuvent être concaténées. Pour concaténer deux
chaînes de caractères, on utilise l'opérateur
+,
en pseudo-code comme en Python.
Exemple.
1.
2.
3.
4.
chaine1 = "Bonjour, je m'appelle... "
chaine2 = "Bob !"
chaine = chaine1 + chaine2
print(chaine)
7.3.2 Transtypage
Il existe plusieurs opérations de transtypage applicables aux chaînes de caractères :
•
Entre chaîne et variable numérique :
Une chaîne de caractères contenant uniquement un nombre entier peut être transtypée
en une variable de type
int.
Par exemple :
1. chaine = "42"
2. nombre = int(chaine)
3. print(nombre)
Une chaîne de caractères contenant uniquement un nombre réel peut être transtypée en
float. Par
1. chaine = "3.1415"
2. nombre = float(chaine)
3. print(nombre)
une variable de type
exemple :
Et réciproquement, une variable numérique peut être transtypée en une chaîne de caractères à l'aide de la fonction
str.
Par exemple :
1. nombre = 42
2. chaine = str(nombre)
3. print(chaine)
•
Entre chaîne et liste :
Une chaîne peut être transtypée en une liste. Les éléments de la liste obtenue sont alors
les caractères de la chaîne. Par exemple :
1. chaine = "Bonjour !"
2. liste = list(chaine)
3. print(liste)
Et réciproquement, une liste contenant des caractères ou des chaînes de caractères peut
être assemblée en une seule chaîne de caractères à l'aide de la méthode
join, appliquée à
la chaîne que l'on veut utiliser comme séparateur entre les éléments de la liste. Exemple :
1.
2.
3.
4.
liste = ["Et", "...", " ","Hop !"]
print(liste)
chaine = "".join(liste)
print(chaine)
37
7.3.3 Conversion en entiers
Les caractères sont codés par des entiers. En Python, on peut passer d'un caractère à l'entier
qui le code (en ascii) à l'aide de la fonction
ord. Et réciproquement, on peut passer d'un entier
chr.
au caractère qu'il représente à l'aide de la fonction
Exemple.
1. print(ord("a"))
2. print(chr(97))
7.3.4 Méthodes de chaînes
Comme pour les tableaux, il existe en Python un certain nombre de méthodes pour les chaînes
de caractères, dont certaines peuvent s'avérer utiles.
Exemples. Supposons que l'on ait une variable de type string nommée chaine, par exemple :
chaine = "Bob dit : Blablabla"
Alors :
• chaine = chaine.upper() : met la chaîne en majuscules,
• chaine = chaine.lower() : met la chaîne en minuscules,
• chaine.index("bla") : donne l'indice de la première occurrence
de la sous-chaîne bla
(erreur si la chaîne de contient pas bla),
• chaine.count("bla")
: compte le nombre d'occurrences de la sous-chaîne bla.
7.4 Exercices
Exercice 38.
Écrie en pseudo-code puis en Python une fonction
compte_b prenant en paramètre une chaine
de caractères et retournant le nombre d'occurrences du caractère b dans celle-ci.
Exercice 39.
Écrire en pseudo-code puis en Python un algorithme demandant à l'utilisateur de saisir une
chaîne de caractères, puis créant une liste dont les éléments sont les caractères de la chaîne,
et achant cette liste. (On s'interdira l'utilisation de la fonction
list.)
Exercice 40.
a) Écrire une fonction
bin2dec
prenant en paramètre une chaine de caractères représentant
un nombre en base 2 et retournant ce nombre en base 10.
b) Écrire en pseudo-code et en Python une fonction
dec2bin prenant en paramètre un entier
en décimal et retournant une chaîne de caractères contenant l'équivalent binaire de cet
entier.
Exercice 41.
a) Écrire en pseudo-code et en Python un algorithme demandant de saisir une phrase et
achant une version modiée de cette phrase dans laquelle tous les caractères e sont
remplacés par des caractères z.
b) Écrire un algorithme demandant de saisir une phrase et achant une version modiée de
cette phrase dans laquelle toutes les occurrences de la sous-chaînes Bob sont remplacées
par la sous-chaîne Roger. Appliquer cet algorithme à la phrase : Bob dit : je m'appelle
Bob !.
38
Exercice 42.
Écrire en pseudo-code et en Python une fonction
compte_mots
prenant en paramètre une
phrase sans aucune ponctuation et retournant le nombre de mots de cette phrase.
On se placera dans le cas où la chaîne commence par un mot et se termine par un mot, ne
contient aucun signe de ponctuation, et où les mots sont séparés par un seul espace.
Exercice 43.
On considère l'algorithme suivant :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Algorithme : A1
Variables :
DEBUT
alphabet ← "abcdefghijklmnopqrstuvwxyz"
Saisir : mot
nouveau_mot ← ""
POUR i allant de 0 à (longueur(mot)-1) :
pos ← position dans l'alphabet de mot[i]
nouvelle_pos ← (pos+5)%26
nouveau_mot ← nouveau_mot + alphabet[nouvelle_pos]
FIN POUR
Afficher : nouveau_mot
FIN
a) Lister les variables de A1. Que fait A1 ? L'appliquer au mot Bob.
b) Écrire A1 en Python.
c) Écrire un algorithme A2 permettant de crypter une phrase en minuscules sans accents
saisie par l'utilisateur, en laissant les espaces et la ponctuation inchangés.
d) Écrire un algorithme A3 permettant de décoder les phrases codées par l'algorithme A2.
e) Utiliser A3 pour décoder le message : qj rty xjhwjy jxy : gtg !.
f ) Bonus : modier les algorithmes précédents pour prendre en compte les majuscules et les
accents.
Exercice 44 (numéro INSEE).
On rappelle que le numéro INSEE (ou numéro de sécurité sociale est formé de 15 chires :
1 chire pour le sexe (1 pour les hommes et 2 pour les femmes)
2 chires correspondants aux deux derniers chires de l'année de naissance
2 chires correspondants au mois de naissance
2 chires correspondant au département de naissance
3 chires correspondant à la commune de naissance
3 chires correspondants au numéro d'inscription sur le registre des naissances
2 chires correspondant à une clé de contrôle. Soit
r
le reste de la division euclidienne
du nombre formé par les 13 premiers chires par 97. La clé de contrôle vaut
97 − r.
a) Écrire un algorithme demandant de saisir un numéro INSEE, et achant si le numéro est
valide (c'est-à-dire si la clé de contrôle est correcte) ainsi que le sexe, la date de naissance
et le département de naissance associés au numéro.
b) Tester l'algorithme précédent sur le numéro de sécurité sociale de Bob, qui est 1 42 11 13
055 376 56.
c) Tester la validité du numéro : 2 85 05 33 569 001 89.
39
Téléchargement