TP3b tableaux python, visualisation et fichier csv

Ex1: Visualiser les algorithmes

1. Moyenne

Le script suivant calcule la moyenne sur une liste de notes. La première valeur de la liste est reservée pour y placer une valeur, à la fin du programme. Les notes commencent donc à partir de l’indice 1 de cette liste:

​
 1list1 = ["",12.0,14.5,10.0,18.5]
 2
 3def moyenne(L):
 4    s = 0
 5    for x in L:
 6        s+=x
 7    return s/len(L)
 8    
 9m = moyenne(list1[1:])
10print(m)

Voir l’animation sur Pythontutor: visualiser le parcours et traitement sur une liste de notes list1:

Lien: pythontutor

nom et valeur des variables dans pythontutor - liste

nom et valeur des variables dans pythontutor - liste

1a. Commenter le schéma ci-dessus: que signifient les flèches? Que signifient les cases bleues et jaunes?

1b. Pourquoi écrit-on l’instruction m = moyenne(list1[1:]) et non m = moyenne(list1)?

1c Modifier le script (faire edit dans pythontutor) pour que le programme place la valeur m dans la case list1[0]. Noter ici l’instruction utilisée. Comment voit-on la modification dans pythontutor?

2. Recherche du maximum

​
 1list1 = ["",12.0,14.5,10.0,18.5]
 2n = len(list1)
 3
 4def maximum(L,a,b):
 5    # recherche du maximum de L entre les indices a et b
 6    maxi = L[a]
 7    for x in L[a:b]:
 8        if x > maxi:
 9            maxi = x
10    return maxi
11    
12m = maximum(list1,1,n)
13print(m)

2a. Voir l’animation sur Pythontutor: visualiser le parcours et traitement sur une liste de notes list1:

Lien: Pythontutor

2.b. Dans l’animation, lorsque la boucle for est executée, à quel(s) moment(s) la valeur de maxi est elle corrigée?

3. Traitement sur une table (liste de listes) et effet de bord

  1. Animation sur Pythontutor: visualiser le parcours et traitement sur une liste

Execution du script suivant sur Pythontutor

 1classe = [['\ufeff','moyenne','note1','note2','note3','note4','note5',
 2  'note6','note7','note8','note9'],
 3 ['eleve1', '12,5', 10.0, 8.9, 9.9, 12.3, 11.1, 12.3, 13.1, 14.5, 20.0],
 4 ['eleve2', '', 4.2, 2.1, 16.5, 15.0, 19.6, 7.5, 10.3, 18.8, 17.4]]
 5
 6def moyenne(tab):
 7    s = 0
 8    for note in tab:
 9        s += note
10    return s / len(tab)
11
12eleve = classe[2]
13m = round(moyenne(eleve[2:]),2)
14print(m)
nom et valeur des variables dans pythontutor - tableau

nom et valeur des variables dans pythontutor - tableau

3a. Commenter le schéma ci-dessus: que signifient les flèches? Que signifient les cases bleues et jaunes?

3b. Que contient la liste eleve? Recopier son contenu. (fiche reponse)

3c. Pourquoi écrit-on l’instruction m = moyenne(eleve[2:]) et non m = moyenne(eleve))?

3d. Ajouter une instruction au programme pour placer la valeur m dans la case eleve[1]. Noter ici l’instruction utilisée. Comment voit-on la modification dans pythontutor?

3e. La table a t-elle été modifiée? Expliquer.

3f. Ecrire une fonction ajoute_colonne_moyenne qui prend en paramètre une table classe et un numero de colonne c. Le fonction devra ajouter la moyenne pour chaque élève, dans la colonne c. La table classe aura le format proposé dans l’énoncé vu plus haut.

Ex 2: Fichier de notes en csv

But: programmer un logiciel de traitement des notes des élèves, à la manière de Pronotes.

Dans votre IDE (Pyzo, IDLE), ouvrir un nouveau fichier python, et placer les 2 fonctions:

def somme(tab):
    """calcule la somme de la liste tab
    """
    s = 0
    for x in tab:
        s += x
    return s

def moyenne(tab):
    """calcule la moyenne des valeurs de la liste tab
    """
    return somme(tab)/len(tab)

Sauvegarder sur le disque dur. Avec le nom prounotes.py par exemple

Telecharger et placer dans le même dossier le fichier classe.csv

Deux options sont possibles pour organiser votre dossier et vos fichiers:

  • Vous pouvez placer classe.csv dans le même dossier que le fichier python: Depuis le script python, ouvrez le alors avec l’instruction with open('classe.csv', newline='') as csvfile:
  • ou bien dans un sous dossier datas. Il faudra adapter le script pour préciser le schemin.

Ajouter le script suivant:

​
1import csv
2with open('datas/classe.csv', newline='') as csvfile:
3    tab = csv.reader(csvfile, delimiter = ";")
4    classe = []
5    for row in tab:
6        classe.append(row)
7print(classe[:2])
  1. Dans cet exemple, quelle option a été choisie pour placer le fichier classe.csv?
  2. Que remarque t-on à propos du séparateur des valeurs décimales?

Pour remplacer le caractère , par . dans une chaine de caractères, on peut utiliser la méthode de chaine replace:

"Hell@ W@rld".replace('@','o')
# retourne
"Hello World"
  1. Quelle instruction python va transformer '12,5' en un float égal à 12.5?

La fonction remplacer va traiter chaque note du tableau pour qu’elle soit dans le bon format (float).

  1. Compléter le script de cette fonction et l’ajouter à votre programme:
def remplacer(tab):
    for i in range(1,len(tab)):
        for j in range(2,len(tab[i])):
            note = tab[i][j]
            tab[i][j] = ...(note. ... (',','.'))

remplacer(classe)

Pour chaque élève, vous allez calculer la moyenne de ses notes à l’aide de la fonction moyenne définie plus haut. Et placer la valeur dans la colonne d’indice 1:

for i in range(1,len(classe)):
    eleve = classe[i]
    # calcul de la moyenne des notes
    m = moyenne(eleve[..:..])
    # arrondir avec 2 decimales
    m = round(...,...)
    # placer m dans la colonne moyenne
    eleve[..] = ...
  1. Compléter et ajouter le script à votre programme.

Suite

Cours
TP3a Tableur
TP3b Tableau de notes et algorithmes (Visualisation)
TP3c Systemes scolaires européens