TP 3

Structures de Données



séparateur

En programmation, les données peuvent être manipulées individuellement ou en groupe. Dans le cas des groupes de données, il convient de définir une organisation de manière à pouvoir accéder facilement à chaque donnée. Nous allons voir dans ce TP l'organisation des caractères dans une structure de donnée simple, la chaîne de caractères, puis l'organisation de données dans des listes.

1. LES CHAINES DE CARACTERES

Les chaînes de caractères font partie d'une catégorie d'objets en Python que l'on appelle les séquences. Une chaîne de caractères est une suite ordonnée de caractères traduit en anglais par string. La fonction intégrée len() renvoie le nombre de caractères présents dans la chaîne de caractères.

A la différence des données numériques qui sont des entités singulières, la chaîne de caractère est un type de donnée composite constituée d'un ensemble d'entités plus petites : les caractères. La chaîne de caractères peut être traitée comme une suite ordonnée d'éléments auxquels on peut accéder à titre individuel. Les caractères de la chaîne sont rendus accessibles par l'intermédiaire de leur index, c'est à dire d'un nombre qui indique l'emplacement du caractère dans la chaîne à partir de zéro.

séparateur type 2

EXERCICE 1 : Parcours de chaîne de caractères

1. Tapez dans l'éditeur de fichiers d'IDLE le code suivant :

ch=input("saisir une chaine de caracteres : ")
i=0
while i < len(ch):
.....print(ch[i])
.....i=i+1

Exécutez-le. Que se passe-t-il ?

2. Modifier le script pour qu'il affiche la chaîne de caractère saisie mais privée de tous ses caractères "espace".

Un exemple d'exécution :

saisir une chaine de caracteres : L'informatique c'est fantastique !
L'informatiquec'estfantastique!

3. Modifier le script précédent pour qu'il supprime de la chaîne tous les caractères d'index pair.

Un exemple d'exécution :

saisir une chaine de caracteres : L'informatique c'est fantastique !
'nomtqecetfnatqe!

4. Et enfin qu'il affiche le résultat à l'envers !

Un exemple d'exécution :

saisir une chaine de caracteres : L'informatique c'est fantastique !
!eqtanfteceqtmon'

séparateur type 2

EXERCICE 2 : Valeur unicode

Unicode est une norme informatique qui vise à donner à tout caractère de n'importe quel système d’écriture de langue un identifiant numérique unique quelle que soit la plate-forme informatique ou le logiciel.

1. Tester dans un terminal python, à l'aide des instructions suivantes, la fonction ord() et déterminer son rôle.

>>> ord('a')
>>> ord('b')
>>> ord('A')
>>> ord('B')
>>> ord('@')

2. Tester de la même manière la fonction chr() et déterminer son rôle.

>>> chr(65)
>>> chr(66)
>>> chr(97)
>>> chr(98)
>>> chr(64)

3. Déterminer l'intervalle des valeurs unicodes des lettres minuscules, majuscules et des chiffres.

4. Écrire un script qui affiche l’alphabet grec en majuscules et minuscules sachant que les valeurs unicodes sont comprises entre 913 et 969.

molécule de lysine
La molécule de lysine C6H14N2O2
image réalisée avec MolView
et modifiée avec The Gimp
association parallèle et série
Association parallèle et série de résistances
schéma réalisé avec Inkscape
séparateur

2. LES LISTES

Les listes font aussi partie de la catégorie d'objets appelée séquences : il s'agit de collections ordonnées d'objets séparés par des virgules. On les déclare à l'aide des crochets [ ].

La fonction intégrée len() que nous avons déjà rencontrée à propos des chaînes de caractères s'applique aussi aux listes.

Comme pour les caractères dans une chaîne, les objets placés dans une liste sont rendus accessibles par l'intermédiaire de leur index. De plus, la technique du slicing permet de dégager des sous-listes en précisant deux index correspondants aux bornes de la plage.

séparateur type 2

EXERCICE 3 : Découverte des listes

1. Testez les exemples suivant et commentez les résultats obtenus :

>>> periode2=["Lithium","Beryllium","Bore","Carbone","Azote","Oxygene","Fluor","Neon"]
>>> periode2[0]
>>> periode2[-1]
>>> periode2[0:2]
>>> periode2[1:]
>>> len(periode2)

2. On peut déterminer facilement si un élément est présent dans une liste à l'aide de l'instruction in. Testez et commentez les exemples suivants :

>>> print("Hydrogene" in periode2)
>>> print("Carbone" in periode2)
>>> for element in periode2 :
... print(element)
...

3. À la différence de ce qui se passe pour les chaînes de caractères, il est possible de changer les éléments individuels d'une liste. Testez et commentez l'exemple suivant :

>>> periode2[7]="Néon"
>>> print(periode2)

4. On peut appliquer aux listes l'opérateur "+" pour la concaténation. Testez et commentez l'exemple suivant :

>>> periode1=["Hydrogene","Helium"]
>>> periode2=["Lithium","Beryllium","Bore","Carbone","Azote","Oxygene","Fluor","Neon"]
>>> print(periode1+periode2)

