Travail sur les missions particulières

Il faut impérativement s’investir pendant les congés suite à cette séquence, étape par étape, progresser !

Une note d’investissement dans ce projet sera posée avant la fin du trimestre !

cm 2020-02-05 NSI ProjetLaby missions particulièresOn commence par

 

Dictionnaires. TP carnet d’adresses v2

Cours :

On se base sur le document distribué la semaine dernière, document national publié sur le site d’accompagnement pour les nouveaux programmes de NSI :

Ce qu’en dit le programme :

Dictionnaires par clés et valeurs.
Construire une entrée de dictionnaire. Itérer sur les éléments d’un dictionnaire.
Il est possible de présenter les données EXIF d’une image sous la forme d’un enregistrement. En Python, les p-uplets nommés sont implémentés par des dictionnaires. Utiliser les méthodes
keys(), values() et items().

Application :

Ce nouveau « type construit » est idéal pour reprendre et finir notre TP « Carnet d’adresses »

On change de structure de données. On avait :

repertoire = [["Pierre", 42, " 06.07.08.09.10 ", "3 allée des bois LILLE"],
["Marie", 37, " 06.10.09.08.07 ", "42 rue des fraises STRASBOURG"],
["John Malkovich", 65, " 01.02.03.04.05 ", "HOLLYWOOD"]]

On va transformer notre répertoire en dictionnaire.
En effet, c’est une excellente structure de données pour une première base de données.

On reprend notre fonction de lecture du fichier contacts.csv de notre TP « Carnet d’adresses » et on la réécrit ainsi :

def charge() :
    # initialisation : liste vide
    rep = {}
    # ouverture du fichier en lecture -> 'r'
    with open("contacts.csv", 'r') as fichier:
        # on récupère le contenu
        texte = fichier.read()
        # on le separe en lignes
        lignes = texte.split(sep = '\n')
        # print(lignes)
        # on parcourt les lignes
        for phrase in lignes:
            contact = phrase.split(sep = ";")
            # contact valable ? contact est une liste
            if len(contact) == 4:
                new = {}
                new['adresse'] = contact[3]
                new['tel'] = contact[2]
                # conversion de l'age en entier
                new['age'] = int(contact[1])
                # ajout du contact au repertoire avec comme clé le nom
                nom = contact[0]
                rep[nom] = new
        fichier.close()
        #print(rep)
    return rep

Ainsi, la succession d’instructions

repertoire = charge()
# menu()
print(repertoire)

affiche :

{'Pierre': {'adresse': '3 allee des bois LILLE',
                'tel': '06.07.08.09.10', 
                'age': 42},
 'Marie': {'adresse': '42 rue des fraises STRASBOURG', 
               'tel': '06.10.09.08.07', 
               'age': 37},
 'John Malkovich': {'adresse': 'HOLLYWOOD', 
                        'tel': '01.02.03.04.05', 
                        'age': 65},
 'Marchant': {'adresse': 'RUDLOFF', 
                  'tel': '06.36.80.93.99', 
                  'age': 46}, 
 'Nathan': {'adresse': "La-bas si j'y suis.", 
                'tel': '06.07.08.02.05', 
                'age': 17}}
>>>

(J’ai rajouté quelques retours à la ligne pour plus de lisibilité 😉 )
Ainsi, avec un tél dictionnaire repertoire :

>>> repertoire['Pierre']
>>> {'adresse': '3 allee des bois LILLE',
                'tel': '06.07.08.09.10', 
                'age': 42}
>>> repertoire['Marie']['age']
>>> 37
>>>

Pour lundi de la rentrée :

  • implémenter la fonction d’affichage d’un contact dont on connaît le nom,
  • implémenter la fonction d’affichage de tout le répertoire,
  • implémenter la fonction d’ajout d’un contact,
  • implémenter la fonction de sauvegarde du fichier contacts.csv

À venir lundi à la rentrée :

  • implémenter une fonction de recherche globale.

Un premier QCM

On passe un premier QCM.

