👤

J'ai un DM en NSI pour demain le voici:




Exercice 2¶



Q0. Copier dans un fichier td9_exo2.py le code incomplet suivant :

# Def des fonctions
def cardinal(t):
pass

def attributs(t):
pass

def coherence_attributs(t):
pass

def existe_doublon(t, champ):
pass

# Programme principal
t1 = [{'Nom': 'Joe', 'Anglais': '17', 'Info': '18', 'Maths': '16'},
{'Nom': 'Zoé', 'Anglais': '15', 'Info': '13', 'Maths': '14'},
{'Nom': 'Max', 'Anglais': '19', 'Info': '13', 'Maths': '11'},
{'Nom': 'Bob', 'Anglais': '7', 'Info': '14', 'Maths': '18'},
{'Nom': 'Max', 'Anglais': '12', 'Info': '19', 'Maths': '15'}]

t2 = [{'Nom': 'Joe', 'Anglais': '17', 'Info': '18', 'Maths': '16'},
{'Nom': 'Zoé', 'Anglais': '15', 'Info': '13', 'Maths': '14'},
{'Nom': 'Max', 'Anglais': '19', 'Info': '13', 'Svt': '11'}]

t3 = [{'Nom': 'Joe', 'Anglais': '17', 'Info': '18', 'Maths': '16'},
{'Nom': 'Zoé', 'Anglais': '15', 'Info': '13', 'Maths': '14'},
{'Nom': 'Max', 'Anglais': '19', 'Info': '13'}]

t4 = [{'Nom': 'Joe', 'Anglais': '17', 'Info': '18', 'Maths': '16'},
{'Nom': 'Zoé', 'Anglais': '15', 'Info': '13', 'Maths': '14'},
{'Nom': 'Max', 'Anglais': '19', 'Info': '13', 'Maths': '11', 'Svt': '11'}]

# tests de la fonction cardinal
assert(cardinal(t1) == 5), 'échec du test de la fonction cardinal sur t1'
assert(...), 'échec du test de la fonction cardinal sur t2'

# test de la fonction attributs
assert(...), 'échec du test de la fonction attributs sur t1'

# tests de la fonction coherence_attributs
assert(...), 'échec du test de la fonction coherence_attributs sur t1'
assert(...), 'échec du test de la fonction coherence_attributs sur t2'
assert(...), 'échec du test de la fonction coherence_attributs sur t3'
assert(...), 'échec du test de la fonction coherence_attributs sur t4'

# tests de la fonction existe_doublon
assert(...), 'échec du test de la fonction existe_doublon sur t1 et Nom'
assert(...), 'échec du test de la fonction existe_doublon sur t1 et Anglais'
assert(...), 'échec du test de la fonction existe_doublon sur t1 et Info'


Q1. Compléter le corps de la fonction cardinal qui prend en paramètre une table t et renvoie son nombre d'enregistrements.
La tester en complétant les lignes d'assertions correspondantes.

Q2. Compléter le corps de la fonction attributs qui prend en paramètre une table t et renvoie la liste de ses attributs triée par ordre alphabétique croissant.
La tester en complétant les lignes d'assertions correspondantes.

Q3. Compléter le corps de la fonction coherence_attributs qui prend en paramètre une table t et renvoie True si tous les enregistrements de la table possèdent exactement les mêmes attributs et False sinon.
La tester en complétant les lignes d'assertions correspondantes.

Q4. Compléter le corps de la fonction existe_doublon qui prend en paramètre une table t et un champ champ et renvoie True si ce champ contient plusieurs fois la même valeur et False sinon.
La tester en complétant les lignes d'assertions correspondantes.

Exercice 3



Quel est le rôle de la fonction définie ci-dessous ?

def mystere(t, fs):
'''
param t: list de dict. Une table.
param fs: list de str.
return : list de dict.
'''
res = []
for e in t:
new_e = {}
for c in e:
if c in fs:
new_e[c] = e[c]
res.append(new_e)
return res



Répondre :

désolé pour l'envoi tardif

# Def des fonctions

def cardinal(t):

   return len(t)

def attributs(t):

   liste_nom = []

   for personne in t:

       for nom in personne:

           if nom == 'Nom':

               liste_nom.append(personne[nom])

   return sorted(liste_nom)

           

def coherence_attributs(t):

   dico = {}

   for enregistrement in t:

       for attributs in enregistrement:

           if attributs in dico:

               dico[attributs] += 1

           else:

               dico[attributs] = 1

   for valeur in dico:

       if dico[valeur] == cardinal(t):

           continue

       else:

           return False

   return True

def existe_doublon(t, champ):

   dico = {}

   for enregistrement in t:

       for attributs in enregistrement:

           if attributs == champ and not(enregistrement[champ] in dico):

               dico[enregistrement[champ]] = 1

           elif attributs == champ and enregistrement[champ] == enregistrement[attributs]:

               dico[enregistrement[champ]] += 1

   

   for valeur in dico:

       if dico[valeur] < 2:

           continue

       else:

           return True

   return False

Tout fonctionne