5. On peut aussi appliquer l'opérateur * pour la multiplication. Testez et commentez l'exemple suivant :

>>> triple=periode1*3
>>> print(triple)
>>> print(id(triple[0]))
>>> print(id(triple[2]))
>>> triple[0]="Hydrogène"
>>> print(triple)
>>> print(id(triple[0]))
>>> print(id(triple[2]))

séparateur type 2

EXERCICE 4 : Création et ajout d'un élément à une liste

1. Écrire un script qui génère puis affiche une liste de symboles d’éléments donnés en entrée par l’utilisateur, la saisie s’arrête pour la valeur vide "".

Un exemple d'exécution :

Entrez le symbole d'un element : H
Entrez le symbole d'un element : He
Entrez le symbole d'un element :
['H', 'He']

2. Modifier le script pour qu’il affiche le nombre d’éléments et leurs symboles en parcourant la liste.

Un exemple d'exécution :

Entrez le symbole d'un element : H
Entrez le symbole d'un element : He
Entrez le symbole d'un element : Li
Entrez le symbole d'un element : Be
Entrez le symbole d'un element : B
Entrez le symbole d'un element :
Vous avez saisi 5 elements
dont voici la liste : H,He,Li,Be,B

séparateur type 2

EXERCICE 5 : Maximum d'une liste

1. Écrire un script qui affiche, sans utiliser la fonction max() de python, la valeur du plus grand élément de la liste prédéfinie L=[3.14,100,exp(7.3),1/log10(1.0017),2.5**8,1492].

Aide : les fonctions exponentielle et logarithme décimal peuvent être importés de la bibliothèque math à l'aide de la ligne suivante

from math import exp,log10

2. Modifier le script précédent pour qu’il affiche en plus la valeur du deuxième plus grand élément de la liste.

3. Modifier le script précédent pour qu’il affiche également les indices de ces deux nombres.

séparateur type 2

EXERCICE 6 : Listes de nombres (1)

dosage de l'acide méthanoïque
Dosage de l'acide méthanoïque
courbe réalisée à l'aide des bibliothèques
numpy et matplotlib
séparateur type 2

EXERCICE 7: Listes de nombres (2)

dosage de l'acide méthanoïque
Simulation d'une résonance dans un circuit RLC
schéma et simulation réalisés avec Qucs-Spice
séparateur type 2

EXERCICE 8 : Configuration électronique d'un atome de numéro atomique inférieur ou égal à 18

En physique comme en chimie, la configuration électronique, également appelée structure électronique ou formule électronique, décrit la distribution des électrons d'un atome. L'état quantique d'un électron est entièrement décrit par quatre nombre quantiques :

Une couche électronique n peut contenir au plus 2n2 électrons, tandis qu'une sous-couche l peut contenir au plus 2(2l + 1) électrons, répartis entre les différentes orbitales atomiques qui chacune ne peut contenir que 2 électrons.

1. Créer un script qui affiche la configuration électronique limitée aux couches électroniques K, L, M, des 18 premiers éléments de la classification périodique allant de l'Hydrogène (Z=1) à l'Argon (Z=18).

Un exemple d'exécution :

(K)1
(K)2
(K)2(L)1
(K)2(L)2
(K)2(L)3
(K)2(L)4
(K)2(L)5
(K)2(L)6
(K)2(L)7
(K)2(L)8
(K)2(L)8(M)1
(K)2(L)8(M)2
(K)2(L)8(M)3
(K)2(L)8(M)4
(K)2(L)8(M)5
(K)2(L)8(M)6
(K)2(L)8(M)7
(K)2(L)8(M)8

2. On peut utiliser des listes de listes (appelée aussi tableaux) pour stocker le nom des sous-couches ainsi que le nombre d'électrons dans chacune de ces sous-couches comme par exemple :

couches=[["1s"],["2s","2p"],["3s","3p","3d"]]
L=[[0],[0,0],[0,0,0]]

L'accès à un élément d'un tableau à deux dimensions s'effectue grâce à deux indices, le premier désignant le numéro de ligne et le second le numéro de colonne. Par exemple, ici :

>>> couches=[["1s"],["2s","2p"],["3s","3p","3d"]]
>>> couches[2][0]
'3s'

Créer un nouveau script qui affiche cette fois-ci la distribution des électrons dans les différentes sous-couches électroniques pour ces 18 premiers éléments.

Un exemple d'exécution :

Z=1 : 1s1
Z=2 : 1s2
Z=3 : 1s2 2s1
Z=4 : 1s2 2s2
Z=5 : 1s2 2s2 2p1
Z=6 : 1s2 2s2 2p2
Z=7 : 1s2 2s2 2p3
Z=8 : 1s2 2s2 2p4
Z=9 : 1s2 2s2 2p5
Z=10 : 1s2 2s2 2p6
Z=11 : 1s2 2s2 2p6 3s1
Z=12 : 1s2 2s2 2p6 3s2
Z=13 : 1s2 2s2 2p6 3s2 3p1
Z=14 : 1s2 2s2 2p6 3s2 3p2
Z=15 : 1s2 2s2 2p6 3s2 3p3
Z=16 : 1s2 2s2 2p6 3s2 3p4
Z=17 : 1s2 2s2 2p6 3s2 3p5
Z=18 : 1s2 2s2 2p6 3s2 3p6

