rd01 les données de type construit en python : les chaînes

5
RD01 Les données de type construit en Python : Les chaînes de caractères, les tuples, les tableaux et les dictionnaires Sources : Livre "Spécialité ISN en Terminale S Gilles Dowek Eyrolles" ; python.doctor/page-apprendre-tuples-tuple-python ; openclassrooms.com ; Site David Roche pixees.fr Dans le chapitre, nous allons parler d'objet. Un objet est une structure de données, comme les variables, qui peut contenir elle-même d'autres variables et fonctions. On dit que Python est un langage orienté objet (cf. NSI Term). I- Les chaînes de caractères Une chaîne de caractères est un objet de type particulier car elle est composite : elle contient elle-même plusieurs objets que sont les caractères individuels (alphanumériques et autres). Cet objet peut être traité en totalité (toute la chaîne de caractères en entier) ou chaque "sous-objet" peut-être traitée. La position de chaque caractère dans la chaine de caractère a un indice : la 1 ère lettre a l'indice 0, la 2 ème a l'indice 1, … Exo01 : Prévoir ce que permet de faire la dernière instruction et vérifier ? >>> ma_chaine="Bonjour" >>> ma_chaine[0] Modifier l'indice 0 en le remplaçant successivement par 1, par 3, par 6, par 9, par -1 ? L'indice commence à 0 Exo02 : que permet de faire la dernière instruction ? >>> ma_chaine="Bonjour" >>> len(ma_chaine) Exo03 : faire un petit programme permettant d'afficher chaque caractère (une sur chaque ligne) d'une chaîne de caractère? Une chaîne de caractères peut être divisée, avoir sa taille modifiée (le nb de caractères est modifiée), avoir sa police modifiée (capitale, minuscule, police) mais une chaîne de caractère est IMMUABLE (immutable en anglais) (qui n'est pas modifiable) (pas d'affectation possible d'un caractère de la chaîne). Exo04 : tester les instructions suivantes et conclure >>> ma_chaine="Bonjour" >>> ma_chaine = ma_chaine+" le monde" >>> ma_chaine >>> ma_chaine[2]="k" Il est possible d'extraire un fragment de la chaîne de caractère : Exo05 : tester les instructions suivantes >>> extrait_chaine=ma_chaine[2:6] >>> extrait_chaine Vous pouvez la casse (minuscule ou majuscule) avec les méthodes upper et lower Exo06 : tester les instructions suivantes, vérifier la valeur de la chaîne de caractère après chaque instruction >>> mot = "Hello" >>> mot=mot.upper() >>> mot=mot.lower()

Upload: others

Post on 19-Jun-2022

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: RD01 Les données de type construit en Python : Les chaînes

RD01

Les données de type construit en Python :

Les chaînes de caractères, les tuples, les tableaux et les dictionnaires Sources : Livre "Spécialité ISN en Terminale S – Gilles Dowek – Eyrolles" ; python.doctor/page-apprendre-tuples-tuple-python ; openclassrooms.com ;

Site David Roche – pixees.fr

Dans le chapitre, nous allons parler d'objet. Un objet est une structure de données, comme les variables, qui

peut contenir elle-même d'autres variables et fonctions. On dit que Python est un langage orienté objet (cf.

NSI Term).

I- Les chaînes de caractères Une chaîne de caractères est un objet de type particulier car elle est composite : elle contient elle-même

plusieurs objets que sont les caractères individuels (alphanumériques et autres).

Cet objet peut être traité en totalité (toute la chaîne de caractères en entier) ou chaque "sous-objet"

peut-être traitée.

La position de chaque caractère dans la chaine de caractère a un indice : la 1ère lettre a l'indice 0, la 2ème

a l'indice 1, …

Exo01 : Prévoir ce que permet de faire la dernière instruction et vérifier ? >>> ma_chaine="Bonjour"

>>> ma_chaine[0]

Modifier l'indice 0 en le remplaçant successivement par 1, par 3, par 6, par 9, par -1 ? L'indice commence à 0

Exo02 : que permet de faire la dernière instruction ? >>> ma_chaine="Bonjour"

>>> len(ma_chaine)