Comme c’est important, et que ça stresse, parce que :

  • celles et ceux qui arrêtent la spécialité en fin de première passent un QCM,
  • parce qu’il y aura des points négatifs,
  • que c’est une épreuve particulière qui s’entraîne
    • procéder par élimination,
    • gérer un risque ou une absence de réponse….

je vous accompagne avec deux mesures :

  1. Je vous laisse réviser et discuter une vingtaine de minutes.
  2. Je ne compte pas aujourd’hui les points négatifs mais vous vous souviendrez des « risques » que vous avez pris. On corrigera dans la foulée !

Votre mission, si vous l’acceptez…

On corrige les minima attendus pour aujourd’hui après le TP4 de notre « ProjetLaby » :

  • A l’image de la touche « d » qui pose une case magenta codée « 2 » en grille[0][depart], faites en sorte que la touche « a » pose une case cyan codée « 3 » en dernière ligne dans une colonne arrivee impaire.
  • Créer les fonctions vers_le_haut(), vers_la_gauche() et vers_la_droite() et associez-les aux touches correspondantes.
  • Faites en sorte que la partie se termine quand le personnage est dans la case arrivee.

Vers un projet global cohérent en vue de la « journée portes ouvertes » le 14 mars

Explication de ce qu’on veut présenter et établissement d’une …

Liste des missions particulières :

cm 2020-02-05 NSI ProjetLaby missions particulières

Programme et évaluation

Programme et évaluation « E3C » en NSI

Épreuve commune de contrôle continue de début mai, texte officiel :

épreuve de 2h, consistant en un questionnaire à choix multiples divisé en 7 parties, une pour chaque thématique du programme. Chaque partie comporte 6 questions. Pour chaque question, 4 réponses sont proposées dont une seule est correcte. L’usage de la calculatrice est interdit.
Notation: Pour chacune des 42 questions, le candidat gagne 3 points pour la réponse correcte, perd 1 point pour une réponse fausse, et obtient un résultat nul pour absence de réponse ou une réponse multiple. Sur chacune des sept parties, si le total des points obtenu par le candidat est négatif, son résultat est évalué à 0. Le résultat obtenu est transformé en note sur 20 selon la formule : nombre de points obtenus ×20/ (3×42).

Les sept thématiques du programme ?

  • Représentation des données: types et valeurs de base
  • Représentation des données: types construits
  • Traitement de données en tables
  • Interactions entre l’homme et la machine sur le Web
  • Architectures matérielles et systèmes d’exploitation
  • Langages et programmation
  • Algorithmique

Quelques explications sur ces termes ?

ob_30a205_programme

J’ai lu le programme !
(Heureusement me direz-vous
😉 )

Et vous ?

Je me suis dit deux choses :

  • On en a déjà fait pas mal ! Plus de la moitié des attendus.
  • Vous ne comprendriez pas forcément ce qui est écrit…

… alors décryptons ensemble certains items et profitons-en pour traiter quelques compléments.

Quelques morceaux choisis :

Exemple 1 :

« 0.2 + 0.1 n’est pas égal à 0.3. Il faut éviter de tester l’égalité de deux flottants. Aucune connaissance précise de la norme IEEE-754 n’est exigible. »

La norme IEEE-754 ? Il s’agit de la manière dont sont codés les flottants, comme nous l’avons appris ici.

Illustrons-le avec un petit code python très maladroit :

nombre = 0.1

while nombre != 1 :
    nombre += 0.1
    print(nombre)

Il faut en effet éviter de tester l’égalité de deux flottants :

>>> 
======== RESTART: cm 2020-02-03 NSI exemple1.py ========
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
1.2
1.3
...

Il nous a fallu une interruption (Ctrl-C) pour ce programme qui tournait en boucle infinie !

Exemple 2 :

Diversité et unité des langages de programmation.
Repérer, dans un nouveau langage de programmation, les traits communs et les traits particuliers à ce langage.
Les manières dont un même programme simple s’écrit dans différents langages sont comparées.

