Donnéees Structurées
CSV et Python NSI
Consignes
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].
• Vous rédigerez votre travail dans un notebook
Objectifs de la séquence
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
Création d’un tableau 2D en python
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.
tableau = [[ 3, 1, 4] ,
[2, 5, 9 ]
]
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]
1. Testez le code suivant permet de remplacer la valeur 2 par 1:
tableau[1][0] = 1
2. En quelques instructions modifier tableau de manière à obtenir
1
tableau = [[ 0, 1, 5] ,
[1, 5, 9]
]
3. facultatif Générer le tableau suivant en utilisant une liste par compréhension
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
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.
f = open("[Link]","r")
table = [[Link]().split(";") for ligne in f]
[Link]()
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 du tableau (ou de la table).
Obtention d’une liste des scores et des champs
A partir de table contenant :
[['Joueur', 'Partie1', 'Partie2', 'Partie3'], ['Manon', '7', '8', '10'], ['Lucas', '9', '10', '7'], ['Enzo', '5
1. Ecrire un programme qui stocke les champs dans une liste nommée:champs
['Joueur', 'Partie1', 'Partie2', 'Partie3']
2. Vérifiez que vous récupérez aussi une liste scores qui contient
[['Manon', '7', '8', '10'],
['Lucas', '9', '10', '7'],
['Enzo', '5', '7', '8'],
['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
Modifier / Recherche un information
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]
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
Fonction recherche
Vous devez écrire 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.
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:
def recherche_1(score,table):
"""
Reçoit la liste des joueurs et scores
Retourne une liste contenant les noms qui ont obtenu le score recherché
"""
noms = []
for ligne in table:
joueur = ligne[0]
print(joueur)
if score in à compléter:
[Link]( à compléter)
return noms
2. Testez le bon fonctionnement de la fonction recherche.
Ajout d’information
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.
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
3
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.
for ligne in à compléter:
for i in range(1,à compléter):
ligne[i]=int(ligne[i])
print(scores)
2. Vérifier que vous obtenez
[['Manon', 7, 8, 10], ['Lucas', 9, 10, 7], ['Enzo', 5, 7, 8], ['Clara', 8, 9, 10]]
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
numero_partie = 1
scores_tri = sorted(scores , key=lambda ligne:ligne[numero_partie], reverse= True)
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