Exo03 : faire un petit programme permettant d'afficher chaque caractère (une sur chaque ligne) d'une chaîne

de caractère?

Une chaîne de caractères peut être divisée, avoir sa taille modifiée (le nb de caractères est modifiée),

avoir sa police modifiée (capitale, minuscule, police) mais une chaîne de caractère est IMMUABLE

(immutable en anglais) (qui n'est pas modifiable) (pas d'affectation possible d'un caractère de la

chaîne).

Exo04 : tester les instructions suivantes et conclure >>> ma_chaine="Bonjour"

>>> ma_chaine = ma_chaine+" le monde"

>>> ma_chaine

>>> ma_chaine[2]="k"

Il est possible d'extraire un fragment de la chaîne de caractère :

Exo05 : tester les instructions suivantes >>> extrait_chaine=ma_chaine[2:6]

>>> extrait_chaine

Vous pouvez la casse (minuscule ou majuscule) avec les méthodes upper et lower

Exo06 : tester les instructions suivantes, vérifier la valeur de la chaîne de caractère après chaque instruction>>> mot = "Hello"

>>> mot=mot.upper()

>>> mot=mot.lower()

Page 2: RD01 Les données de type construit en Python : Les chaînes

Cours Lumni

bit.ly/2EtdbY2

II- les séquences en Python Une séquence permet de stocker plusieurs grandeurs dans une même structure : c'est un ensemble fini et

ordonné d'éléments indicés de 0 à n-1 (contient donc n éléments). Nous allons voir les tuples et les tableaux.

1) Les tuples (appelés aussi p-uplets) Exemple : toto=(8,2,"sable",4.5) est un tuple (les parenthèses ne sont pas obligatoires mais facilite la lisibilité du code)

Exo07 : que permettent de faire les 2 dernières instructions ? >>> toto=(8,2,"sable",4.5)

>>> len(toto)

>>> toto[2]

Saisir l'instruction permettant qu'une variable notée a référence la 1ère valeur du tuple soit l'entier 8.

Un tuple est une séquence immuable.

Exo08 : saisir l'instruction et conclure >>> toto[2]="mer"

Le tuple permet de renvoyer plusieurs valeurs dans une fonction.

Exo09 : saisir et testez le code suivant def calculs(nb):

carre=nb**2

cube=carre*nb

return (nb,carre,cube)

resultat=calculs(5)

print("{} et {} sont le carre et le cube de {}".format(resultat[1],resultat[2],

resultat[0]))

La variable resultat est un tuple car la fonction calculs renvoie un tuple.

Il est possible d'assigner chaque élément du tuple.

Exo10 : Modifier les 2 dernières lignes du code précédent par les 2 lignes suivantes a,b,c=calculs(5)

print("{} et {} sont le carre et le cube de {}".format(b,c,a))

Exo11 : Il est possible de faire des assignations multiples (saisir >>> a ; >>> b et >>> c) >>> (a,b,c)=(12,45,5.6) # les parenthèses ne sont pas nécessaires

2) Les tableaux ATTENTION : Nous emploierons le terme tableau car cette notion est connue sous ce nom dans la plupart des langages de programmation. Néanmoins, en Python, les tableaux sont appelés listes (list). La notion de tableau se nommera donc list en Python.

Un tableau est une variable mutable (mutable en

anglais) contrairement au tuple. Mais il est

possible d'avoir accès à un élément comme pour

les tuples (ou les chaînes de caractère).

Exo12 : comprendre chaque instruction >>> mon_tab=[8,2,"sable",4.5]

>>> len(mon_tab)

>>> mon_tab[3]

>>> mon_tab[2]="mer"

>>> mon_tab

Un tableau a des crochets [ ] alors qu'un tuple a des parenthèses ( ).

Il est possible d'ajouter un élément à la fin du tableau à l'aide de la méthode .append().

Exo13 : tester et vérifier après chaque instruction le contenu du tableau (>>> mon_tab) >>> mon_tab.append(15)

>>> mon_tab.append("parasol")

Une méthode est une fonction qui s'applique à un objet particulier. Sa forme est objet.methode(parametre)

