Initiation à l`informatique et à l`abstraction en biologie (I)

publicité
Année universitaire 2016–2017
Travaux dirigés
Initiation à l’informatique
et
à l’abstraction en biologie (I)
2V315
Licence Sciences de la Vie
Informations générales
Responsables de l’UE : Sophie Pasek et Jacques Pédron
Secrétariat : Couloir 33-34 1er étage porte 112.
— Chaque séance comporte des exercices complémentaires pour s’entraîner.
— Documents en ligne sur le site sakaï du module :
— le calendrier (pour les cours du soir sur le site de la section AHA 1 ) ;
— la version numérique de ce fascicule ;
— tous les fichiers à utiliser dans les exercices ;
— des liens utiles relatifs à la programmation en Python ;
— des liens utiles pour pratiquer les exercices de programmation chez soi.
— Pour pratiquer les exercices de programmation sur le campus, vous pouvez aller travailler à
l’UTES. Vous y trouverez un environnement de travail analogue à celui des salles de TD.
— Centre pédagogique de ressources multimédias pour les étudiants et enseignants de l’université, L’UTES 2 assure un accompagnement pédagogique des étudiants en libre-service et
plus généralement, il est le centre d’innovation pédagogique par les TICE de l’UPMC ;
— Ouverture du centre : du lundi au vendredi, de 8h05 à 18h, sans interruption ;
— Accueil et salles de travail de l’UTES : Atrium 1er étage.
1. http://abiens.snv.jussieu.fr/AHA
2. http://www.lutes.upmc.fr/
UPMC – Licence
2
TD – 1 Notions de base : Variable - Affectation - Saisie
- Affichage
Notions de cours
Variables
La formalisation d’un problème nécessite la manipulation de données de différentes natures
(numérique, alphanumérique, booléen, ...). Ceci s’effectue à l’aide de variables. Une variable
permet de représenter une donnée par un nom. Chaque variable est déclarée au début de
l’algorithme : on indique pour chaque variable un nom et un type :
Déclarer nom : type
Par exemple :
Déclarer longueur, rayon : réel
Déclarer titre : chaîne de caractères
Types de données
Le type d’une variable indique la nature des données qui y sont stockées. Il définit les valeurs
possibles et les opérations que l’on peut effectuer sur ces valeurs. Par exemple, il est possible
de diviser des nombres (entiers ou réels) entre eux, mais pas des chaînes de caractères ; on
peut passer une chaîne de caractères en majuscules, mais pas un nombre, etc.
Type de donnée
Entier
Réel
Chaîne de caractères
Booléen
Exemples de valeurs
Opération spécifique
7 — 2 — -71
7 modulo 3
-6,0 — 3,14 — 21,672541
arrondi(3,14)
’z’ — ’Toto’ — ’Turlututu !’ Majuscule(’Toto’)
Vrai — Faux
¬ Faux
Résultat
1
3
’TOTO’
Vrai
L’opération de base sur une variable est l’affectation, c’est-à-dire le stockage d’une valeur
dans la variable. On distingue :
Affectation
Littérale
Expression
Saisie utilisateur
Variable
Syntaxe
Exemple
nom ← valeur
x←5
nom ← expression
y ← 29 - 4x
nom ← [CLAVIER] R ← [CLAVIER]
nom2 ← nom
z←x
Les variables en python
Dans un langage de programmation, le nom de la variable constitue un lien vers une adresse
dans la mémoire de l’ordinateur. La taille de l’emplacement mémoire nécessaire au stockage
de la valeur dépend de son type (entier, réel, caractère, booléen).
UPMC – Licence
3
2V315
TD 1
Type
Exemples de valeurs
int
7 –- 2 –- -71
float
-6.0 –- 3.14 –- 21.672541
string ’z’ –- ’Toto’ –- ’Turlututu !’
bool
True –- False
Opération
7 % 3
round(3.14)
’Toto’.upper()
not False
Résultat
1
3.0
’TOTO’
True
Affectation et L-value
En Python, la création d’une variable et l’allocation de mémoire correspondante s’effectuent
lors de son initialisation, c’est-à-dire lors de la première affectation effectuée avec cette variable.
L’opérateur d’affectation est le signe =. Lors de l’affectation, la valeur à stocker est située à
droite de l’opérateur, c’est la r-value (pour right value). L’emplacement mémoire qui reçoit la
r-value est située à gauche de l’opérateur, c’est la l-value.
La r-value peut être une valeur littérale, une variable, une expression. La l-value est obligatoirement un emplacement mémoire. Dans le cadre de cette UE, il s’agira toujours d’un nom
de variable.
Commandes
Description
Commandes Unix
gedit
python
lancer l’application éditeur de texte gedit
lancer l’interpréteur python interactif
Commandes Python
affecter r-value dans l-value
r-value : valeur littérale, variable, expression
l-value : emplacement mémoire
print variable_1 [, variable_2 ]
afficher variable_1 [, variable_2 ]
int(variable)
convertit en entier
float(variable)
convertit en réel
str(variable)
convertit en chaîne de caractères
round(variable[, n])
arrondit un nombre réel [à n décimales]
variable.upper()
convertit une chaîne de caractères en majuscules
variable.lower()
convertit une chaîne de caractères en minuscules
variable_1 % variable_2
renvoie le reste de la division entière
variable_1 = raw_input("question") affiche question, attend une entrée au clavier, et
affecte la valeur à variable_1
quit()
quitte l’environnement interactif
l-value = r-value
NB : Les mots en italiques sont des identifiants, c’est-à-dire des noms choisis par le programmeur. Les mots
en caractères droits sont des mots-clés. Les paramètres entre crochets sont optionnels.
UPMC – Licence
4
2016–2017
2V315
TD 1
Exercice – 1 Environnement Python interactif
Python a deux modes de fonctionnement : le mode interactif et le mode « exécution de
script ».
Le mode interactif est un environnement terminal où les instructions sont entrées avec le
clavier. L’interpréteur donne un retour immédiat après chaque instruction. Les instructions
précédentes sont gardées en mémoire. Le mode intéractif est un bon moyen pour se familiariser
avec des instructions en python et pour tester la validité de la syntaxe. Pour lancer le mode
interactif, il faut utiliser la commande python sans argument.
Le mode « exécution de script » correspond au cas où l’ensemble des instructions en python
sont écrites et sauvegardées dans un fichier texte portant l’extension .py, puis exécutées dans
l’interpréteur python. Pour lancer le mode « exécution de script », il faut utiliser la commande
python et donner le nom du fichier contenant les instructions (le script) en argument.
a- Ouvrir un terminal Unix (ou Terminal X).
b- Lancer l’interpréteur python en mode interactif dans le terminal Unix.
[invite_de_commande]$ python
Vous entrez maintenant dans l’environnement python interactif.
Python 2.6.2 (r271:86832, Jul 31 2011, 19:30:53)!
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.!
>>>
NB : Le message varie selon la version de Python installée. Notez que l’invite de commande est différente
de celle de l’environnement UNIX. Ici, ce sont trois signes > à la suite. Vous devez taper vos instructions en
python après cette invite.
c- Taper les instructions suivantes (validez chaque instruction en tapant la touche Entrée).
Observez et commentez les affichages obtenus en retour.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
3 + 4
3 / 0
"Hello world!"
a="Hello world!"
print a
print "a"
a="Hello"
b="world!"
print a,b
print a+b
print a-b
print c
print a*4
print a/4
quit()
UPMC – Licence
5
2016–2017
2V315
TD 1
Exercice – 2 Variables et types
a- Pour chaque objet de la liste suivante, après avoir défini sa nature, l’unité dans laquelle
on pourrait l’exprimer et la gamme des valeurs attendues, expliquer comment on pourrait le
représenter (si c’est possible) par une variable de chacun des types cités ci-dessus :
— l’âge d’un individu ;
— le nombre d’enfants d’un couple ;
— le nombre moyen d’enfants par couple dans une population ;
— le sexe d’un individu ;
— la taille d’un individu ;
— le nom d’une ville, d’un pays ou d’un continent ;
— une couleur.
Exercice – 3 Affectation et L-value
a- Indiquer pour chacune des affectations suivantes si elle est valide ou non, en justifiant
votre réponse. Taper ces instructions (suivies de la touche Enter) dans l’environnement Python
interactif et lire le message d’erreur le cas échéant.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
a
b
b
2
1
y
b
a
=
=
=
=
+
=
=
=
8
a
c
a
2
5
a
a
=
+
+
+
a
3
5
5
Exercice – 4 Types de variables
a- Dans l’environnement Python interactif, taper les initialisations suivantes :
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
a
b
c
d
e
f
g
h
i
j
=
=
=
=
=
=
=
=
=
=
9
1.7
1,7
True
"r"
’r’
"Bonjour tout le monde!"
"True"
"9"
2
b- Utiliser la fonction type() pour connaître le type de chacune des variables initialisées.
UPMC – Licence
6
2016–2017
2V315
TD 1
c- Taper les instructions suivantes, commenter leur résultat, en particulier les conversions
de type (voir page 4).
>>>
>>>
>>>
>>>
>>>
>>>
>>>
print 3 * a
print 3 * i
k = a / j
print k
type(k)
k = float(a) / j
print k
Exercice – 5 Affichage avec print
a- Taper les instructions suivantes :
>>>
>>>
>>>
X =
>>>
X =
X = 5.98765
Y = 9.66666
print "X = ",X, "et Y = ", Y
5.98765 et Y = 9.66666
print "X = ",round(X,2), "et Y = ", round(Y,1)
5.99 et Y = 9.7
b- Que peut-on dire sur l’utilisation des guillemets, des virgules, des caractères espace et
de la fonction round() ?
Exercice – 6 Saisie avec la fonction raw_input()
a- Taper les instructions suivantes :
>>>
>>>
>>>
>>>
>>>
>>>
X = raw_input("Entrez votre prénom : ")
print "Bonjour,",X
print type(X)
Y=X.lower()
Z=X.upper()
print "On peut écrire",Y,"ou",Z
b- Taper les instructions suivantes :
>>>
>>>
>>>
>>>
X = raw_input("Entrez une valeur entière pour X : ")
Y = 3*X
print "Y = 3 *",X,"=",Y
print type(X)
Le résultat final semble incohérent (3 × 4 vaut 12 et non 444). En fait, raw_input() traite
toutes les saisies comme étant de type string, il faut donc penser à utiliser les fonctions de
conversion pour les entiers int() et les reels float().
c- Recommencer (utiliser les touches flèches haut, flèche bas pour rappeler les précédentes
instructions) mais cette fois, convertir X en entier après la saisie et avant l’affectation sur Y.
UPMC – Licence
7
2016–2017
2V315
TD 1
Exercice – 7 Exécution d’un programme en mode « exécution de script »
a- Sortir de l’environnement python interactif avec la fonction quit()
b- Lancer l’éditeur de texte gedit, en tapant : gedit &
c- Dans gedit, écrire les instructions dans un fichier texte et le sauvegarder avec l’extension
.py (exo7c.py). L’extension .py permet d’obtenir la coloration syntaxique du langage. Si celleci n’apparait pas, il faut l’activer (Menu Affichage, Mode de coloration, Scripts, Python).
Pour lancer l’interprétation du script dans python, il faut donner le nom du fichier .py en
argument de la commande.
Exemple :
[invite_de_commande]$ python exo7c.py
python appelle l’interpréteur Python, exo7c.py est le nom du programme à exécuter.
Rq : Pour pouvoir utiliser les caractères accentués dans les affichages, on doit spécifier en début de programme
que l’encodage utf8 doit être utilisé avec la ligne suivante :
# -*- coding: utf-8 -*Exercice – 8 Introduction à l’utilisation de sakai
exo7c.py est le premier programme créé dans cette UE. Par la suite, d’autres programmes
vont être écrits et seront nommés exoEq.py, suivant E le numéro de l’exercice et q la lettre de
la question. Le portail sakai permet alors de retrouver ces programmes en dehors des séances
de TD.
La procédure à suivre est expliquée dans l’annexe sakai page 37.
UPMC – Licence
8
2016–2017
TD – 2 Introduction à la programmation — nombres
aléatoires
Notions de cours
Les nombres aléatoires
Les tirages aléatoires sont fréquemment utilisés en programmation.
Dans les algorithmes, on obtient un nombre aléatoire avec :
X ← réel_aléatoire
Affecte à X une valeur réelle pseudo-aléatoire dans
l’intervalle [0,1[
N ← entier_aléatoire(a,b) Affecte à N une valeur entière pseudo-aléatoire dans
l’intervalle [a,b]
Pour tirer un nombre aléatoire en langage Python, on utilisera deux fonctions de la bibliothèque random. Il faudra donc importer la bibliothèque random en début de programme avec
l’instruction :
import random
La fonction random() de la bibliothèque random renvoie une valeur réelle pseudo-aléatoire
comprise dans l’intervalle [0, 1[.
La fonction randint(a,b) de la bibliothèque random renvoie une valeur entière pseudoaléatoire comprise dans l’intervalle [a, b]
Exemple dans python interactif :
>>> import random
>>> random.random()
0.4364643628564109
>>> random.randint(1,10)
9
>>> random.randint(1,10)
2
UPMC – Licence
9
2V315
TD 2
Exercice – 9 Générer un nombre aléatoire dans l’intervalle [a, b[ (première utilisation de la fonction random() )
a- Écrire l’expression Python qui permet de générer un réel aléatoire compris entre 100 et
200 exclu, c’est-à-dire dans l’intervalle [100, 200[.
b- Écrire l’expression Python qui permet de générer un entier aléatoire compris entre 1 et
6 inclus, c’est-à-dire dans l’intervalle [1, 6].
c- Lancer un terminal X, lancer l’interpréteur Python puis testez l’expression des questions
a et b.
Exercice – 10 Affectation et affichage
a- Écrire l’algorithme d’un programme qui initialise deux variables correspondant à l’âge
et à la taille d’un individu, respectivement 18 et 1,85. Le programme affichera le message
suivant :
age = 18 et taille = 1.85
b- Écrire un algorithme qui initialise trois variables correspondant à l’année en cours (2016),
à l’année de naissance (2000) et à la taille d’un individu (1.40 m), puis qui affiche le message
suivant :
age = 16 et taille = 1.40
Exercice – 11 Réactualiser une expression
Décrire la procédure à suivre pour résoudre le problème suivant :
Soit une température donnée en degrés Celsius (◦C), la convertir en degrés Fahrenheit (◦ F)
selon la formule :
T f = 32 + T c × 1, 8
a- Quelles sont les variables nécessaires et leur type ?
b- Écrire l’algorithme pour convertir 20 ◦C.
c- Écrire les instructions Python (dans l’interpréteur) permettant de convertir 20 ◦C et
affichant lisiblement le résultat.
d- Rappeler et/ou modifier les commandes précédentes (flèches vers le haut et vers le bas),
afin d’effectuer la conversion de 30 ◦C en ◦ F, puis afficher le résultat.
Exercice – 12 Permuter le contenu de 2 variables
a- Écrire un algorithme qui réalise l’échange en mémoire du contenu de deux variables A
et B. Par exemple si les variables sont initialement A = 1,4 et B = 2,3, après exécution de
l’algorithme on aura A = 2,3 et B = 1,4.
UPMC – Licence
10
2016–2017
2V315
TD 2
b- Faire un tableau pour suivre l’évolution des valeurs des variables au cours de l’exécution
pas à pas de l’algorithme.
c- Écrire les instructions correspondantes en Python (dans l’interpréteur).
Exercice – 13 Saisie de données utilisateur avec la fonction raw_input(), (premier
programme)
a- Utilisation de raw_input() dans l’environnement Python interactif : taper ces instructions et lire les affichages.
>>>
>>>
>>>
>>>
a = raw_input("entrer une chaine de caractères : ")
print a, type(a)
b = raw_input("entrer un entier : ")
print b, type(b)
b- Écrire l’algorithme qui demande à l’utilisateur d’entrer une température en ◦C, qui la
convertit en ◦ F et affiche le résultat.
c- Traduire cet algorithme sous forme d’instructions en Python, que l’on stocke alors dans
un fichier nommé exo13b.py, en utilisant l’éditeur gedit (pour rappel, taper gedit &, après
avoir quitté l’environnement python interactif). Exécuter ce programme (python exo13b.py).
Exercice – 14 Messages d’erreur
Reprendre le code du programme exo13b.py, le sauvegarder sous exo14a.py, y effectuer tour
à tour chacune des modifications suivantes (ne pas oublier d’enregistrer à chaque fois) et
observer le message d’erreur obtenu (s’il y en a un). Si le programme s’exécute, observer son
comportement. Attention : Après chaque modification, revenir à l’état initial.
a- Supprimer la ligne qui permet la saisie de la valeur de température à convertir.
b- Changer le nom d’une variable en modifiant uniquement la casse (majuscule / minuscule)
d’un caractère.
c- Modifier l’expression de calcul, par exemple : T f = 45 + T c × 1.8.
d- Échanger les variables dans la ligne qui effectue le calcul de conversion (i.e. utiliser pour
effectuer un calcul une variable qui n’est pas encore initialisée).
e- Changer print en prinf.
f- Supprimer un des guillemets dans la commande d’affichage du résultat.
UPMC – Licence
11
2016–2017
TD – 3 Sélections et tests imbriqués, expressions
booléennes
Notions de cours
Opérateurs de comparaison
Les opérateurs de comparaison permettent de vérifier une relation d’ordre entre deux éléments de même type : vérifier s’il sont égaux, différents, plus grand ou plus petit l’un que
l’autre. Pour cela on utilise des opérateurs différents en fonction du type :
Opérateurs numériques et caractères
Strictement inférieur
<
Inférieur ou égal
<=
Strictement supérieur
>
Supérieur ou égal
>=
égalité
==
différence
!=
Opérateurs booléens
ET logique
OU logique
Négation logique
and
or
not
Sélections conditionnelles
Ces opérateurs de comparaison sont utilisés pour tester les valeurs prises par les variables
lors de l’exécution du programme. Un test permet ainsi de faire une sélection conditionnelle.
Sélection simple
Début
Déclarer nb_bonbons : entier
Afficher « Combien reste-t-il de bonbons dans la boîte ? »
nb_bonbons ← [CLAVIER]
Vrai
Faux
nb_bonbons
< 10 ?
Afficher « Pensez à acheter des bonbons »
Fin
Voiçi le code python correspondant :
UPMC – Licence
12
2V315
TD 3
nb_bonbons = raw_input("Combien reste-t-il de bonbons dans la boîte ?")
nb_bonbons = int(nb_bonbons)
if nb_bonbons < 10:
print "Pensez à acheter des bonbons"
Les instructions qui seront exécutées si le test est Vrai sont regroupés dans le bloc qui suit le
if. Les instructions d’un bloc doivent être indentées, c’est-à-dire décalées vers la droite avec
des espaces ou une tabulation et alignées verticalement. Attention : ne pas mélanger espaces
et tabulations !
Sélection alternative
Début
Déclarer nb_bonbons : entier
Afficher « Combien reste-t-il de bonbons dans la boîte ? »
nb_bonbons ← [CLAVIER]
Vrai
nb_bonbons
< 10 ?
Afficher « Pensez à acheter des bonbons »
Faux
Afficher « Il y a encore assez de bonbons »
Fin
nb_bonbons = raw_input("Combien reste-t-il de bonbons dans la boîte ?")
nb_bonbons = int(nb_bonbons)
if nb_bonbons < 10:
print "Pensez à acheter des bonbons"
else : #le nombre de bonbons est supérieur ou égal à 10
print "Il y a encore assez de bonbons"
UPMC – Licence
13
2016–2017
2V315
TD 3
Exercice – 15 Mise en route
a- Lancer le terminal et exécuter python en mode interactif.
b- Donner le résultat des tests qui suivent. Vérifier en tapant les instructions en ligne de
commande.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
pi = 3.14
A = False
B = True
2 < 3
pi == 4
A == B
True != False
not A == B
"A" < "B"
2 < 3 and 4 >= 10
2 < 3 or 4 >= 10
Exercice – 16 Un premier test
a- Écrire l’algorithme d’un programme qui demande son âge à l’utilisateur et affiche
« Vous pouvez entrer » si l’utilisateur a au moins 18 ans.
b- Modifier l’algorithme pour que le programme affiche en plus « Vous ne pouvez pas
entrer » si l’utilisateur a moins de 18 ans.
c- Écrire le programme exo16b.py correspondant à l’algorithme de la question b ci-dessus.
Exercice – 17 Devinette
On a écrit deux petits programmes en Python, dont voici les scripts :
nbsup4_1.py
a=raw_input("Donnez un nombre : ")
a=float(a)
if a>4.0:
print "le nombre est plus grand que 4"
print "le nombre vaut",a
ab—
—
c-
nbsup4_2.py
a=raw_input("Donnez un nombre : ")
a=float(a)
if a>4.0:
print "le nombre est plus grand que 4"
print "le nombre vaut",a
Écrire les algorithmes correspondant à ces deux programmes.
Prévoir ce qu’affiche chacun de ces programmes
si l’utilisateur répond 2 à la question ;
si l’utilisateur répond 8 à la question.
Vous pouvez vérifier votre réponse en créant les deux programmes et en les exécutant.
UPMC – Licence
14
2016–2017
2V315
TD 3
Exercice – 18 Somme ou produit de deux nombres
a- Écrire l’algorithme d’un programme qui, en utilisant un test conditionnel :
— demande deux nombres entiers à l’utilisateur ;
— affiche le menu suivant : - pour somme taper s -- pour produit taper p - ;
— demande à l’utilisateur quel est son choix ;
— affiche la réponse correspondant à l’option choisie par l’utilisateur.
b- Que se passerait-il si l’utilisateur entrait X comme choix ?
c- Modifier l’algorithme en conséquence, en ajoutant une étape de vérification de la validité
de la valeur entrée.
d- Écrire le programme exo18c.py correspondant à l’algorithme de la question c.
Exercice – 19 Résolution d’équations
Soient a, b et c trois variables de type réel.
a- Écrire l’algorithme d’un programme qui demande à l’utilisateur d’entrer les valeurs de a
puis de b et qui affiche le résultat de l’équation a · x + b = 0.
b- Écrire le programme exo19a.py correspondant.
c- Écrire l’algorithme d’un programme qui demande à l’utilisateur d’entrer les valeurs de a,
de b puis de c et qui affiche le résultat de l’équation a · x2 + b · x + c = 0 (on supposera que a
est différent de 0).
d- Écrire le programme exo19c.py correspondant.
e- Idem qu’à la question c mais on supposera que a peut être égal à 0.
UPMC – Licence
15
2016–2017
TD – 4 Répétition conditionnelle
Notions de cours
Structure de répétition conditionnelle ou boucle
Il s’agit de répéter (exécuter plusieurs fois) une ou plusieurs instructions. La répétition est dite
« conditionnelle » car c’est la valeur : vrai ou faux d’une expression booléenne qui conditionne
l’entrée dans le corps de la boucle et donc l’exécution du bloc d’instructions correspondant.
Afin de répéter une action ou une série d’instructions plusieurs fois, la boucle while peut
être utilisée. Le principe est simple : la série d’instructions est répétée tant que la condition
est vraie.
Exemple 1 : Connaissant la surface actuelle d’un nénuphar et sachant que cette surface
double tous les jours, on veut savoir quand le nénuphar déborde de sa mare et quelle est alors
sa surface.
Début
Déclarer j, s_nenu, s_mare : entiers
s_nenu ← 10
s_mare ← 200
j←0
Vrai
s_nenu <
s_mare ?
s_nenu = 10
s_mare = 200
j = 0
while s_nenu < s_mare:
s_nenu = s_nenu * 2
j = j + 1
print "Débordement jour", j
print "Surface :", s_nenu
Faux
s_nenu ← s_nenu x 2
j←j+1
Afficher « Débordement jour », j
Afficher « Surface : », s_nenu
Fin
Si l’on souhaite répéter des instuctions un nombre de fois défini à l’avance, on fait porter
la condition sur la valeur d’une variable qui sert de compteur de tours. Cette variable est
initialisée avant d’entrer dans la boucle et augmente de 1 à chaque tour de boucle.
UPMC – Licence
16
2V315
TD 4
Exemple 2 : Afficher 10 fois "Bravo", puis une fois "Et encore bravo".
Début
Déclarer b : entiers
b←0
Vrai
b < 10 ?
b = 0
while b < 10:
print "Bravo"
b = b + 1
print "Et encore bravo"
Faux
Afficher « Bravo »
b←b+1
Afficher « Et encore bravo »
Fin
ou
Début
Déclarer b : entiers
b←1
Vrai
b 6 10 ?
b = 1
while b <= 10:
print "Bravo"
b = b + 1
print "Et encore bravo"
Faux
Afficher « Bravo »
b←b+1
Afficher « Et encore bravo »
Fin
NB : Ces deux programmes produisent le même résultat à l’affichage mais la valeur du compteur (la variable b)
à la fin de l’exécution n’est pas la même : 10 dans le premier cas, 11 dans le second.
Trois éléments sont nécessaires au bon fonctionnement de la boucle while :
1. initialiser au moins une variable avant d’entrer dans la boucle (dans l’exemple 1, la
variable s_nenu est initialisée à 10 ; dans l’exemple 2, la variable b est initialisée à 0
ou 1).
2. faire tourner la boucle avec un test : on boucle tant que la condition est vraie (dans
l’exemple 1, le test est s_nenu < s_mare ; dans l’exemple 2, le test est b < 10 ou b
<= 10).
3. la variable du test doit être ré-affectée dans le corps de la boucle afin que la condition de
sortie de boucle soit atteinte, faute de quoi la boucle tourne infiniment 1 (dans l’exemple 1,
s_nenu est multipliée par 2 à chaque tour ; dans l’exemple 2, b augmente de 1 à chaque
tour).
1. Si un programme (mal écrit) contient une boucle dont la condition d’arrêt n’est jamais atteinte, alors ce
programme tourne indéfiniment. On peut stopper l’exécution d’un tel programme avec la combinaison de touches
[Ctrl][C].
UPMC – Licence
17
2016–2017
2V315
TD 4
Exercice – 20 Mais que font ces programmes ? (exécution de répétition conditionnelle)
Pour chacun des programmes suivants, écrire l’algorithme correspondant et prévoir ce qu’il
affiche au moyen d’un tableau permettant de suivre l’évolution des variables au cours de
l’exécution :
a - bouclea.py
b - boucleb.py
i = 1
while i < 5:
print "Bonjour numéro",i
i = i + 1
i = 1
while i < 5:
print "Bonjour numéro",i
i = i + 1
c - bouclec.py
d - boucled.py
i = 1
while i < 5:
i = i + 1
print "Bonjour numéro",i
i = 1
while i < 5:
i = i + 1
print "Bonjour numéro",i
e - bouclee.py
f - bouclef.py
i = 5
while i > 0:
print "Bonjour numéro",i
i = i - 1
i = 5
while i < 5:
print "Bonjour numéro",i
i = i + 1
Exercice – 21 Le triangle de vagues (répétition conditionnelle et compteur)
a- Écrire l’algorithme et le script python exo21a.py permettant de reproduire le dessin
suivant dans votre fenêtre de terminal en utilisant une boucle conditionnelle.
Rappel : les opérateurs + et * permettent respectivement de concaténer et répéter des chaînes
de caractères.
~~~~~~~~~~
~~~~~~~~~
~~~~~~~~
~~~~~~~
~~~~~~
~~~~~
~~~~
~~~
~~
~
UPMC – Licence
18
2016–2017
2V315
TD 4
Exercice – 22 Jeux de dés (tirage aléatoire, répétition conditionnelle et test)
On considère une partie de dé où on lance un dé de manière successive en notant les résultats
des lancers.
a- Écrire l’algorithme pour un jeu où on lance successivement le dé jusqu’à ce que l’on
obtienne 6 en affichant le résultat de chaque lancer.
b- Même question, mais cette fois-ci on affiche le nombre de lancers nécessaires pour obtenir
6.
c- Même question, mais le jeu s’arrête lorsqu’on a obtenu deux 6. Écrire l’algorithme et le
script exo22c.py.
d- Même question mais on impose que les deux 6 soient successifs. Écrire l’algorithme et
le script exo22d.py en modifiant l’algorithme et le script de la question c.
Exercice – 23 Additions successives (Variable d’accumulation et répétition
conditionnelle)
a- Écrire l’algorithme d’un programme qui demande à l’utilisateur d’entrer successivement
5 nombres, puis affiche la somme de ces 5 nombres.
b- Écrire l’algorithme d’un programme qui demande à l’utilisateur d’entrer un à un des
nombres non nuls dont il calcule et affiche la somme au fur et à mesure et qui s’arrête dès
que le nombre entré est nul. À la fin, le programme affiche le nombre de valeurs qui ont été
sommées et la somme finale.
c- Écrire le script python exo23a.py correspondant à la question a.
d- Écrire le script python exo23b.py correspondant à la question b.
Exercice – 24 Pour réviser ses tables de multiplications (tirage aléatoire et répétition conditionnelle)
a- Écrire l’algorithme d’un programme qui génère deux nombres aléatoires entiers (chacun
dans l’intervalle [1, 9]) puis qui les affiche. Le résultat de la multiplication des deux nombres est
ensuite demandé à l’utilisateur. Tant que le résultat est faux la question est reposée. Quand la
bonne valeur est donnée, le résultat est affiché avec un message de félicitations, avec le nombre
de tentatives qui ont été nécessaire pour trouver le bon résultat.
b- Écrire le script exo24a.py correspondant. (Rappel : il faut écrire la condition d’entrée
dans la boucle pour répéter les actions inclues dans la boucle tant que la condition est vraie,
c’est-à-dire : on boucle tant que la réponse est incorrect).
c- Modifier l’algorithme pour qu’il affiche à chaque tour la fourchette dans laquelle le
nombre se situe, au vu de l’ensemble des propositions précédentes. Le score final sera affiché
comme précédemment. Écrivez le code exo40c.py correspondant.
UPMC – Licence
19
2016–2017
2V315
TD 4
Exercice – 25 La tortue (complémentaire)
Une tortue effectue 100 pas sur un chemin rectiligne. À chaque pas, elle avance d’une distance
aléatoire d (en cm), avec 0 6 d < 5.
a- Écrire l’algorithme qui affiche, pour chacun des 100 pas, le numéro du pas et la distance
parcourue depuis le départ.
b- Ajouter un message qui indique si la tortue a parcouru au moins 250 cm après avoir
marché 100 pas.
c- Écrire le programme exo25b.py correspondant à la question b.
d- Modifier l’algorithme pour que la tortue s’arrête dès qu’elle a parcouru 250 cm, et afficher
alors le nombre de pas qui ont été nécessaires.
e- Écrire le programme exo25d.py correspondant à la question d.
Exercice – 26 Le tir à l’arc (complémentaire)
On veut simuler un jeu de tir à l’arc. Le tireur tire toujours dans une cible carrée de 1 m
de côté. On considère que le tireur tire aléatoirement ses flèches dans la cible avec autant de
chance d’atteindre chaque point de la cible. Si la flèche arrive à moins de 30 cm du centre, on
marque 1 point. Si elle se plante à moins de 10 cm, on marque 4 points.
a- Écrire l’algorithme, puis le programme exo26a.py, qui simule le tir de 10 flèches et
annonce le total des points obtenus à la fin.
Rappel 2 : la distance entre deux points A et B (théorème de Pythagore) est donnée par :
d(A, B) =
q
(xA − xB )2 + (yA − yB )2
2. La fonction sqrt(x) de la bibliothèque math renvoie la racine carrée de x.
UPMC – Licence
20
2016–2017
TD – 5 Listes, parcours d’une liste
Notions de cours
Listes
Une liste est une variable contenant un ensemble ordonné de valeurs. Contrairement aux
variables que l’on a vu jusqu’à présent les listes contiennent donc plusieurs valeurs. Ces valeurs
sont indicées : chacune des valeurs possède un indice qui correspond à sa place dans la liste.
Par conséquent on accède à une valeur donnée par son indice. Evidemment, deux valeurs de la
liste ne peuvent pas avoir le même indice (la même place), par contre, une même valeur peut
se retrouver à plusieurs indices (c-à-d. à plusieurs places dans la liste).
Par convention, l’indice du premier élément est 0.
Exemple 1 : La liste des 10 premiers nombres premiers est : [2,3,5,7,11,13,17,19,23,29].
Si cette série de valeurs est stockée dans la variable prems, alors prems[3] vaut 7, prems[9]
vaut 29.
Exemple 2 :
Début
t = [ 6, -2, 3, 9, 3, -4 ]
print t[4]
i = 3
print t[i]
print t[i+2]
print len(t)
t.append(5)
t[2] = 6
print len(t)
print t
Déclarer i : entier
Déclarer t : liste d’entiers
t ← [6, -2, 3, 9, 3, 4]
Afficher t[4]
i←3
Afficher t[i]
Afficher t[i+2]
Afficher longueur(t)
L’exécution de ce code fait afficher :
Ajouter 5 à t
3
9
-4
6
7
[6, -2, 6, 9, 3, -4, 5]
t[2] ← 6
Afficher longueur(t)
Afficher t
Fin
NB : Dans tous nos programmes, nous nous imposons une contrainte : tous les éléments d’une même liste sont
de même type 1 .
1. De nombreux langages imposent cette contrainte. Ce n’est pas le cas de Python, mais nous éviterons de mélanger
les types, car cela peut être source de confusions et d’erreurs.
UPMC – Licence
21
2V315
TD 5
On peut utiliser un indice négatif pour compter à partir de la fin de la liste, dont l’indice
est par convention -1. Ainsi, prems[-1] vaut 29, prems[-4] vaut 17.
Extraction d’une sous-liste (slicing)
L’instruction Nom_liste[a:b] renvoie une liste de taille (b − a) composée des éléments de
Nom_liste d’indices a à (b − 1) inclus. Par exemple, prems[2:5] est la liste [5,7,11].
Si la borne inférieure est absente, la sous-liste commence au premier élément : prems[:3]
vaut [2,3,5] ; si la borne supérieure est absente, la sous-liste finit au dernier élément :
prems[8:] vaut [23,29].
Parcours d’une liste
On peut parcourir une liste de deux façons différentes :
Incrémentation d’indice
Un nombre entier est utilisé comme indice et une boucle permet de lui faire prendre successivement toutes les valeurs nécessaires pour parcourir le tableau.
Début
Déclarer i, L : entiers
voyelles = [’a’,’e’,’i’,’o’,’u’]
L = len(voyelles)
i = 0
while i < L :
print voyelles[i]
i = i + 1
Déclarer voyelles : liste de caractères
voyelles ← [’a’,’e’,’i’,’o’,’u’]
L ← longueur(voyelles)
i←0
Vrai
i < L?
L’exécution de ce code fait afficher :
Faux
a
e
i
o
u
Afficher voyelles[i]
i←i+1
Fin
UPMC – Licence
22
2016–2017
2V315
TD 5
Itération
Une variable du même type que les éléments du tableau prend successivement toutes les
valeurs contenues dans le tableau.
Début
voyelles = [’a’,’e’,’i’,’o’,’u’]
for lettre in voyelles :
print lettre
Déclarer lettre : caractère
Déclarer voyelles : liste de caractères
L’exécution de ce code fait afficher a :
voyelles ← [’a’,’e’,’i’,’o’,’u’]
Vrai
pour
lettre dans
voyelles
a
e
i
o
u
Faux
Afficher lettre
a. Une instruction print terminée par une virgule ne va pas à la ligne après impression. Ainsi, avec
« print lettre, » on obtient :
a e i o u
Fin
Cette seconde écriture est plus concise mais moins souple. Par exemple, elle ne permet pas
de parcourir le tableau à l’envers, ou en ne considérant qu’un élément sur deux, etc.
UPMC – Licence
23
2016–2017
2V315
TD 5
Exercice – 27 Tranches de listes
Initialiser une variable de type liste avec la série de valeurs suivante : 3 1 5 0 8 6 9 4 2 5 7 8
a- Extraire par slicing les 5 premiers éléments de cette liste et afficher le contenu de la
sous-liste à l’aide d’une boucle à indice « Tant que... ». Écrire l’algorithme et le code Python
exo27a.py.
b- De même, extraire les 3 derniers éléments de la liste (l’algorithme doit fonctionner
quelque soit la longueur de la liste) et les afficher par itération « Pour... ». Écrire l’algorithme
et le code Python exo27b.py.
c- idem pour la sous-liste allant du 4e au 8e élément (inclus) et affichage avec les deux types
de parcours. Écrire l’algorithme et le code Python exo27c.py.
Exercice – 28 Listes d’entiers et répétitions
Écrire les algorithmes et les codes permettant de générer les listes de valeurs suivantes au
moyen de boucles « Tant que... » et de la méthode « Ajouter » (on peut vérifier le résultat en
affichant le contenu de chaque liste au moyen d’une boucle « Pour... ») :
abcdef-
5555555555
0123456789
20 21 22 23 24 25 26 27 28 29 30
10 9 8 7 6 5 4 3 2 1 0
1 2 4 8 16 32 64 128 256 512 1024
1 1 2 3 5 8 13 21 34 55
Exercice – 29 Musique aléatoire
Dans la notation anglo-saxonne, les notes de musique sont nommées par des lettres qui vont
de A (la) à G (sol).
a- Écrire l’algorithme et le code exo29a.py d’un programme qui compose une mélodie
aléatoire de 20 notes, en choisissant au hasard les notes dans une liste qu’on aura préalablement
initialisée. La mélodie est stockée sous forme d’une liste, qu’on affiche à l’aide d’une boucle
« Pour... ».
b- Compléter l’algorithme pour qu’il demande à l’utilisateur de choisir une note (donc une
lettre) et affiche combien de fois cette note est utilisée dans la mélodie. Écrire le code exo29b.py
correspondant.
UPMC – Licence
24
2016–2017
2V315
TD 5
Exercice – 30 Climat
Le tableau ci-dessous donne la température (en degrés Celsius) enregistrée au mois de mars
à Reykjavik (Islande) sur la période 1951-1960 :
Année
Temp.
1951
-3,9
1952
2,4
1953
-3,6
1954
-13,7
1955
4,5
1956
0,8
1957
5,3
1958
-1,9
1959
3,7
1960
-7,8
a- Écrire l’algorithme permettant de calculer et afficher la température moyenne sur la
période considérée.
b- Écrire l’algorithme permettant de trouver et afficher la température la plus élevée et
l’année de son enregistrement.
c- Écrire l’algorithme qui donne la liste des années où la température a été inférieure à la
moyenne, puis le nombre de ces années.
d- Écrire les programmes exo30a.py, exo30b.py et exo30c.py correspondant aux algorithmes
des questions a, b et c.
Exercice – 31 Listes d’entiers et récursion (complémentaire)
Dans la liste de la dernière question de l’exercice 28, chaque élément doit être calculé à partir
des deux précédents (sauf, évidemment, les deux premiers). D’une façon générale, quand on
crée ainsi un élément d’une liste à partir d’un (ou plusieurs) élément(s) pré-existant(s), on dit
que la liste est générée par récursion.
Toute liste générée par itération peut également être générée par récursion (l’inverse n’est
pas vrai).
a- Écrire les algorithmes et les codes Python permettant de générer par récursion toutes
les listes de l’exercice 28.
Exercice – 32 Liste aléatoire et algorithme de rangement (complémentaire)
a- Écrire l’algorithme et le code exo32a.py d’un programme qui génère une liste de 10
nombres entiers aléatoires compris entre -20 et 20 (bornes comprises), puis affiche cette liste.
b- On veut maintenant, dans cette liste, séparer les éléments selon leur signe : tous les
nombres négatifs au début de la liste, suivis de tous les nombres positifs. Par exemple, si la
liste générée aléatoirement est [6, 14, -9, 3, -13, -4, 7, 18, -12, 1], on peut obtenir [-12, -4, -9,
-13, 3, 14, 7, 18, 6, 1]. Écrire l’algorithme et le code exo32b.py correspondants.
NB : Il ne faut pas créer une seconde liste, mais effectuer le rangement « en place » dans la liste initiale ; on
ne se soucie pas de respecter l’ordre initial des nombres, seule compte la séparation entre négatifs et positifs.
UPMC – Licence
25
2016–2017
TD – 6 Chaînes de caractères et répétitions
Notions de cours
Chaîne de caractères
Les chaînes de caractères peuvent être considérées comme des listes non modifiables composées uniquement de variables de type caractères. Une fois la chaîne définie, les caractères
qui la composent ne peuvent pas être modifiés.
Caractères spéciaux
Caractère
\n
\t
\’
\"
Signification
saut de ligne
tabulation
apostrophe (single quote), ne ferme pas la chaîne de caractères
guillemet (double quote), ne ferme pas la chaîne de caractères
Opérations sur les chaînes de caractères
Opérateurs
+
*
>, <
Description
concaténation
mutliplication
comparaison selon l’ordre alphabétique
De plus, la fonction len() donne la longueur de la chaîne.
Méthodes applicables aux chaînes de caractères
Rappel : en Python, on appelle méthode toute fonction associée exclusivement à un type de
variable et dont l’usage est définit par la syntaxe Nom_variable.Nom_méthode().
Méthodes
split()
upper()
lower()
UPMC – Licence
Description
Découpe la chaîne en sous-chaînes
Transforme les caractères en majuscule
Transforme les caractères en minuscule
26
2V315
TD 6
Exercice – 33 Manipulation de chaîne de caractères
a- Tapez les instructions suivantes :
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
proust = "Gilberte Albertine"
proust[0:8]
proust[9:]
proust[9:-3]
proust[0:7] + " et " + proust[9:-3]
proust * 3
proust[17] = "a"
proust.append("!")
"bert" in proust
"Marcel" in proust
len(proust)
proust.upper()
proust.lower()
proust.split()
proust = "Gilberte\tAlbertine"
print proust
proust.split()
proust.split("\t")
proust.split("e")
prenoms=proust.split("\t")
print prenoms
prenoms[0]<prenoms[1]
b- D’après les résultats obtenus, que peut-on faire ou ne pas faire avec les chaînes de
caractères ?
Exercice – 34 Recherche d’un élément
a- Écrire l’algorithme et le code exo34a.py d’un programme qui compte le nombre d’occurrences d’une lettre dans un mot. Le programme demandera d’abord à l’utilisateur d’entrer un
mot, puis d’entrer la lettre à rechercher. Le programme devra parcourir le mot à la recherche
de la lettre et compter son nombre d’occurrences.
b- Adapter le programme pour qu’il compte le nombre d’occurrences d’un mot dans une
phrase. Écrire l’algorithme et le code exo34b.py.
Exercice – 35 Ordre alphabétique
a- Écrire l’algorithme et le code exo35a.py d’un programme qui demande à l’utilisateur
une série de mots (séparés par des espaces) et dit si les mots sont dans l’ordre alphabétique.
Le programme ne doit pas tenir compte des minuscules et majuscules.
b- Modifier l’algorithme et le code pour que le programme distingue trois cas : (1) ordre
alphabétique, (2) ordre alphabétique inversé, (3) ni l’un ni l’autre.
UPMC – Licence
27
2016–2017
2V315
TD 6
Exercice – 36 Anagrammes (complémentaires)
a- Écrire un programme exo36a.py qui demande deux mots à l’utilisateur et détermine s’il
s’agit d’anagrammes ou non.
b- Même question mais sans compter plusieurs fois les mêmes lettres, écrire le programme
exo36b.py.
c- Écrire un programme exo36c.py qui demande un mot au joueur et propose tous les
anagrammes de ce mot.
Exercice – 37 Jeu de mots (complémentaires)
Écrire un programme exo37a.py qui :
demande un mot de six lettres minimum à un premier joueur ;
mélange les lettres de ce mot pour en faire un anagramme ;
demande à un deuxième joueur de retrouver le mot proposé par le 1er à partir de l’anagramme.
Le jeu s’arrête lorsque le 2e joueur a trouvé.
b- Modifier ce programme exo37b.py pour que le mélange soit fait par tranches de 2 lettres.
a—
—
—
UPMC – Licence
28
2016–2017
TD – 7 Expressions booléennes complexes
Notions de cours
Expressions booléennes
Les expressions booléennes sont construites en utilisant les opérateurs suivants :
— Opérateurs de comparaison <, ≤, >, ≥, 6=, = (en python <, <=, >, >=, !=, ==)
— Opérateurs booléens ET, OU, NON (en python and, or, not)
Tables de vérité
Un opérateur booléen combine deux valeurs booléennes pour produire une valeur booléenne.
A B
F F
F V
V F
V V
NON A
V
V
F
F
A ET B
F
F
F
V
A OU B
F
V
V
V
Expressions complexes
On peut construire des expressions booléennes complexes en combinant des variables, des
opérateurs et des parenthèses. Par exemple, définissons les expressions P et Q :
P ⇔ A ET (B OU NON C)
Q ⇔ NON (A OU B) ET (A OU NON C)
Si A est Vrai, B et C sont Faux, alors P est Vrai et Q est Faux.
Expressions équivalentes
Les règles d’arithmétique booléenne permettent de modifier une expression sans changer sa
valeur de vérité. On utilise généralement ces transformations pour simplifier une expression.
Distributivité :
A ET (B OU C) ⇔ (A ET B) OU (A ET C)
A OU (B ET C) ⇔ (A OU B) ET (A OU C)
Règles de Morgan :
NON (A ET B) ⇔ NON A OU NON B
NON (A OU B) ⇔ NON A ET NON B
UPMC – Licence
29
2V315
TD 7
Exercice – 38 Les booléens et les opérations sur les ensembles
On examine ici les rapports entre les booléens et les opérations sur les ensembles (union,
intersection, complémentaire).
On dispose de trois ensembles A, B et C, et on considère les propositions suivantes :
— a = « le point appartient à l’ensemble A »
— b = « le point appartient à l’ensemble B »
— c = « le point appartient à l’ensemble C »
Figure 7.1 – Ensembles
a- Déterminer pour chacun des diagrammes de la Figure 7.1 une expression booléenne
(construite à partir des propositions a, b et c) permettant de caractériser les points noirs.
b- Écrire de même une expression booléenne qui caractérise les points gris dans chaque cas.
Exercice – 39 Sélections alternatives et imbriquées - Les années bissextiles
Pour vérifier si une année est bissextile, il faut appliquer les règles suivantes :
— Les années divisibles par 4 sont bissextiles,
— Exception : les années divisibles par 100 ne sont pas bissextiles,
— Exception à l’exception : les années divisibles par 400 sont bissextiles.
Ainsi, les règles précédentes permettent de déterminer que :
400, 2000, 2008 et 2012 sont des années bissextiles
100, 1900, 2011 ne sont pas des années bissextiles
a- Concevoir un algorithme qui demande une année à l’utilisateur et affiche si l’année est
ou non bissextile. On écrira d’abord un algorithme qui applique la première règle, puis on
ajoutera la seconde, etc.
b- Construire l’expression booléenne complexe qui est vrai si et seulement si l’année est
bissextile.
c- Concevoir un autre algorithme avec seulement une sélection et son alternative.
d- Écrire le code Python exo39a.py correspondant à la question a (une fois toutes les
hypothèses ajoutées) et exo39c.py correspondant à la question c.
UPMC – Licence
30
2016–2017
2V315
TD 7
Exercice – 40 Nombre secret
a- Construire un algorithme qui permette de jouer à « plus grand, plus petit » : l’ordinateur
choisit en secret un nombre entier aléatoire compris entre 1 et 1000. À chaque tour, le joueur
fait une proposition à laquelle le programme répond par « trop grand » ou « trop petit ».
Le jeu se poursuit jusqu’à ce que le nombre secret soit découvert. Écrivez le code exo40a.py
correspondant.
b- Modifier l’algorithme précédent afin que le nombre de tours pour découvrir le nombre
secret soit limité à dix. Le programme affichera le score final, 10 si trouvé dès le premier tour,
1 si trouvé au dixième tour, 0 si le nombre secret n’a pas été découvert au bout de dix tours.
Écrivez le code exo40b.py correspondant.
Exercice – 41 Débuts et fins de traduction
Récupérez le fichier seqarn.txt disponible sur le site sakaï de l’UE. Ce fichier contient une
séquence d’ARN que vous utiliserez pour cette exercice.
a- Écrivez un algorithme qui permettent d’afficher la position dans cette séquence de tous
les codons initiateur (AUG) et de tous les stop (UAG,UAA et UGA) quelque soit leur phase
dans le sens direct.
b- Écrire le code exo41a.py correspondant.
c- Écrivez un algorithme qui permettent d’afficher la position de tous les codons starts
(AUG) et de tous les stop (UAG,UAA et UGA) quelque soit leur phase dans le sens inverse
(position de la première base du codon).
d- Écrire le code exo41c.py correspondant.
Exercice – 42 Débuts et fins de traduction (complémentaires)
a- Afficher la position de tous les codons starts (AUG) et de tous les stop (UAG,UAA et
UGA) quelque soit leur phase dans les deux sens.
b- Afficher tous les codons répétés 2 fois consécutivement, quelque soit leur phase (ou leur
sens).
c- Trouver à partir de la première base le premier codon start puis le premier codon stop
en phase, puis recommencer l’opération à partir de la première base suivant le stop, et ainsi
de suite.
Exercice – 43 Jeu de plate-forme (complémentaire)
a- Écrire un programme exo43a.py qui simule un jeu de voiture.
Le but du jeu est de gagner 100 points en moins de 10 coups. À chaque coup, le joueur
Mario, avec sa voiture, a le choix entre trois actions possibles :
UPMC – Licence
31
2016–2017
2V315
TD 7
— avancer tout droit (’a’) et gagner 10 points
— utiliser son propulseur pour sauter (’o’), et tenter de gagner 70 points, ou risquer de
perdre 70 points, avec une probabilité égale (50/50)
— réparer sa voiture (’r’), sans gagner ni perdre de points
La voiture se dégrade un peu plus à chaque coup et la probabilité qu’elle tombe en panne
augmente de 0.1. La probabilité retombe à zéro quand elle est réparée. Si la voiture tombe en
panne, la partie est terminée.
UPMC – Licence
32
2016–2017
Annexes
Utilisation de l’éditeur de texte gedit
1. Contrairement aux logiciels de traitement de texte les éditeurs de texte ne permettent
aucun « formatage » tel que gras, italique, « taille des caractères », etc.
2. Un éditeur de texte ne traite et ne sauve que des caractères ASCII (cf. cours) et le code
ASCII ne permet pas de représenter les attributs des caractères.
3. La barre d’état (en bas de la fenêtre) indique la nature du fichier texte (texte brut, fichier
source écrit dans un langage de programmation), la largeur des tabulations (8 par défaut)
et la position du curseur (ligne et colonne). Si elle n’est pas affichée, la faire apparaître
(menu Affichage).
4. La barre d’outil permet d’effectuer des actions courantes en cliquant sur des icônes (création, ouverture, sauvegarde de fichiers, annulation de frappe, « copier », « coller », « rechercher », « rechercher et remplacer ». Si elle n’est pas affichée, la faire apparaître (menu
Affichage).
5. Dans le menu Edition/Préférences/Affichage modifier les paramètres suivants (et les
sauver) pour faciliter l’écriture en langage de programmation :
— Désactiver le retour à la ligne
— Activer l’affichage des numéros de lignes
UPMC – Licence
33
6. Lorsque vous enregistrez (ou ouvrez) un fichier avec une extension associée à un langage
de programmation (.py, .c, .java), gedit reconnait applique la coloration syntaxique
associée au langage
UPMC – Licence
34
Ordinogrammes et code Python
N.B. Dans ce qui suit, le terme « instr. » représente une instruction, ou plusieurs instructions
en séquence, ou un bloc (sélection, répétition).
Structure générale d’un programme
Début
Déclarer
identifiant : type
...
# -*- coding: utf-8 -*...
instr.
...
instr.
Fin
Affichage
Afficher identifiant
print identifiant
print "texte", identifiant
Afficher « texte » identifiant
Affectation
identifiant ← expression
identifiant = expression
Afficher question
identifiant = raw_input(question)
identifiant ← [CLAVIER]
Sélection 1
instructions...
Vrai
condition ?
Faux
instructions...
if condition :
instr. si Vrai
instructions...
instr. si Vrai
instructions...
UPMC – Licence
35
Sélection 2
instructions...
Vrai
condition ?
instr. si Vrai
instructions...
if condition :
instr. si Vrai
else :
instr. si Faux
instructions...
Faux
instr. si Faux
instructions...
Répétition
instructions...
Vrai
condition ?
Faux
instructions...
while condition :
instr. tant que Vrai
instructions...
instr. tant que Vrai
instructions...
Itération
instructions...
Vrai
pour elt
dans liste
Faux
instructions...
for elt in liste :
instr. avec elt
instructions...
instr. avec elt
instructions...
UPMC – Licence
36
Utilisation de sakai
sakai est la plateforme d’enseignement de l’UPMC. En vous connectant, après vous être
identifié, vous verrez apparaître sous forme d’onglets l’ensemble des cours auxquels vous êtes
inscrit, en tant qu’enseignant ou en tant qu’étudiant.
L’onglet 2V315 vous permet d’accéder à votre répertoire dédié. Vous pourrez y enregistrer les
programmes créés en séance de TD et les recupérer depuis l’extérieur.
Pour accéder au portail sakai, lancer un navigateur web et taper l’URL suivante :
http://australe.upmc.fr/portal
1. Se Connecter avec votre identifiant et mot de passe utilisés pour le service courriel de
l’UPMC.
2. Sélectionner l’onglet Mon espace de travail (à gauche), puis l’option Ressources sur
la barre de menu à gauche.
UPMC – Licence
37
3. Cliquer sur bouton Ajouter à côté du répertoire My Workspace, puis sélectionner
Déposer fichier(s).
4. Choisir le fichier à déposer sur sakai (possibilité d’en déposer plusieurs en cliquant sur
Ajouter un autre fichier).
5. Pour télécharger le(s) fichier(s), cliquer sur Déposer les fichiers.
UPMC – Licence
38
Téléchargement