On va par exemple sur cette page pour comparer notre programme précédent avec celui-ci écrit en javascript:

let nombre = 0.1

while (nombre != 1){
  nombre = nombre + 0.1;
  alert(nombre); // plutôt que console.log(nombre);
}

On repère, dans ce nouveau langage de programmation, les traits communs et les traits particuliers à ce langage, on compare avec python.

Exemple 3 :

Tableau indexé, tableau donné en compréhension :
Lire et modifier les éléments d’un tableau grâce à leurs index.
Construire un tableau par compréhension.
Utiliser des tableaux de tableaux pour représenter des matrices : notation a[i][j].
Itérer sur les éléments d’un tableau.

Construire un tableau par compréhension ?

>>>liste = [x ** 2 for x in range(1, 5)]
>>> liste
[1, 4, 9, 16]
>>> cesar = [chr(ord(lettre) - 3) for lettre in "FHVDU"]
>>> cesar
['C', 'E', 'S', 'A', 'R']
>>>

Exercices :

  • la table de 3 en compréhension ?
  • les 5 premiers impairs en compréhension ?
  • Que fait ce code ?
    matrice = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
    
    for i in range(3):
        for j in range(3):
            if (i + j) % 2 == 0:
                matrice[i][j] = 42
            else :
                matrice[i][j] = 52
    
    print(matrice)

Exemple 4 :

Utilisation de bibliothèques
Utiliser la documentation d’une bibliothèque.
Aucune connaissance exhaustive d’une bibliothèque particulière n’est exigible.

C’est bien entendu ce que nous faisons avec la bibliothèque pygame pour notre projetLaby !

Prenons un autre exemple, très utile pour d’autres sciences : la bibliothèque matplotlib, qui permet de générer des graphiques très facilement.

Illustrons-le avec un petit code python :

import matplotlib.pyplot as plt

def f(x) :
    return (x - 1) ** 2

abscisses = list(range(-18, 21, 1))
ordonnees = [f(x) for x in abscisses]
print("abscisses:\n", abscisses)
print("ordonnées:\n", ordonnees)

plt.plot(abscisses, ordonnees, marker='v')
plt.ylabel('images')
plt.xlabel("antécédents")
plt.title("Une jolie parabole ?")
plt.savefig("cm 2020-02-03 NSI test matplotlib.png")
plt.show()
======== RESTART: cm 2020-02-03 NSI exemple3.py ========
abscisses:
 [-18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
ordonnées:
 [361, 324, 289, 256, 225, 196, 169, 144, 121, 100, 81, 64, 49, 36, 25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
>>>

On a donné un autre exemple utile de liste en compréhension : changer les abscisses change automatiquement les ordonnées !

Et on a un beau graphique :
cm 2020-02-03 NSI test matplotlib

Exemple 5 :

p-uplets. p-uplets nommés.
Écrire une fonction renvoyant un p-uplet de valeurs

C’est ce que nous avons fait mercredi !
Cette fonction renvoie bien un couple (c’est-à-dire un p-uplet de taille 2) :

def vers_le_bas(grille, x, y, hauteur):
    if y + 1 < hauteur and grille[y + 1][x] != 1:
        y += 1
    return x, y

# et on l'appelle par exemple ainsi :
x, y = vers_le_bas(grille, x, y, hauteur)

Exercice :

  • Écrire une fonction stats(table) admettant une liste d’entiers en entrée et qui renvoie son minimum, son maximum et la moyenne de ses valeurs :
    ======== RESTART: cm 2020-02-03 NSI exemple4.py ========
    >>> stats([42, 18, 24])
    (42, 18, 28.0)
    >>>

Des « p-uplets nommés » ?

C’est la nouveauté du jour… En python, on utilisera des …

Dictionnaires – sera repris lundi prochain

Cours :

On se base sur le document national publié sur le site d’accompagnement pour les nouveaux programmes de NSI :

Application :

Ce nouveau « type construit » est idéal pour reprendre et finir notre TP « Carnet d’adresses »