I Table et Fichier csv
1 - Situation
On veut gérer des scores de joueurs en utilisant Python. Les joueurs ont fait 3 parties. Pour
représenter ces données, on utilise un tableur dans lequel on crée le tableau suivant :
— Utiliser le logiciel Calc de LibreOffice pour créer ce tableau
— Enregistrez votre travail sous la forme d’un fichier de type csv portant le nom de [Link].
— Ouvrez votre fichier [Link] à l’aide d’un éditeur de texte comme vscode par exemple.
— Que constatez-vous ?
— csv signifie "coma separate values". Commentez.
Objectifs de l’activité
1. Utilisez Python pour récupérer les informations contenues dans le fichier [Link]
2. Modifier les informations contenues dans ce fichiers
3. Effectuer une recherche dans ce fichier
4. Ajouter les scores d’un nouveau joueur
II Création d’un tableau 2D en python
Le code de ce qui suit est saisi sur Capytale 604f-396646
1 - Premier exemple
Un tableau 2d en python est codé à l’aide d’une liste de listes. C’est à dire une liste où chaque
élément est lui-même une liste.
1 tableau = [[ 3 , 1 , 4] ,
2 [2 , 5 , 9 ]
3 ]
Ce tableau contient 2 lignes de 3 colonnes. En python, tableau est une liste dont : - le premier
élément est tableau[0] est contient la liste [3,1,4] - le second élément est tableau[1] est contient
la liste [2,5,9]
Lycée Dumézil NSI - [Link] 1
1. Testez le code suivant permet de remplacer la valeur 2 par 1 :
1 tableau [1][0] = 1
2. En quelques instructions modifier tableau de manière à obtenir
1 tableau = [[ 0 , 1 , 5] ,
2 [1 , 5 , 9]
3 ]
3. facultatif Générer le tableau suivant en utilisant une liste par compréhension
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
2 - Passage du fichier csv à un tableau 2d Python
Le programme suivant permet de lire un fichier csv est d’extraire les données qu’il contient sous
forme de liste.
1 import csv
2 fichier = open ( " scores . csv " ," r " , newline = " " , encoding = ’ utf8 ’)
3 table = list ( csv . reader ( fichier , delimiter = " ; " ) )
4 print ( table )
Questions
1. Ajouter une ligne de code pour afficher le contenu de table.
2. Tous les éléments de table contiennent-ils le même type d’information ?
Vocabulaire Joueur, Partie1, Partie2 et Partie3 s’appellent les champs (ou descripteur) du
tableau (ou de la table).
Obtention d’une liste des scores et des champs
A partir de table contenant :
1 [[ ’ Joueur ’ , ’ Partie1 ’ , ’ Partie2 ’ , ’ Partie3 ’] , [ ’ Manon ’ , ’7 ’ , ’8 ’ , ’ 10 ’] , [ ’ Lucas ’ , ’9
’ , ’ 10 ’ , ’7 ’] , [ ’ Enzo ’ , ’5 ’ , ’7 ’ , ’8 ’] , [ ’ Clara ’ , ’8 ’ , ’9 ’ , ’ 10 ’ ]]
1. Ecrire un programme qui stocke les champs dans une liste nommée :champs
2 [ ’ Joueur ’ , ’ Partie1 ’ , ’ Partie2 ’ , ’ Partie3 ’]
2. Vérifiez que vous récupérez aussi une liste scores qui contient
Lycée Dumézil NSI - [Link] 2
1 [[ ’ Manon ’ , ’7 ’ , ’8 ’ , ’ 10 ’] ,
2 [ ’ Lucas ’ , ’9 ’ , ’ 10 ’ , ’7 ’] ,
3 [ ’ Enzo ’ , ’5 ’ , ’7 ’ , ’8 ’] ,
4 [ ’ Clara ’ , ’8 ’ , ’9 ’ , ’ 10 ’ ]]
Aide : Utilisez la méthode pop et recopier le reste de la liste table dans une nouvelle liste nommée
scores
III Modifier / Recherche un information
1 - Modification
Pour accéder à une donnée dans la liste donnees_en_ligne, il faut spécifier le numéro de la ligne
et le numéro de la colonne où est rangée l’information.
Exemple Si on souhaite accéder au score de Lucas lors de la deuxième partie, on doit repérer que
Lucas figure à la ligne 1 (on compte à partir de 0) et le score de la deuxième partie (10) a pour indice
2 dans la liste : ['Lucas', '9', '10', '7']. En langage python, on accède à cette information par
donnees_en_ligne[1][2]
Questions
1. Comment accéder au score de la troisième partie d’Enzo ?
2. Clara n’a pas obtenue 8 à la première partie mais 6. Ecrire une ligne de code Python permettant
de corriger le score de Clara.
3. Dans votre notebook, écrire une fonction affiche_score qui reçoit un nom et le tableau des
scores. La fonction affiche les scores obtenus par le joueur. Un message “joueur inexistant” sera
affiché si le joueur ne figure pas dans le tableau.
Exemple de sortie:
Voici les scores de Clara
score partie 1 : 8
score partie 2 : 9
score partie 3 : 10
2 - Fonction recherche
BUT Ecrire une fonction recherche qui reçoit une chaîne de caractère contenant une
valeur de score et renvoie la liste de tous les joueurs qui ont obtenu au moins une fois lors
d’une partie ce score.
Lycée Dumézil NSI - [Link] 3
Exemple l’appel de recherche("8",donnees_en_ligne) renvoie la liste : ['Manon', 'Enzo',
'Clara'].
Questions
1. Compléter le code de la fonction recherche suivante :
1 def recherche_1 ( score , table ) :
2 """
3 score : nombre entier ; table : une liste
4 Retourne une liste contenant les noms qui ont obtenu le score recherche
5 """
6 noms = []
7 for ligne in table :
8 joueur = ligne [0]
9 print ( joueur )
10 if score in a completer :
11 noms . append ( a completer )
12 return noms
2. Testez le bon fonctionnement de la fonction recherche.
IV Ajout d’information
1 - Travail
Ajout des scores d’un nouveau joueur. Pierre a obtenu les scores 5, 7 et 9.
1. Ecrire le code Python permettant d’ajouter les informations de Daniel dans scores.
2. Vérifiez en affichant la liste scores.
V High Score
On souhaite afficher le nom des joueurs par décroissant de score obtenue à la partie 3. On va
procéder en 3 étapes :
— Conversion des scores en nombres entiers car ce sont des chaînes de caractères au départ.
— Trier les scores dans l’ordre décroissant
1 - Conversion en int
1. Compléter le code suivant de manière à convertir les chaînes de caractères représentant les scores
des joueurs en valeurs entières de type int.
1 for ligne in a completer :
2 for i in range (1 , a completer ) :
Lycée Dumézil NSI - [Link] 4
3 ligne [ i ]= int ( ligne [ i ])
4 print ( scores )
2. Vérifier que vous obtenez
[[’Manon’, 7, 8, 10], [’Lucas’, 9, 10, 7], [’Enzo’, 5, 7, 8], [’Clara’, 8, 9, 10]]
2 - Tri
— Le code suivant permet d’effectuer un tri sur les scores. Lorsque reverse = True ce tri est dans
l’ordre décroissant.
— Tester le code suivant
1 numero_partie = 1
2 scores_tri = sorted ( scores , key = lambda ligne : ligne [ numero_partie ] , reverse = True )
3 print ( scores_tri )
— Vérifier que le classement selon le score est correct.
— Ecrire une fonction high_score qui reçoit scores et numero_partie. Cette fonction affiche les
joueurs dans l’ordre décroissant de leur score à la partie numero_partie.
Exemple : Avec une liste scores qui contient : [['Manon', 7, 8, 10], ['Lucas', 9, 10, 7],
['Enzo', 5, 7, 8], ['Clara', 8, 9, 10]] la fonction high_score affiche :
High-Scores de la partie 1
Rang 1 Lucas ......... 9 pts
Rang 2 Clara ......... 8 pts
Rang 3 Manon ......... 7 pts
Rang 4 Enzo ......... 5 pts
Lycée Dumézil NSI - [Link] 5