Chapitre 4. Listes 4.12.
Exercices
4.12.1 Prédire la sortie
Soit les trois lignes de code suivantes :
1 liste1 = list(range(10, 15))
2 var = 0
3 var2 = 10
Prédisez le comportement de chaque instruction ci-dessous, sans les recopier dans un script ni dans l’interpréteur
Python :
• print(liste1[2])
• print(liste1[var])
• print(liste1[var2])
• print(liste1["var"])
Lorsqu’une instruction produit une erreur, identifiez pourquoi.
4.12.2 Jours de la semaine
Constituez une liste semaine contenant les sept jours de la semaine.
1. À partir de cette liste, comment récupérez-vous seulement les cinq premiers jours de la semaine d’une part, et ceux
du week-end d’autre part ? Utilisez pour cela l’indiçage.
2. Cherchez un autre moyen pour arriver au même résultat (en utilisant un autre indiçage).
3. Trouvez deux manières pour accéder au dernier jour de la semaine.
4. Inversez les jours de la semaine en une commande.
4.12.3 Saisons
Créez quatre listes hiver, printemps, ete et automne contenant les mois correspondants à ces saisons. Créez
ensuite une liste saisons contenant les listes hiver, printemps, ete et automne. Prévoyez ce que renvoient les
instructions suivantes, puis vérifiez-le dans l’interpréteur :
1. saisons[2]
2. saisons[1][0]
3. saisons[1:2]
4. saisons[:][1]. Comment expliquez-vous ce dernier résultat ?
4.12.4 Table de multiplication par 9
Affichez la table de multiplication par 9 en une seule commande avec les instructions range() et list().
4.12.5 Nombres pairs
Répondez à la question suivante en une seule commande. Combien y a-t-il de nombres pairs dans l’intervalle [2,
10000] inclus ?
38 Cours de Python / Université Paris Cité / UFR Sciences du Vivant
Chapitre 6. Tests 6.7. Exercices
6.7.1 Jours de la semaine
Constituez une liste semaine contenant le nom des sept jours de la semaine.
En utilisant une boucle, écrivez chaque jour de la semaine ainsi que les messages suivants :
• Au travail s’il s’agit du lundi au jeudi ;
• Chouette c'est vendredi s’il s’agit du vendredi ;
• Repos ce week-end s’il s’agit du samedi ou du dimanche.
Ces messages ne sont que des suggestions, vous pouvez laisser libre cours à votre imagination.
6.7.2 Séquence complémentaire d’un brin d’ADN
La liste ci-dessous représente la séquence d’un brin d’ADN :
["A", "C", "G", "T", "T", "A", "G", "C", "T", "A", "A", "C", "G"]
Créez un script qui transforme cette séquence en sa séquence complémentaire.
Rappel : la séquence complémentaire s’obtient en remplaçant A par T, T par A, C par G et G par C.
6.7.3 Minimum d’une liste
La fonction min() de Python renvoie l’élément le plus petit d’une liste constituée de valeurs numériques ou de chaînes
de caractères. Sans utiliser cette fonction, créez un script qui détermine le plus petit élément de la liste [8, 4, 6, 1, 5].
6.7.4 Fréquence des acides aminés
La liste ci-dessous représente une séquence d’acides aminés :
["R", "A", "W", "W", "A", "W", "A", "R", "W", "W", "R", "A", "G"]
Calculez la fréquence des acides aminés alanine (A), arginine (R), tryptophane (W) et glycine (G) dans cette séquence.
6.7.5 Notes et mention d’un étudiant
Voici les notes d’un étudiant : 14, 9, 13, 15 et 12. Créez un script qui affiche la note maximum (utilisez la fonction
max()), la note minimum (utilisez la fonction min()) et qui calcule la moyenne.
Affichez la valeur de la moyenne avec deux décimales. Affichez aussi la mention obtenue sachant que la mention est
« passable » si la moyenne est entre 10 inclus et 12 exclus, « assez bien » entre 12 inclus et 14 exclus et « bien » au-delà
de 14.
6.7.6 Nombres pairs
Construisez une boucle qui parcourt les nombres de 0 à 20 et qui affiche les nombres pairs inférieurs ou égaux à 10
d’une part, et les nombres impairs strictement supérieurs à 10 d’autre part.
Pour cet exercice, vous pourrez utiliser l’opérateur modulo % qui renvoie le reste de la division entière entre deux
nombres et dont voici quelques exemples d’utilisation :
1 >>> 4 % 3
2 1
3 >>> 5 % 3
4 2
5 >>> 4 % 2
6 0
7 >>> 6 % 2
8 0
Vous remarquerez qu’un nombre est pair lorsque le reste de sa division entière par 2 est nul.
6.7.7 Conjecture de Syracuse (exercice +++)
La conjecture de Syracuse 2 est une conjecture mathématique qui reste improuvée à ce jour et qui est définie de la
manière suivante.
Soit un entier positif n. Si n est pair, alors le diviser par 2. S’il est impair, alors le multiplier par 3 et lui ajouter 1.
En répétant cette procédure, la suite de nombres atteint la valeur 1 puis se prolonge indéfiniment par une suite de trois
valeurs triviales appelée cycle trivial.
2. [Link]
54 Cours de Python / Université Paris Cité / UFR Sciences du Vivant
6.7. Exercices Chapitre 6. Tests
Jusqu’à présent, la conjecture de Syracuse, selon laquelle depuis n’importe quel entier positif la suite de Syracuse
atteint 1, n’a pas été mise en défaut.
Par exemple, les premiers éléments de la suite de Syracuse si on prend comme point de départ 10 sont : 10, 5, 16, 8,
4, 2, 1…
Créez un script qui, partant d’un entier positif n (par exemple 10 ou 20), crée une liste des nombres de la suite de
Syracuse. Avec différents points de départ (c’est-à-dire avec différentes valeurs de n), la conjecture de Syracuse est-elle
toujours vérifiée ? Quels sont les nombres qui constituent le cycle trivial ?
Conseil
1. Pour cet exercice, vous avez besoin de faire un nombre d’itérations inconnu pour que la suite de Syracuse atteigne le
chiffre 1 puis entame son cycle trivial. Vous pourrez tester votre algorithme avec un nombre arbitraire d’itérations,
typiquement 20 ou 100, suivant votre nombre n de départ.
2. Un nombre est pair lorsque le reste de sa division entière (opérateur modulo %) par 2 est nul.
6.7.8 Attribution de la structure secondaire des acides aminés d’une protéine (exercice
+++)
Dans une protéine, les différents acides aminés sont liés entre eux par une liaison peptidique. Les angles phi et psi sont
deux angles mesurés autour de cette liaison peptidique. Leurs valeurs sont utiles pour définir la conformation spatiale
(appelée « structure secondaire ») adoptée par les acides aminés.
Par exemple, les angles phi et psi d’une conformation en « hélice alpha » parfaite ont une valeur de -57 degrés et -47
degrés respectivement. Bien sûr, il est très rare que l’on trouve ces valeurs parfaites dans une protéine, et il est habituel
de tolérer une déviation de ± 30 degrés autour des valeurs idéales de ces angles.
Vous trouverez ci-dessous une liste de listes contenant les valeurs des angles phi et psi de 15 acides aminés de la
protéine 1TFE 3 :
1 [[48.6, 53.4],[-124.9, 156.7],[-66.2, -30.8], \
2 [-58.8, -43.1],[-73.9, -40.6],[-53.7, -37.5], \
3 [-80.6, -26.0],[-68.5, 135.0],[-64.9, -23.5], \
4 [-66.9, -45.5],[-69.6, -41.0],[-62.7, -37.5], \
5 [-68.2, -38.3],[-61.2, -49.1],[-59.7, -41.1]]
Pour le premier acide aminé, l’angle phi vaut 48.6 et l’angle psi 53.4. Pour le deuxième, l’angle phi vaut -124.9 et
l’angle psi 156.7, etc.
En utilisant cette liste, créez un script qui teste, pour chaque acide aminé, s’il est ou non en hélice et affiche les
valeurs des angles phi et psi et le message adapté est en hélice ou n’est pas en hélice.
Par exemple, pour les trois premiers acides aminés :
[48.6, 53.4] n'est pas en hélice
[-124.9, 156.7] n'est pas en hélice
[-66.2, -30.8] est en hélice
D’après vous, quelle est la structure secondaire majoritaire de ces 15 acides aminés ?
Remarque
Pour en savoir plus sur le monde merveilleux des protéines, n’hésitez pas à consulter la page Wikipedia sur la structure
secondaire des protéines 4 .
6.7.9 Détermination des nombres premiers inférieurs à 100 (exercice +++)
Voici un extrait de l’article sur les nombres premiers tiré de l’encyclopédie en ligne Wikipédia 5 :
3. [Link]
4. [Link]
secondaire
5. [Link]
Cours de Python / Université Paris Cité / UFR Sciences du Vivant 55
Chapitre 6. Tests 6.7. Exercices
Un nombre premier est un entier naturel qui admet exactement deux diviseurs distincts entiers et positifs (qui sont
alors 1 et lui-même). Cette définition exclut 1, qui n’a qu’un seul diviseur entier positif. Par opposition, un nombre non
nul produit de deux nombres entiers différents de 1 est dit composé. Par exemple 6 = 2 × 3 est composé, tout comme
21 = 3 × 7, mais 11 est premier car 1 et 11 sont les seuls diviseurs de 11. Les nombres 0 et 1 ne sont ni premiers ni
composés.
Déterminez tous les nombres premiers inférieurs à 100. Combien y a-t-il de nombres premiers entre 0 et 100 ? Pour
vous aider, nous vous proposons plusieurs méthodes.
Méthode 1 (peu optimale, mais assez intuitive)
Pour chaque nombre N de 2 à 100, calculez le reste de la division entière (avec l’opérateur modulo %) depuis 1 jusqu’à
lui-même. Si N est premier, il aura exactement deux nombres pour lesquels le reste de la division entière est égal à 0 (1
et lui-même). Si N n’est pas premier, il aura plus de deux nombres pour lesquels le reste de la division entière est égal à
0.
Méthode 2 (quelques petites optimisations qui font gagner du temps)
On reprend la méthode 1 avec deux petites optimisations. On sait que tout entier N supérieur à 1 est divisible par
1 et par lui-même. Ainsi, il est inutile de tester ces deux diviseurs. On propose donc de tester tous les diviseurs de 2 à
N − 1. Si on ne trouve aucun diviseur, alors N est premier. À partir du moment où on trouve un diviseur, il est inutile
de continuer à chercher d’autres diviseurs car N ne sera pas premier. On suggère ainsi de stopper la boucle (pensez à
break). Vous pourrez aussi utiliser une variable drapeau comme est_premier qui sera à True si N est premier, sinon
à False.
Méthode 3 (plus optimale et rapide, mais un peu plus compliquée)
Parcourez tous les nombres N de 2 à 100 et vérifiez si ceux-ci sont composés, c’est-à-dire s’ils sont le produit de deux
nombres premiers. Pratiquement, cela consiste à vérifier que le reste de la division entière (opérateur modulo %) entre N
et chaque nombre premier déterminé jusqu’à maintenant est nul. Le cas échéant, N n’est pas premier.
6.7.10 Recherche d’un nombre par dichotomie (exercice +++)
La recherche par dichotomie 6 est une méthode qui consiste à diviser (en général en parties égales) un problème pour
en trouver la solution. À titre d’exemple, voici une discussion entre Pierre et Patrick dans laquelle Pierre essaie de deviner
le nombre (compris entre 1 et 100 inclus) auquel Patrick a pensé :
• [Patrick] « C’est bon, j’ai pensé à un nombre entre 1 et 100. »
• [Pierre] « OK, je vais essayer de le deviner. Est-ce que ton nombre est plus petit ou plus grand que 50 ? »
• [Patrick] « Plus grand. »
• [Pierre] « Est-ce que ton nombre est plus petit, plus grand ou égal à 75 ? »
• [Patrick] « Plus grand. »
• [Pierre] « Est-ce que ton nombre est plus petit, plus grand ou égal à 87 ? »
• [Patrick] « Plus petit. »
• [Pierre] « Est-ce que ton nombre est plus petit, plus grand ou égal à 81 ? »
• [Patrick] « Plus petit. »
• [Pierre] « Est-ce que ton nombre est plus petit, plus grand ou égal à 78 ? »
• [Patrick] « Plus grand. »
• [Pierre] « Est-ce que ton nombre est plus petit, plus grand ou égal à 79 ? »
• [Patrick] « Égal. C’est le nombre auquel j’avais pensé. Bravo ! »
Pour arriver rapidement à deviner le nombre, l’astuce consiste à prendre à chaque fois la moitié de l’intervalle dans
lequel se trouve le nombre. Voici le détail des différentes étapes :
1. Le nombre se trouve entre 1 et 100, on propose 50 (100 / 2).
2. Le nombre se trouve entre 50 et 100, on propose 75 ( 50 + (100-50)/2 ).
3. Le nombre se trouve entre 75 et 100, on propose 87 ( 75 + (100-75)/2 ).
6. [Link]
56 Cours de Python / Université Paris Cité / UFR Sciences du Vivant
6.7. Exercices Chapitre 6. Tests
4. Le nombre se trouve entre 75 et 87, on propose 81 ( 75 + (87-75)/2 ).
5. Le nombre se trouve entre 75 et 81, on propose 78 ( 75 + (81-75)/2 ).
6. Le nombre se trouve entre 78 et 81, on propose 79 ( 78 + (81-78)/2 ).
Créez un script qui reproduit ce jeu de devinettes. Vous pensez à un nombre entre 1 et 100 et l’ordinateur essaie de
le deviner par dichotomie en vous posant des questions.
Votre programme utilisera la fonction input() pour interagir avec l’utilisateur. Voici un exemple de son fonctionne-
ment :
1 >>> lettre = input("Entrez une lettre : ")
2 Entrez une lettre : P
3 >>> print(lettre)
4 P
Pour vous guider, voici ce que donnerait le programme avec la conversation précédente :
Pensez à un nombre entre 1 et 100.
Est-ce votre nombre est plus grand, plus petit ou égal à 50 ? [+/-/=] +
Est-ce votre nombre est plus grand, plus petit ou égal à 75 ? [+/-/=] +
Est-ce votre nombre est plus grand, plus petit ou égal à 87 ? [+/-/=] -
Est-ce votre nombre est plus grand, plus petit ou égal à 81 ? [+/-/=] -
Est-ce votre nombre est plus grand, plus petit ou égal à 78 ? [+/-/=] +
Est-ce votre nombre est plus grand, plus petit ou égal à 79 ? [+/-/=] =
J'ai trouvé en 6 questions !
Les caractères [+/-/=] indiquent à l’utilisateur comment il doit interagir avec l’ordinateur, c’est-à-dire entrer soit le
caractère + si le nombre choisi est plus grand que le nombre proposé par l’ordinateur, soit le caractère - si le nombre
choisi est plus petit que le nombre proposé par l’ordinateur, soit le caractère = si le nombre choisi est celui proposé par
l’ordinateur (en appuyant ensuite sur la touche Entrée).
Cours de Python / Université Paris Cité / UFR Sciences du Vivant 57