3. Modifier votre script pour stocker ce résultat dans une liste pour laquelle l'indice de l'élément vaut Z et le premier élément vaut "".

Un exemple d'exécution :

['', '1s1 ', '1s2 ', '1s2 2s1 ', '1s2 2s2 ', '1s2 2s2 2p1 ', '1s2 2s2 2p2 ', '1s2 2s2 2p3 ', '1s2 2s2 2p4 ', '1s2 2s2 2p5 ', '1s2 2s2 2p6 ', '1s2 2s2 2p6 3s1 ', '1s2 2s2 2p6 3s2 ', '1s2 2s2 2p6 3s2 3p1 ', '1s2 2s2 2p6 3s2 3p2 ', '1s2 2s2 2p6 3s2 3p3 ', '1s2 2s2 2p6 3s2 3p4 ', '1s2 2s2 2p6 3s2 3p5 ', '1s2 2s2 2p6 3s2 3p6 ']

4. Modifier votre script pour que l'utilisateur puisse saisir le numéro atomique de l'élément et que le programme lui affiche sa configuration électronique.

Un exemple d'exécution :

Entrez le numero atomique de l'element : 12
La configuration electronique de l'element de numero atomique 12 est : 1s2 2s2 2p6 3s2

5. Modifier votre script pour que l'utilisateur puisse saisir le numéro atomique de l'élément et que le programme lui affiche le symbole de cet élément et sa configuration électronique.

Un exemple d'exécution :

Entrez le numero atomique de l'element : 15
La configuration electronique de l'element P de numero atomique 15 est : 1s2 2s2 2p6 3s2 3p3

séparateur type 2

EXERCICE 9 : Règle de Klechkowski *

La distribution des électrons selon les différentes sous-couches électroniques à l'état fondamental privilégie l'occupation des orbitales atomiques de plus faible énergie. L'énergie d'un électron sur une orbitale croît avec la somme n + l et, en cas d'égalité de cette somme entre couples différents, elle croît avec n : c'est la règle de Klechkowski.

Les sous-couches électroniques au-delà de 5f, 6d et 7p n'étant pas occupées par les électrons pour les atomes connus dans leur état fondamental, on peut se limiter à la liste de sous-couches ainsi qu'à la liste d'occupation de ces sous-couches suivantes :

couches=["",["1s"],["2s","2p"],["3s","3p","3d"],["4s","4p","4d","4f"],["5s","5p","5d","5f"],["6s","6p","6d"],["7s","7p"]]
L=["",[0],[0,0],[0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0],[0,0]]

1. Créer un script qui affiche la liste des couples (n,l) jusqu'au couple (7,1).

Un exemple d'exécution :

[(1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2), (4, 0), (4, 1), (4, 2), (4, 3), (5, 0), (5, 1), (5, 2), (5, 3), (5, 4), (6, 0), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (7, 0), (7, 1)]

2. Modifier votre script pour qu'il trie ces couples par énergie des électrons croissante selon la règle de Klechkowski.

Un exemple d'exécution :

[(1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (4, 0), (3, 2), (4, 1), (5, 0), (4, 2), (5, 1), (6, 0), (4, 3), (5, 2), (6, 1), (7, 0), (5, 3), (6, 2), (7, 1), (5, 4), (6, 3), (6, 4), (6, 5)]

3. Modifier votre script pour qu'il demande à l'utilisateur un numéro atomique inférieur ou égal à 118 et qu'il affiche la liste L complétée en respectant la règle de Klechkowski.

Un exemple d'exécution :

Entrez le numéro atomique de l'element : 3
['', [2], [1, 0], [0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0], [0, 0]]

Un autre exemple d'exécution :

Entrez le numéro atomique de l'element : 19
['', [2], [2, 6], [2, 6, 0], [1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0], [0, 0]]

Un exemple d'exécution pour le dernier élément :

Entrez le numéro atomique de l'element : 118
['', [2], [2, 6], [2, 6, 10], [2, 6, 10, 14], [2, 6, 10, 14], [2, 6, 10], [2, 6]

4. Modifier ce script pour qu'il affiche la configuration électronique correspondante.

Un exemple d'exécution :

Entrez le numéro atomique de l'element : 28
La configuration electronique de l'element de numero atomique 28 est :
1s2 2s2 2p6 3s2 3p6 3d8 4s2

Un autre exemple d'exécution :

Entrez le numéro atomique de l'element : 100
La configuration electronique de l'element de numero atomique 100 est :
1s2 2s2 2p6 3s2 3p6 3d10 4s2 4p6 4d10 4f14 5s2 5p6 5d10 5f12 6s2 6p6 7s2