Les fondamentaux des sciences du numérique pour les chimistes
Objectifs
- Fondamentaux de la programmation en Python
- Manipulation des fichiers
- Interaction avec l'utilisateur
- Analyse des données (basique)
Exercices
- Affichage des messages, variables, type de données, liste, ensemble et tuples.
- Expressions conditionnelles, boucles for
- Tri
- Dictionnaires
- Fichiers, interaction avec l'utilisateur
Evaluation
Chaque exercice a un niveau de difficulté. Les exercices faciles et de difficulté moyenne vous aident à comprendre les fondamentaux. Il est recommandé de finir ces exercices avant de commencer les exercices difficiles. Le niveau de difficulté de l'exercice et le nombre d'étoiles associées sont montrés par la suite:
- ★: Facile
- ★★: Moyen
- ★★★: Difficile
Exercice 1.1 ★
Les exemples suivants présentent les fondamentaux de la programmation en Python.
1. Commentaires
En Python, si vous voulez écrire un commentaire, commencez votre phrase avec un dièse (#).
# Ceci est un commentaire sur une seule ligne
Si votre commentaire ne tient pas sur une seule ligne, vous pouvez écrire votre commentaire en le commencant avec trois guillemets (""") et en le finissant pareil comme indiqué ci-dessous.
"""
Ceci est un commentaire
sur plusieurs lignes
"""
Maintenant vous êtes prêts pour votre première code en Python, afin d'afficher "Bonjour" sur l'écran.
print("Bonjour")
2. Variables
Python vous permet également de stocker votre message dans une variable.
# une variable
message = "le monde!"
print(message)
L'avantage d'utiliser une variable est la possibilé d'utiliser une valeur plusieurs fois sans la réécrire.
# une variable
message = "le monde!"
print(message)
print(message)
Vous pouvez également changer la valeur d'une variable.
# une variable
message = "le monde!"
print(message)
message = "Bonjour!"
print(message)
Il est possible de stocker différents types de donnés. Prochainement, nous testerons des variables en stockant les entiers, afin de les utiliser pour un calcul mathématique.
a = 10
b = 20
c = a + b
print(c)
Le prochain code stocke un nombre réel dans une variable.
#nombres réels
pi = 3.14
print(pi)
Prochainement, nous testerons les calculs en utilisant les entiers et les nombres réels.
#nombres réels
pi = 3.14
rayon = 5
superficie = pi * rayon * rayon
print(superficie)
perimetre = 2 * pi * rayon
print(perimetre)
Testez le code au-dessus en changeant la valeur du rayon.
Parfois, il est important de tester le type d'une variable. En Python, vous pouvez utiliser une fonction intégrée, type en passant la variable comme argument. Exécutez le code suivant et notez bien les résultats pour les différentes variables.
#type de données
message1 = "Bonjour"
a = 12
pi = 3.14
print(type(message1))
print(type(a))
print(type(pi))
3. Concatenation de chaîne de caractères
Il est possible de concatener deux chaînes de caractères en utilisant l'opérateur '+'.
#concatenation de chaine de caractères
message = "le monde!"
print("Bonjour" + message)
Ci-dessous, vous voyez le code que concatene deux chaînes de caractères en utilisant l'opérateur '+' et les variables.
#concatenation de chaine de caractères
message1 = "Bonjour "
message2 = "le monde!"
print(message1 + message2)
Testez le code suivant.
#concatenation de deux différents types de données
message1 = "Bonjour en Python"
a = 3
print(message1 + a)
Quel message d'erreur s'affiche?
Il est impossible de concatener une chaîne de caractères avec un autre type de données (comme, un entier dans l'exemple au-dessus). Python nous fournit une fonction intégrée appelée (str) qui peut convertir un entier ou un nombre réel en une chaîne de caractères.
#concatenation de deux différents types de données
message1 = "Bonjour en Python "
a = 3
print(message1 + str(a))
4. Liste
Notre prochain objectif est de voir comment nous pouvons stocker une ou plusieurs valeurs du même type (ou différent type) dans une variable. Une liste nous permet de faire ça. Pour créer une liste, mettez toutes les valeurs du même type de données entre '[' ']' et en utilisant les virgules comme séparateur comme indiqué ci-dessous.
a = [10, 20, 30, 40, 50]
print(a)
L'ordre des élements dans une liste est importante. Pour accèder à un membre de la liste, nous utiliserons son index. En Python, l'index commence à 0; c'est à dire, pour accèder au premièr membre de la liste, utilisez 0 et pour le nième membre, utilisez n-1 etc.
a = [10, 20, 30, 40, 50]
print(a[0])
print(a[1])
print(a[2])
print(a[3])
print(a[4])
Tester le code suivant où l'on essaie d'accèder à un membre inexistant.
a = [10, 20, 30, 40, 50]
print(a[8])
Nous avons vu des chaînes de caractères au-dessus. Mais une chaîne de caractères est également une liste. En conséquence, vous pouvez utilisez les index pour accèder la nième caractère de la chaîne.
message1 = "Bonjour en Python "
print(message1[0])
print(message1[1])
print(message1[2])
print(message1[3])
print(message1[4])
print(message1[5])
print(message1[6])
print(message1[7])
Utilisez la fonction intégrée len afin d'obtenir la taille d'une chaîne.
message1 = "Bonjour en Python "
print(len(message1))
Vous pouvez utiliser len pour savoir le nombre de membres dans une liste.
a = [10, 20, 30, 40, 50]
print(len(a))
Pour ajouter un nouveau membre dans une liste, utilisez la méthode append. Le nouveau membre est ajouté à la fin de la liste. Testez le code et voyez le résultat.
a = [10, 20, 30, 40, 50]
a.append(60)
print(a)
Il est possible de modifier la nième valeur dans une liste. Précisez le nième membre comme indiqué ci-dessous en utilisant l'index et affectuez la nouvelle valeur.
a = [10, 20, 30, 40, 50]
a[0] = 0
print(a)
Testez le code suivant pour affectuer un index inexistante. Quelle est l'erreure que vous avez eue?
a = [10, 20, 30, 40, 50]
a[6] = 20
print(a)
Vous avez vu au-dessus la méthode append qui ajoute le nouveau membre à la fin de la liste. Pourtant avec la méthode insert, nous pouvons insérer un nouveau membre n'importe où dans la liste. Le premier argument d'insert est l'index et le deuxième est la valeur. Testez le code suivant et voyez la nouvelle liste et sa taille après l'insertion.
a = [10, 20, 30, 40, 50]
a.insert(0, 0)
print(a)
print(len(a))
Testez le code suivant avec différentes valeurs pour l'index (premier argument d'insert).
a = [10, 20, 30, 40, 50]
a.insert(6,60)
print(a)
print(len(a))
5. Tuple (une liste qui ne peut plus être modifiée.)
Une liste très intéressant en Python est un tuple. Un tuple est une liste qui ne peut plus être modifiée et est déclaré en mettant les membres entre ( et ) au lieu de symboles [ et ] respectivement.
a = (10, 20, 30, 40, 50)
print(a)
Nous pouvons accèder à n'importe quel membre d'un tuple en utilisant son index.
a = (10, 20, 30, 40, 50)
print(a[0])
Essayez de changer les valeurs d'un tuple, comme nous avons testé changer une liste au-dessus.
a = (10, 20, 30, 40, 50)
a[0] = 0
print(a)
Quel message d'erreur s'affiche?
Le tuple est très performant à comparer d'une liste. C'est pourquoi, les tuples sont très utilisés pour l'analyse de données. Vous pouvez utiliser la méthode pour convertir une liste à un tuple en utilisant la méthode tuple.
a = [10, 20, 30, 40, 50]
b = tuple(a)
print(b)
print(type(b))
6. Ensemble (set)
Si vous n'êtes pas interessé par l'ordre des membres dans une liste, mais plutôt interéssé par les membres distincts, utilisez un ensemble en Python. Voyez le code suivant où nous mettons plusieurs valeurs différentes, mais nous voyons beaucoup de répétition. Nous utilisons les symboles { et } pour créer un ensemble de valeurs. Regardez-bien l'affichage de ce code et voyez la variable a qui contient des valeurs distinctes.
a = {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}
print(a)
La méthode add est utilisée pour ajouter un nouveau membre dans l'ensemble. Ci-dessous, nous essayons d'ajouter une valeur déjà existante dans l'ensemble.
a = {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}
a.add(10)
print(a)
Ci-dessous, nous essayons d'ajouter une valeur inexistante dans l'ensemble. En effet l'ordre n'est pas important dans un ensemble, la position du nouveau membre est uncertaine.
a = {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}
a.add(60)
print(a)
Pour supprimer une valeur d'un ensemble, utilisez la méthode remove.
a = {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}
a.remove(40)
print(a)
Enfin, nous reregardons les différentes façons de stocker une collection de valeurs.
#set
a = {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}
print(a)
print(type(a))
#tuple
b = (10, 20, 30, 40, 50, 10, 20, 30, 40, 50)
print(b)
print(type(b))
#liste
c= [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
print(c)
print(type(c))
Exercice 1.2 ★
1. Expressions conditionnelles
Notre prochain objectif est de voir les expressions conditionnelles. Une expression conditionnelle peut retourner deux valeurs: True (vrai) ou False (faux) en dependant de la vérite de l'expression. Le code ci-dessous vérifie si l'entier 12 (stocker dans la variable a est divisé par 2. L'expression conditionnelle a%2 == 0 retourne True (vrai) dans cet exemple. Notez bien que nous utilisons l'operateur ==, qui est différent de =, utilisé pour l'affectation d'une variable. Testez le code suivant avec différentes valeurs pour a.
a = 12
if( a%2 == 0):
print(a, " est divisé par 2")
else:
print(a, " n'est pas divisé par 2")
Il est également possible de tester si deux chaînes de caractères seraient égales (ou contiendraient les mêmes valeurs).
lang = "Français"
if (lang =="Français"):
print("Bonjour le monde!")
else:
print("Hello World!")
2. Boucles for
Parfois, nous voulons répéter une tâche plusieurs fois. En Python, vous pouvez utilisez des boucles for pour le faire. Au-dessus, nous avons utilisé print pour afficher le contenu d'une liste ou un tuple. Si vous voulez afficher chaque membre de la liste sur une ligne, vous pouvez par exemple une boucle for comme indiqué ci-dessous.
for i in [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]:
print(i)
Rémarquez bien la variable i qui prend chaque membre de la liste. La deuxième ligne de code au-dessus affiche la valeur i sur une ligne. L'affichage s'arrete quand il n'y a plus membres à accèder dans la liste.
Prochainement, nous testerons le même code au-dessus, mais en utilisant un tuple.
for i in (10, 20, 30, 40, 50, 10, 20, 30, 40, 50):
print(i)
Prochainement, nous testerons le même code au-dessus, mais en utilisant un ensemble.
for i in {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}:
print(i)
2. Range
Vous pouvez utiliser la méthode range qui prend deux (ou trois) arguments: le numéro de départ et le dernier numéro et qui retourne une liste de nombres en ordre croissant (par défault) de numéro de départ jusqu'au avant-dernier numéro du dernier numéro.
for i in range(0,10):
print(i)
Par défault, range retourne des nombres en ordre croissant avec une différence d'un. Pourtant, il est possible de changer cette différence en passant le troisème argument, un entier. Testez le code suivant en utilisant différentes valeurs pour la différence.
for i in range(0,10,2):
print(i)
Il est possible de changer l'affichage sur chaque ligne de print, en modifiant l'argument end de print. Ci-dessous, nous demanderons print d'utiliser une espace au lieu de la nouvelle ligne. Voyez le résultat. Testez le code en utilisant différentes valeurs pour end, par exemple, une virgule.
for i in range(0,10,2):
print(i, end=' ')
Afin d'obtenir les nombres en ordre décroissant, vous pouvez un numéro de départ supérieur au dernier numéro et avec une différence négative.
for i in range(10,0,-2):
print(i)
Testez le code suivant.
for i in "Bonjour le monde!":
print(i)
Comparez la différence entre le code ci-dessous et le code au-dessus.
for i in "Bonjour le monde!".split():
print(i)
La méthode split est très utile pour extraire des mots dans un texte. split (par défault) extraire des mots d'une texte en utilisant l'espace, le caractère de tabulation ou le caractère de rétour chariot comme séparateur.
for i in "Bonjour,le,monde!".split():
print(i)
Vous pouvez changer le comportement de cette méthode en passant le caractère de séparation desirée comme un argument. Ci-dessous, nous passerons le caractère virgule.
for i in "Bonjour,le,monde!".split(","):
print(i)
Votre prochain objectif est de coder en Python un progamme pour avoir la réponse ci-dessous.
1
12
123
1234
12345
123456
1234567
12345678
Exercice 1.3 ★★
1. Tri
Lorque nous travaillons avec les chiffres, les fonctions plus démandées sont les possibilités de trier les valeurs en ordre croissant ou décroissant, obtenir les valeurs maximum et minimum dans une liste, les n prémières/dernières valeurs etc.
La méthode sort est capable de trier une liste en ordre croissant (par défault).
num = [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
num.sort()
print(num)
2. Tri en ordre décroissant
Afin de trier une liste en ordre décroissant, utilisez la méthode sort en passant la valeur pour l'argument reverse. Si reverse est égale à True, la méthode sort trie la liste en ordre décroissant.
num = [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
num.sort(reverse=True)
print(num)
3. Valeur minimum
Pour avoir la valeur minimum d'une liste, utilisez la fonction intégrée min.
num = [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
print(min(num))
4. Valeur maximum
Pour avoir la valeur maximum d'une liste, utilisez la fonction intégrée max.
num = [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
print(max(num))
5. n grandes/petites valeurs
Pour récupérer les n grandes/petites valeurs d'une liste, nous pouvons réutiliser la méthode sort et les index comme indiqué suivant où l'on affiche les 2 grandes et les 2 petites valeurs de la liste.
num = [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
num.sort(reverse=True)
print(num[:2])
print(num[-2:])
6. sorted()
Un inconvenient de la méthode sort est qu'elle écrasse la liste initiale en triant les valeurs de la liste et remplacant la liste avec la liste triée. La fonction sorted évite cet inconvenient en créant et retournant une nouvelle liste. Testez le code suivant et vérifiez la différence entre les deux approches.
num = [70, 20, 30, 10, 50, 60, 20, 80, 70, 50]
numtri = sorted(num,reverse=True)
print(num)
print(numtri)
Vous pouvez également utiliser la fonction sorted pour travailler avec des chaînes de caractères. Le code ci-dessous extrait les mots d'une chaine de caractères et ensuite, trie les mots par ordre alphabétique inverse. Rémarquez bien l'argument key qui assure le tri des mots en considérant et convertissant les caractères en miniscule.
print(sorted("Bonjour le monde!".split(), key=str.lower, reverse=True))
Exercice 1.4 ★★
1. Dictionnaires
Nous avons déjà vu comment utiliser les index pour accèder aux membres d'une liste ou d'un tuple ou même un ensemble. Parfois, nous aimerons bien associer une texte à une valeur au lieu d'un index; par exemple, associer une adresse à un nom. Les dictionnaires en Python nous donnent cette possibilité de associer un clé à une valeur. Voyez le code ci-dessous et regardez bien comment nous avons associé 3 différents clés aux 3 valeurs différentes.
a = {"contente": 12, "content": 12, "triste": 2}
print(a)
print(type(a))
Notre prochain objectif est de traverser le dictionnaire, c'est à dire afficher tous les clés-valeurs. Pour faire ça, nous utiliserons une boucle for, comme nous avons vu précédemment. Regardez bien comment nous utilisons le cle au-lieu du index.
a = {"contente": 12, "content": 12, "triste": 2}
for cle in a:
print("la phrase ", cle, " apparait ", a[cle], " fois")
Voici une autre façon d'accèder aux tous les clés-valeurs d'un dictionnaire. Cette fois, nous utiliserons une méthode items ainsi qu'une boucle for.
a = {"contente": 12, "content": 12, "triste": 2}
for cle,valeur in a.items():
print("la phrase ", cle, " apparait ", valeur, " fois")
Pour ajouter ou modifier une clé-valeur, il faut qu'affectuer la dictionnaire avec la nouvelle couleure.
a = {"contente": 12, "content": 12, "triste": 2}
a["joie"] = 10
print(a)
Pour supprimer une clé-valeur d'un dictionnaire, utilisez la fonction del comme indiqué ci-dessous.
a = {"contente": 12, "content": 12, "triste": 2}
del a["triste"]
print(a)
Il est possible de convertir un dictionnaire en un tuple de tuples de la taille 2.
mots = {"contente": 12, "content": 12, "triste": 2, "joie" : 10}
mots_tuple = [(cle, valeur) for cle,valeur in mots.items()]
print(mots_tuple)
2. itemgetter
Voyez le code ci-dessous pour trier les cles-valeurs du dictionnaire.
mots = {"contente": 12, "content": 12, "triste": 2, "joie" : 10}
print(sorted(mots))
Si vous voulez trier le dictionnaire en utilisant les valeurs, vous pouvez utilisez la méthode itemgetter. L'idée derrière le code ci-dessous est d'utiliser le deuxième membre du tuple pour le tri.
from operator import itemgetter
mots = {"contente": 12, "content": 12, "triste": 2, "joie" : 10}
mots_tuple = [(cle, valeur) for cle,valeur in mots.items()]
print(sorted(mots_tuple, key=itemgetter(1)))
3. Interaction avec l'utilisateur
Jusque là, nous avons qu'afficher les résultats et les messages et jamais interagi avec l'utilisateur. Notre prochain objectif est d'interagir avec les utilisateurs afin de leur demander les informations nécessaires. Nous commençons en demandant le nom de l'utilisateur.
nom = input("Quel est votre nom?")
print(nom)
Maintenant, nous demanderons son âge. Voyez le code ci-dessous et vous verrons que le type de la valeur stocker par la variable âge est une chaine de caractères (str), même si l'utilisateur rentre un entier.
age = input("Quel est votre âge? ")
print(age)
print(type(age))
Donc, avant d'utiliser la valeur age, nous convertisserons l'age en entier en utilisant la fonction int.
age = input("Quel est votre âge? ")
age = int(age)
print(age)
print(type(age))
Question 1: Codez en Python un programme pour demander un utilisateur les informations suivantes:
- Nom d'étudiant.e
- Age
- Les notes dans 5 modules
Utilisez une boucle for pour obtenir ces informations pour 10 étudiant.e.s.
Une fois que vous avez eu toutes les informations, calculez les valeurs suivantes pour chaque module et affichez les résultats suivants:
- la moyenne de la classe
- la note minimum
- la note maximum
Exercice 1.5 ★★★
1. Manipulation d'un fichier
Finalement, nous travaillerons avec les fichiers. L'objectif du code ci-dessous est d'ouvrir un fichier en mode écriture et écrire un message et enfin fermez le fichier.
message = "Bonjour le monde"
with open("bonjour.txt", "w") as file:
file.write(message)
file.close()
L'objectif du code ci-dessous est d'ouvrir un fichier en mode lecture et lire le fichier entier afin de le fermer.
with open("bonjour.txt", "r") as file:
text = file.read()
print(text)
file.close()
Ci-dessous sont deux codes qui écrivent deux messages dans un fichier. Comparez les deux codes et les résultats.
Approche 1
message1 = "Bonjour le monde"
message2 = "Programmation en Python"
with open("bonjour.txt", "w") as file:
file.write(message1)
file.write(message2)
file.close()
with open("bonjour.txt", "r") as file:
text = file.read()
print(text)
file.close()
Approche 2
message1 = "Bonjour le monde\n"
message2 = "Programmation en Python"
with open("bonjour.txt", "w") as file:
file.write(message1)
file.write(message2)
file.close()
with open("bonjour.txt", "r") as file:
text = file.read()
print(text)
file.close()
2. readline()
Il est intéressant de lire un fichier texte ligne par ligne surtout quand le fichier est très voluminous. Vous pouvez utiliser la méthode readline ou juste une boucle for. Comparez les deux approches ci-dessous.
Approche 1
message1 = "Bonjour le monde\n"
message2 = "Programmation en Python"
with open("bonjour.txt", "w") as file:
file.write(message1)
file.write(message2)
file.close()
with open("bonjour.txt", "r") as file:
text = file.readline()
print(text)
file.close()
Approche 2
message1 = "Bonjour le monde\n"
message2 = "Programmation en Python\n"
with open("bonjour.txt", "w") as file:
file.write(message1)
file.write(message2)
file.close()
with open("bonjour.txt", "r") as file:
for line in file:
print(line)
file.close()
Question 2: Copiez ce fichier HTML dans votre répertoire. Codez en Python afin d'obtenir les résultats suivants:
- le nombre de caractères dans le texte
- le nombre de lignes dans le texte
- le nombre de mots dans le texte
- les mots distincts dans le texte
- les vingt premiers mots dans le texte
Question 3: Copiez ce fichier CSV dans votre répertoire. Le fichier contient la population entre 1901 et 2016. Codez en Python afin d'avoir les résultats suivants:
- La population moyenne
- Prévoire la population en 2050.