Il est possible de supprimer le dernier élément du tableau à l'aide de l'instruction del[i] (supprime l'élément

de rang i ) ou la méthode .pop(i) (supprime l'élément de rang i ou le dernier si i non noté et renvoie la valeur

supprimée si elle est assignée).

Exo14 : tester et vérifier après chaque instruction le contenu du tableau mon_tab et la variable val>>> del mon_tab[0] >>> mon_tab.pop(0)

>>> val=mon_tab.pop(1)

Remarque: Mais si un tableau fait la même chose qu'un tuple (avec la possibilité d'être mutable en plus), pourquoi ne pas utiliser que des tableaux ?

Les opérations sur des tuples sont plus rapides

Il peut être intéressant de ne pas pourvoir modifier une séquence de valeur …

Page 3: RD01 Les données de type construit en Python : Les chaînes

NSI – Représentation des données RD

III- Une autre boucle : for … in

1) Définition Nous avons déjà vu une boucle (while …) : elle est non bornée (il faut donner une condition pour sortir de la boucle).

Nous allons voir une autre boucle (for … in) qui est bornée (le nombre d'itération de la boucle est connu à l'avance) :

elle permet de parcourir les éléments d'un tableau.

Exo15 : Analyser et comprendre le code suivant mon_tab=[8,2,"sable",4.5]

for element in mon_tab:

print(element)

Noter ":" et l'indentation Le terme element est arbitraire: si vous le remplacer par un autre mot, le résultat sera le même.

Il est possible d'utiliser la fonction prédéfinie range qui correspond à un tableau d'entier

Exo16 : Analyser et comprendre les 3 codes suivants mon_tab=[0,1,2,3,4]

for element in mon_tab:

print(element)

for element in range(0,5):

print(element)

for element in range(5):

print(element)

dans range(a,b) : a est la borne inférieure incluse et b la borne supérieure non incluse. Si la borne

inférieure a=0, elle peut ne pas être notée.

Exo17 : Quel est le résultat de ce programme ? (tester le contenu de mon_tab dans la console) mon_tab=[]

for i in range(3,8):

mon_tab.append(i)

Remarque: il est TOUJOURS possible de remplacer une boucle for par une boucle while (alors que le contraire n'est

pas vrai) mais c'est plus long à coder.

Exo18 : créer l'équivalent de l'exo15 mais avec une boucle while.

Exo+ : créer une fonction appelée anagramme permettant de dire si 2 chaînes de caractère sans espaces (les

paramètres) sont anagrammes l'une de l'autre. La fonction renvoie un booléen (servez vous de votre aide–

mémoire Python ….)

2) Créer un tableau par compréhension Après l'exo12 et l'exo13, nous allons voir une autre façon de "remplir" un tableau.

Exo19 : Analyser et comprendre l'instruction suivante. tab=[i for i in range(0,5)]

Il est aussi possible de rajouter une condition (if)

Exo20 : Analyser et comprendre le code suivant. val=[1,7,9,15,-4,20,-14,7]

tab=[i for i in val if i>=9]

IV- Des tableaux de … tableaux ‼ Exemple : mat=[[2,3,4],[5,7,-1],[0,45,10],[5,3,1]] est un tableau de tableaux.

Pour être plus clair, on le note aussi : mat= [[2,3,4], [5,7,-1],

[0,45,10],

[8,3,6]]

Cela ressemble à ce qu'en math, on appelle une matrice : on va pouvoir donc parler de lignes

et de colonnes.

Dans notre exemple, 2,3,4 constituent la 1ère ligne ; 5,7,-1 constituent la 2ème ligne …

2,5,0,8 constituent la 1ère colonne, 3,7,45,3 constituent la 2ème colonne, …

Pour accéder à un élément, on va utiliser l'instruction mat[ligne][colonne]

Exo21 : Prévoir le résultat (et vérifier) mat= [[2,3,4],

[5,7,-1],

[0,45,10],

[8,3,6]]

print(mat[1][2])

Quelle instruction permet d'obtenir la valeur 3 ? la valeur 10 ?

2 3 4

5 7 -1

0 45 10

8 3 6

