DESKTOP Listes (2) et chaînes de caractères TP8
Exercice 1 BPCRST
Récupérez sur cahier de prépa la liste des nombres de cas quotidiens de covid-19 déclarés en France depuis le début de la pandémie (fichier “données-TP8.py”).
Q1 Tracer le graphe du nombre de cas en fonction du temps.
Le graphe précédent présente de nombreux “pics” liés aux weekends, pendant lesquels les données sont moins remontées. Pour lisser ces irrégularités, on représente souvent lamoyennedu nombre de cas sur une semaine glissante.
Q2 Créer une liste cas_moycontenant les nombres moyens de cas remontés entre J et J-7.
Q3 Afficher sur un même graphique le nombre de cas et la moyenne du nombre de cas en fonction du temps.
Dans un article de presse (suivre ce lien), des journalistes souhaitent comparer la vague de l’automne 2020 à celle de l’automne 2021. Ils souhaitent pour cela représenter sur le même graphique l’évolution du nombre de cas depuis le début de chaque vague et obtiennent le graphique suivant :
On souhaite reproduire ce graphique avec nos données,on utilisera la listecas_moydu nombre moyen de cas (à la place du taux d’incidence utilisé dans l’article).
On donne les repères chronologiques suivants dans la liste de cas fournie :
— l’automne 2020 se situe approximativement entre les indices 200 et 300,
— l’automne 2021 se situe approximativement entre les indices 550 et 650.
Q4 Définir les listes cas_moy_2020 et cas_moy_2021 contenant le nombres de cas moyens sur chaque automne.
Pour pouvoir comparer correctement les deux automnes, il faut choisir les jours “J zéro” de début de chaque vague. Voici l’extrait de l’article de presse expliquant la méthodologie des journalistes :
Pour définir les dates des deux vagues et le “J zéro” indiqué dans les graphiques, nous avons analysé le taux de croissance de l’incidence entre un jour J et un jour J-7. Le taux de crois- sance correspond à la vitesse d’augmentation de la courbea. S’il est de 100%, l’indicateur double ; s’il est à 0%, il stagne, et s’il est négatif, l’indicateur diminue. Nous avons défini le “J zéro” de nos graphiques au moment où le taux de croissance de l’incidence dépassait les 40%b : c’est le moment où la courbe commence à augmenter davantage, correspondant ainsi à l’idée d’une vague épidémique.
a. (vous remarquerez que ce vocabulaire n’est pas satisfaisant : c’est le nombre de cas qui augmente, pas la courbe...)
b. l’article choisissait initialement un seuil de 50%. Nous ajustons ce taux à 40% pour notre jeu de données.
Q5 Écrire une fonction Jzero prenant en argument une liste et renvoyant l’indice “J zéro” défini par les journalistes.
Q6 Déterminer les indicesJ0_2020etJ0_2021de début des deux vagues automnales. Représenter ensuite comme dans l’article les deux vagues sur le même graphique depuis le jour “J-20”.
Exercice 2 Chaînes de caractères
Les chaînes de caractères peuvent être considérées comme des listes (de caractères) un peu particulières.
Pour stocker une chaîne de caractère dans une variable, on utilise la syntaxe suivante : 1 c = "Bonne année 2022 !"
LIGHTBULB Remarque
Il est possible de remplacer les guillemets (") par des apostrophes (’) !
Certaines opérations que l’on a effectuées sur les listes sont aussi applicables aux chaînes de caractères.
Q1 Dans la console, déclarez la variable c précédente. Combien de caractères contient cette chaîne de caractères ?
Q2 Comment accéder au 6ème caractère de la chaîne c? Quel est ce caractère ?
Q3 Proposer une commande permettant d’obtenir la partie suivante de la chaîne : "année 2022".
Q4 Pour prendre un peu d’avance, on souhaite modifier la chaîne de caractèrescet modifier un seul caractère de manière à afficher "Bonne année 2023 !". En vous appuyant sur vos connaissances des listes, proposer une commande et la tester. Que constatez-vous ? Quel comportement particulier des chaînes de caractères met-on en évidence ici ?
Il est aussi possible d’effectuer des opérations de concaténation (+) ou de duplication (*) avec des chaînes de caractères.
Q5 Définissez les variablesa = "you" etb = "pi". Que renvoiea + b? Que renvoie 4*a? Considérons les deux variables suivantes :
1 annee = 2022
2 message = "tout ira mieux"
Q6 Que se passe-t-il lorsqu’on utilise la commandeannee + message? Proposer une modification afin d’afficher le message suivant : "2022, tout ira mieux !".
Q7 Afin de signifier notre enthousiasme, proposer une commande permettant d’obtenir le message :
"2022, tout ira mieux ! 2022, tout ira mieux ! 2022, tout ira mieux !".
Exercice 3 Des fréquences et des lettres
On propose dans cet exercice d’étudier la fréquence d’apparition d’une lettre dans un texte1. Voici le texte à analyser :
"
Là où nous vivions jadis, il n’y avait ni autos, ni taxis, ni autobus : nous allionsparfois, mon cousin m’accompagnait, voir Linda qui habitait dans un canton voisin.
Mais, n’ayant pas d’autos, il nous fallait courir tout au long du parcours ; sinon nous arrivions trop tard : Linda avait disparu. Un jour vint pourtant où Linda partit pour toujours. Nous aurions dû la bannir à jamais ; mais voilà, nous l’aimions. Nous aimions tant son parfum, son air rayonnant, son blouson, son pantalon brun trop long ; nous aimions tout. Mais voilà tout finit : trois ans plus tard, Linda mourut ; nous l’avions appris par hasard, un soir, au cours d’un lunch.
"
La Disparition,Georges Perec, 1969
LIGHTBULB Remarque
Le fichier comportant ce texte est disponible dans l’onglet Informatique de cahier de prépa.
Q1 Écrire une fonction compter prenant en argument une chaîne de caractères et un caractère et renvoyant le nombre d’apparitions du caractère dans cette chaîne.
Par exemple compter("banane","a") doit renvoyer 2.
Q2 Écrire une fonction frequence prenant en argument une chaîne de caractères et un caractère et renvoyant la fréquence d’apparition du caractère dans cette chaîne.
Par exemple frequence("banane","a")doit renvoyer 26 soit.33333.
Q3 Voici ci-dessous le tableau des fréquences d’apparition des 26 lettres de l’alphabet dans la langue française. Quelles sont les 3 lettres les plus utilisées en Français ? Quelles sont les fréquences d’appa- rition de ces lettres dans le texte proposé ?
Figure 1– Fréquences d’apparition des lettres dans la langue française
1. L’analyse des fréquences d’apparition d’une lettre se révèle intéressante pour déchiffrer des chiffrages simples tels que le chiffrage par substitution. Plus d’informations ici : https://media.eduscol.education.fr/ftp_
eduscol/2019/Ressources/Mathematiques/RA19_Lycee_G_1_MATH_Algorithmique_et_Programmation_
activite_5.html
Exercice 4 Il y a 10 types d’élèves : les fans d’info et les autres.
Dans la vie courante, on manipule les entiers écritsen base dix, c’est-à-dire en utilisant dix chiffres : 0, 1, ..., 9. Un ordinateur, lui, manipule les entiers en base deux, c’est-à-dire en utilisant seulement deux chiffres : 0 et 1.
Voici comment doit se comprendre l’écriture d’un nombre en base deux :
— Le chiffre le plus à droite a un poids de un. Cela signifie que si ce chiffre est un 1, alors on comptea0 = 1 (et si c’est un 0, alors on comptea0= 0).
— Le deuxième chiffre le plus à droite a un poids de deux. Cela signifie que si ce chiffre est un 1, alors on comptea1 = 2 (et si c’est un 0, alors on comptea1= 0).
— Le troisième chiffre le plus à droite a un poids de quatre. Cela signifie que si ce chiffre est un 1, alors on compte a2 = 4 (et si c’est un 0, alors on comptea2= 0).
— De manière générale, lek-ème chiffre le plus à droite (compté à partir de k= 0) a un poids de 2k : on compte ak= 2k si ce chiffre est un 1, etak= 0 sinon. En fait, si ck est le k-ème chiffre le plus à droite, alors on poseak=ck2k.
— Le nombre considéré est alors égal à la somme de tous lesak.
Par exemple, le nombre écrit en base deux : 11001 correspond en base dix à : 1×1 + 0×2 + 0×4 + 1×8 + 1×16 = 25.
Voici quelques entiers écrits en base dix et en base deux :
base dix 0 1 2 3 4 5 8 16 25
base deux 0 1 10 11 100 101 1000 10000 11001
Q1 Sans ordinateur. Quelle est l’écriture en base dix du nombre qui, en base deux, s’écrit 10101 ? Même question pour 100110.
Q2 Sans ordinateur.Considérons un nombrens’écrivant en base deux sous la formecp−1cp−2...c2c1c0 où lesck sont des 0 et des 1. Déterminer une formule donnant la valeur den en fonction desck. Dans la suite de l’exercice, l’écriture en base deux d’un nombre entier sera représentée par une chaîne de caractères dont les éléments sont des 0 et des 1. Par exemple,"101"est l’écriture en base deux de cinq.
Q3 Écrire une fonction decode prenant en argument une chaîne de caractères correspondant à l’écriture en base deux d’un entier et renvoyant l’entier correspondant.
Il est très simple de déterminer l’écriture en base deux de la somme de deux nombres donnés en base deux. Il suffit de “poser l’addition” comme on le fait en base dix, mais avec les règles suivantes :
— 0 + 0 = 0
— 0 + 1 = 1
— 1 + 0 = 1
— 1 + 1 = 0 avec une retenue pour le chiffre immédiatement à gauche.
Par exemple, pour additionner les nombres écrits en base deux 1100 et 10101, on effectue successive- ment les opérations suivantes :
— chiffre le plus à droite : 0 + 1 = 1
— 2ème chiffre en partant de la droite : 0 + 0 = 0
— 3ème chiffre en partant de la droite : 1 + 1 = 0 avec une retenue pour le 4ème chiffre
— 4ème chiffre en partant de la droite : 1 + 0 + 1 = 0 avec une retenue pour le 5ème chiffre
— 5ème chiffre en partant de la droite : 0 + 1 + 1 = 0 avec une retenue pour le 6ème chiffre
— 6ème chiffre en partant de la droite : 0 + 0 + 1 = 1
Finalement la somme des nombres écrits en base deux 1100 et 10101 s’écrit en base deux : 100001.
Et en effet, 1100, 10101 et 100001 sont respectivement les écritures en base deux des nombres qui en base dix s’écrivent : 12, 21 et 33.
Q4 Sans ordinateur.Réalisez à la main les additions de nombres écrits en base deux suivantes. Vérifiez ensuite en convertissant tous les nombres en base dix. 10 + 101 ; 1 + 11 ; 1011 + 10011.
Q5 Écrire une fonction addition prenant en argument deux chaînes de caractères correspondant à deux nombres entiers écrits en base deux, et renvoyant la chaîne de caractères correspondant à l’écriture en base deux de leur somme. Pour simplifier, on supposera dans un premier temps que les deux nombres ont le même nombre de chiffres en base deux.
Q6 Comment vérifier que votre fonction additionest correcte à l’aide de la fonction decode?