Académique Documents
Professionnel Documents
Culture Documents
Durée du TP
Ce TP d’introduction va durer 2 séances d’une heure chacune.
Séance 1 – Activité 1 à 13
Séance 2 – Activité 14 à 21.
Objectifs du TP
• se familiariser avec les processus itératif simples, à savoir deux types de structures de boucles : for et while ;
• comprendre comment et quand les employer.
Pour ce faire, nous allons tout d’abord introduire (ou rappeler) un conteneur indexable très important : les listes.
Activité 1
• Tester rapidement les commandes ci-dessus en les tapant dans la console (shell), en vérifiant que tout fonc-
tionne comme prévu et que vous comprenez chacune des fonctions de base.
1/8
Informatique du Tronc Commun TP no 1
2) Les listes
Une liste (ou list en anglais) est une suite de symboles délimités par les caractères ouvrant [ et fermant ]. Chaque
symbole étant séparé par des virgules.
Le « kit de survie » des opérations de bases pour manipuler des listes est :
Activité 2
• Tester rapidement les commandes ci-dessus en les tapant dans la console (shell), en vérifiant que tout fonc-
tionne comme prévu et que vous comprenez chacune des fonctions de base.
3) Comparaison
On observe de nombreuses différences entre les deux types de conteneurs liste et chaîne de caractères.
Activité 3
• Construire la chaîne de caractères contenant les symboles [1,2],toto et demander le type des 5 premiers
caractères. A contrario, construire la liste contenant la liste [1,2] comme première valeur, et la chaîne de
caractère toto comme deuxième valeur. Quel est le type du premier élément de cette liste ?
• Affecter la chaîne de caractère Dalut à une variable A. On réalise qu’on a fait une coquille : en fait on voulait
rentrer la chaîne de caractères Salut. Pour ce faire, on va modifier la première lettre par A[0]="S". Tester. A
contrario, on va saisir les chaînes de caractères D, a, l, u, t dans une liste que l’on va affecter à la variable A.
On réalise qu’on a fait une coquille (mince !) : en fait on voulait rentrer les chaînes de caractères S, a, l,u, t.
Pour ce faire, on va modifier la première lettre par A[0]="S". Tester.
2/8
Informatique du Tronc Commun TP no 1
Modification de l’itérateur
De manière très générale, et indépendamment du langage Python, il est fortement déconseillé de modifier, à l’inté-
rieur de la boucle, la variable de l’itération et/ou le conteneur que la variable parcourt durant l’itération.
Activité 4
• Affecter la chaîne de caractères "Bonjour" à une variable. À l’aide d’une boucle for, ajouter un espace entre
chaque lettre du mot ;
• Construire une fonction mytype prenant en argument une liste L et renvoyant la liste des types de chacun des
éléments de L. Tester.
2) L’itérateur range
Dans l’activité précédente, nous avons construit des itérations à l’aide des deux types de conteneurs itérables que nous
connaissons : les chaînes de caractères et les listes. Il est parfois plus pratique de travailler avec un paramètre d’itération
qui est un entier et qui varie tout simplement entre deux valeurs entières.
Pour ce faire, Python possède l’itérateur range.
L’itérateur range
L’itérateur range(<n>), où <n> désigne la valeur d’un entier, retourne un itérateur sur les n premiers entiers positifs,
à savoir 0, . . . , n − 1. Il existe quelques variantes dont les plus utiles sont :
• range(debut,fin) retourne un itérateur sur les entiers supérieurs ou égaux à debut et inférieurs strictement
à fin ;
• range(debut,fin,pas) retourne un itérateur permettant de travailler sur les entiers supérieurs ou égaux à
debut et strictement inférieurs à n de pas en pas, avec pas un entier. Autrement
dit, mathématiquement : tous
f in − debut
les entiers de la forme debut + i · pas pour i variant de 0 à E (E(·) désignant la fonction partie
pas
entière).
3/8
Informatique du Tronc Commun TP no 1
Activité 5
• Calculer la somme A des 1/k pour les k premiers entiers inférieurs ou égale à 100 ;
• Calculer la somme B des 1/k pour les k premiers entiers pairs inférieurs ou égale à 100 (sans utiliser de test
if) ;
• Calculer la somme C des 1/k pour les k premiers entiers impairs inférieurs ou égale à 100 (sans utiliser de
test if) ;
• Vérifier si A = B + C.
Activité 6
• Calculer le produit des 10 premiers entiers strictement positifs.
Activité 7
• Écrire une fonction harmonique prenant un entier strictement positif n en argument et calculant la somme :
n
X 1
k
k=1
En évaluant cette fonction pour de grandes valeurs de n, quelle est votre hypothèse quant à la convergence ou
à la divergence de cette suite ?
Activité 8
• Écrire une fonction mymax prenant une liste en argument et renvoyant le maximum des éléments de cette liste ;
• Tester cette fonction sur des listes comportant des nombres entiers ou flottants ;
• Tester cette fonction sur une liste de chaînes de caractères ;
• Qu’observez-vous ? Que pouvez-vous en conclure ?
Activité 9
• Afficher la liste des carrés des entiers pairs entre 1 et 100 inclus, générée par compréhension.
4/8
Informatique du Tronc Commun TP no 1
Activité 10
• Écrire une fonction mydiviseur d’argument un entier n et renvoyant une liste contenant tous les diviseurs de
cet entier. Tester.
Activité 11
• Visualiser dans une liste les 100 premières valeurs de la série harmonique déjà étudiée précédemment Sn =
n
X 1 exp(Sn )
. Afin de confirmer l’heuristique de l’activité 7, affichez la liste des 1 000 premières valeurs de .
k n
k=1
Qu’observez-vous ?
Activité 12
Suite de Fibonacci
• Écrire une fonction myfibonacci prenant en argument un entier n et calculant le n-ième terme de la suite de
Fibonacci définie par :
Fn+2 = Fn+1 + Fn
F1 = 1 et F0 = 0
Afficher les n premières valeurs de la suite dans une liste. Analyser la divergence en considérant cette fois-ci
ln(Fn )
. Quelle est votre heuristique ?
n
Activité 13
Calcul de moyenne/écart type d’un échantillon du générateur aléatoire de Python
• Générer, par compréhension, une liste de 1 000 entiers aléatoires compris entre 1 et 100. Pour cela, on chargera
le module random et on utilisera la fonction randint(1,100) ;
• Calculer la moyenne et l’écart type de cette distribution. On rappelle que la moyenne d’une distribution
(xi )i=1,...,n vaut
n
1X
x= xi
n i=1
5/8
Informatique du Tronc Commun TP no 1
Activité 14
• On considère la liste liste=[12,8,5,17,14,13] et le code qui suit
1 k = liste [5]
2 j =4
3 while liste [ j ] > k :
4 j =j -1
5 print ( j )
Prévoir ce qui va s’afficher, puis le tester.
• Tester avec liste=[12,8,5,17,14,4].
Que s’affiche-t-il et pourquoi ? Modifier alors le code afin de supprimer le comportement non souhaité.
Activité 15
• Reprendre le calcul de la moyenne et de l’écart type d’un échantillon du générateur aléatoire de Python (der-
nière question de l’activité 13) et écrire les instructions permettant ces calculs à l’aide d’une boucle while.
6/8
Informatique du Tronc Commun TP no 1
Activité 16
• Écrire une fonction, qu’on appellera f permettant de déterminer (et renvoyer) le plus petit entier p tel que
Xp
k 2 ≥ n, fonction qui dépend de n ;
k=1
• La tester avec des valeurs faibles de n, puis avec n = 21334.
Ainsi, on utilisera préférentiellement une boucle for lorsque le nombre d’itérations est connu préalablement, et une
boucle while lorsque ce nombre d’itérations est inconnu.
Activité 18
• Que se passe-t-il si, dans le programme précédent, on initialise num avec la valeur nulle ?
• Deviner à quoi sert le titre de la question en lançant le programme malgré tout ;
• Que se passe-t-il si, dans le programme précédent avec num=1, la ligne num*=2 est remplacée par num/=2 ?
• Que se passe-t-il si, dans le programme précédent avec num=1, la ligne num*=2 n’est pas indentée ?
Activité 19
• Quelle est le risque du code précédent ? Le taper et vérifier. Expliquer le comportement ;
• Modifier légèrement le code afin que celui-ci soit plus lisible. Vérifier qu’il fonctionne exactement comme le
précédent.
7/8
Informatique du Tronc Commun TP no 1
1. Initialisation : r0 = a, r1 = b ;
2. Itération : rn+1 est le reste de la division euclidienne de rn−1 par rn ;
3. Terminaison : la suite des restes est strictement décroissante et positive. On s’arrête quand le reste rn+1 = 0. Dans ce
cas, le résultat est rn .
On rappelle que le reste de la division euclidienne de n par m s’obtient en Python par : n%m
Activité 20
• Écrire la fonction mypgcd prenant 2 entiers en arguments a et b, et renvoyant le pgcd ;
• Combien d’itérations y a-t-il au maximum dans cet algorithme ?
• Modifiez votre fonction mypgcd en une fonction mypgcd2 qui retourne non pas le pgcd mais le nombre d’itéra-
tions nécessaires pour le calculer ;
• Calculer le nombre d’itérations moyen pour a=100 et b variant entre 1 et 99.
4) La suite de Syracuse
La suite de Syracuse est la suite suivante : on part d’un entier strictement positif quelconque u0 ∈ N∗ , ensuite :
( un
un+1 = si un est pair
2
un+1 = 3un + 1 sinon.
La conjecture de Syracuse (1928) stipule que pour tout entier de départ u0 il existe un entier n pour lequel un = 1.
Activité 21
• Écrire une fonction mysyracuse qui prend l’entier u0 en paramètre et qui renvoie la liste de toutes les valeurs
de la suite jusqu’à la première valeur où un vaut 1, soit
[u0 , u1 , . . . , un−1 = 2, un = 1]
L’itération while que vous allez utiliser terminera donc de manière... conjecturale !
• La longueur de cette liste s’appelle la « durée de vol » en partant de l’entier u0 et le maximum de cette liste
s’appelle « l’altitude maximale ». Essayez donc de voler sur une durée supérieure à 100 itérations !
8/8