Page 4: RD01 Les données de type construit en Python : Les chaînes

NSI – Représentation des données RD

Exo22 : Quel est le contenu des variables m et tabtab à la fin de ce programme ? m = [1, 2, 3]

tabtab = [m, m, m]

m[0] = 4

tabtab[1][1]=100

GRANDE prudence dans l'utilisation de tableau de tableaux car un tableau est mutable ….

Pour parcourir l'ensemble des éléments d'une matrice, il est nécessaire de recourir à 2 boucles for imbriquées

Exo23 : Analyser et comprendre le code suivant. mat= [[2,3,4],

[5,7,-1],

[0,45,10],

[8,3,6]]

nb_colonne = len(mat[0])

nb_ligne = len(mat)

for i in range(0, nb_ligne):

for j in range(0, nb_colonne):

a = mat[i][j]

print(a)

V- Exercices

Exo24 : Questions issues des sujets NSI 1ère (une seule réponse possible : + 3 si bonne réponse, -1 si mauvaise

réponse, 0 si pas de réponse)

1) On considère le script ci-dessous. Quelle est la valeur de t à la fin de son exécution ? t = [2, 8, 9, 2]

t[2] = t[2] + 5

A- [2, 13, 9, 2] B- [2, 8, 14, 2] C- [7, 13, 14, 7] D- [7, 13, 9, 2]

2) Quelle instruction permet d’affecter la liste [0,1,4,9,16] à la variable tableau ?

A- tableau = [ i**2 for i in range(4)] B- tableau = [ i**2 for i in range(5)]

C- tableau = [ i**2 for i in range(16)] D- tableau = [ i**2 for i in range(17)]

3) On veut affecter à t la valeur [[0,1,2], [3,4,5], [6,7,8], [9,10,11], [12,13,14]]. Pour cela on utilise le code suivant. Par quoi doit-on remplacer les pointillés …… ? n,p = (5,3)

t = [ [ …… for j in range(p) ] for i in range(n) ]

A- i*j + j B- p*i + j C- p*j + i D- i*(j+1)

4) On dispose dans le tableau annee2019 les températures mensuelles moyennes d'une région française. On exécute le script suivant. Que contient la variable m à la fin de cette exécution ? annee2019 = [('janvier',6), ('février',6), ('mars',12),('avril',20),

('mai',23), ('juin',25),('juillet',29), ('août',25), ('septembre',22),

('octobre',15), ('novembre',11), ('décembre',7)]

m = annee2019[0][1]

for mois in annee2019:

if (m > mois[1]):

m = mois[1]

A- le mois le plus froid B- le mois le plus chaud

C- la température moyenne la plus basse D- la température moyenne la plus haute

5) On définit ci-dessous une liste M. Quelle expression vaut la chaîne de caractères 'H' ? M = [['A','B','C','D'], ['E','F','G','H'], ['I','J','K','L']]

A- M[1][3] B- M[3][1] C- M(7) D- M(7)

6) On définit : L = [10,9,8,7,6,5,4,3,2,1]. Quelle est la valeur de L[L[3]] ?

A- 3 B- 4 C- 7 D- 8

Exo25 Créer une fonction nommée palindrome permettant de savoir si une chaîne de caractère est un

palindrome. La fonction a un seul paramètre (une chaîne de caractère), elle renvoie un booléen. Exemples : "bob", "un roc cornu", "Esope reste ici et se repose" ou "Laval" sont des palindromes. Aide : Dans un premier temps, ne pas saisir les espaces et écrire en minuscule…

Exo26 : Créer une fonction nommée algo_Luhn qui vérifie si un numéro de carte de crédit (ou un numéro SIRET ou SIREN ou

de carte SNCF) est valable. La fonction a un seul paramètre (un chaîne de caractère), elle renvoie un booléen. Ces numéros vérifient l'algorithme de Luhn :

En partant de la droite vers la gauche, additionner les 1er, 3ème, 5ème, … chiffres et les doubles des 2ème, 4ème, 6ème, … chiffres (si le double dépassent 9, retrancher 9 à la valeur).

Si la somme de tous les chiffres est un multiple de 10, le numéro est valable. Exemple : 0123–4567–8901–0101 vérifie l'algorithme de Luhn

Testez-vous : Les séquences (109 questions)

bit.ly/2QjXl4U

Page 5: RD01 Les données de type construit en Python : Les chaînes

NSI – Représentation des données RD

Cours Lumni

bit.ly/2EnFirM

VI- Les dictionnaires (appelés aussi p-uplets nommés)

Exemple : personnes={"nom":"Haddock", "prénom":"Archibald", "age":56} est un dictionnaire

Les dictionnaires sont des objets pouvant en contenir d'autres, à l'instar des

tableaux mais sans être ordonnés. Au lieu d'héberger des informations dans un

ordre précis, il n'y a pas d'ordre (donc pas de rang) dans un dictionnaire: il associe

une valeur à une clé (la plupart du temps, une chaîne de caractères). Chaque élément est

de la forme clé: valeur (par exemple, un dictionnaire peut contenir un carnet d'adresses et on accède à

chaque contact en précisant son nom).

Les dictionnaires sont de type mutable (il est possible de remplacer, supprimer, ajouter des valeurs dans un dictionnaire).

Il y a plusieurs façons de créer un dictionnaire

Exo27 : tester les instructions suivantes et vérifier le contenu du dictionnaire après chaque instruction>>> dico1 = {"nom":"Haddock", "prénom":"Archibald", "age":56}

>>> dico2 = {} # création d'un dictionnaire vide, identique à dico2=dict{}

>>> dico2["nom"]="Haddock"

>>> dico2["prénom"]="Archibald"

>>> dico2["age"]=56

Noter les accolades { } et les ":" séparant la clé de sa valeurGRANDE prudence dans l'utilisation de tableau de tableaux car un tableau est mutable ….

Vous venez donc de voir comment ajouter des éléments (clé:valeur) à un dictionnaire mais il est possible

aussi de modifier une valeur associé à une clé ou de supprimer une clé (et sa valeur) en utilisant la même

instruction del ou la même méthode .pop(i) que pour les tableaux.

Exo28 : tester et analyser les instructions suivantes (vérifier le contenu de fruits et/ou de val après chaque instruction)

>>> fruits = {"pomme":4, "poire":8, "pêche":6}

>>> fruits["poire"]=2

>>> fruits["pomme"]=fruits["pomme"]+4

>>> fruits["ananas"]=1

>>> del fruits["pomme"]

>>> fruits.pop("pêche")

Quand vous notez dico[clé)=valeur, si dico[clé] existe, la valeur est remplacée sinon un nouvel élément

clé:valeur est créé dans le dictionnaire dico.

Il est possible de parcourir un dictionnaire avec une boucle for :

suivant les clés avec la méthode .keys()

suivant les valeurs avec la méthode .values()

suivant les valeurs et les clés avec la méthode .items()

Exo29 : tester et analyser le code suivantfruits = {"pomme":4, "poire":8, "pêche":6}

for j in fruits.keys(): # j : nom arbitraire et .keys est optionnel

print(j)

for k in fruits.values():

print(j)

for elem in fruits.items():

print(elem, type(elem))

for m,n in fruits.items():

print("{} ({}) : {} ({})".format(m,type(m),n,type(n)))

Exo30 : écrire une fonction index permettant de donner le (ou les) nom(s) du(des) fruit(s) dont on demande

le nombre. La fonction a 2 paramètres : un dictionnaire et un entier. La fonction renvoie un tableau contenant la ou les clé(s) dont on donne la valeur. Le programme affiche le tableau des fuits et le

message "aucun fruit ne correspond" si le tableau est vide. Exemples : avec fruits = {"pomme":4, "poire":8, "pêche":6, "ananas":4}

index(fruits,12) renvoie "aucun fruit ne correspond"

index(fruits,6) renvoie [pêche] index(fruits,4) renvoie [pomme,ananas] ou [ananas,pomme]

MINI-PROJET : bit.ly/2OSAr59 merci à David Roche, professeur, lycée G Fichet à Bonneville (74)

Testez-vous : Les dictionnaires (36 questions) bit.ly/2QjXl4U