Aller au contenu

Dictionnaires : Lego©

L'usage de la calculatrice n'est pas autorisé

Durée: 1h

Avec les années, vous avez acquis un grand nombre de boîtes Lego©, de plusieurs thèmes : Star Wars, Architecture, City ou Friends... Nous allons travailler sur un dictionnaire en Python pour représenter ces boîtes Lego©. Chaque clé du dictionnaire correspondra au numéro de la boîte Lego©, et la valeur associée sera une liste de données correspondant, dans l'ordre:

  • au Theme de la boîte
  • au Nom de la boîte
  • au Nombre de pièces de la boîte
  • à l'Age minimum conseillé
  • au Prix d'achat de la boîte

Voici un extrait de ce que l'on trouve dans ce dictionnaire, que l'on appelle lego:

Numéro Theme Nom Nombre de pièces Âge Prix
71043 Harry Potter Hogwarts Castle 6020 16 469.99
42141 Technic McLaren Formula 1 Team 1434 18 199.99
41757 Friends Botanical Garden 6020 12 469.99
75369 Star Wars Boba Fett Mech 155 6 15.99

Question 1

Écrire l'instruction qui permet d'ajouter la boîte suivante du thème Architecture au dictionnaire lego.

  • Nom : Le Taj Mahal
  • Numéro : 21056
  • Nombre de pièces : 2022
  • Âge : 18
  • Prix : 119.99
Correction
lego[21056] = ['architecure', 'Le Taj Mahal', 2022, 18, 119.99 ]

Question 2

Donner une expression booléenne qui permet de savoir si j'ai des boites Lego© du thème "Creator".

Correction

def creator(dico) :
    for i in dico.values():
        if i[0]=="Creator":
            return True
    return False
ou bien, par compréhension:

'Creator' in [v[0] in list(lego.values())]

Question 3

Donner une fonction theme(D,T) qui permet d'obtenir la liste des noms des boîtes Lego© d'un thème T.

Correction
def theme(D,T):
  L=[]
  for i in D.values():
    if i[0]==T:
      L.append(i[1])
  return L

Question 4

Écrire une fonction Nbpièces(D,nb) qui retourne la liste des numéros des boîtes qui contiennent plus de nb pièces.

Correction
def Nbpièces(D,nb):
res=[]
for Num,B in D.items():
    if B[2]>nb:
        res.append(Num)
return res

Question 5

Écrire une fonction Folie(D,C) qui permet de retourner le numéro et le nom de la boîte qui contient le plus de pièces de la collection C dans le dictionnaire D ?

Correction

python def Folie(D,C): maxi=0 Nummaxi=0 for Num,B in D.items(): if B[2]>maxi and B[0]==C: maxi=B[2] Nummaxi=Num return Nummaxi,D[Nummaxi][1]

Question 6

Écrire une fonction filtre(D,A) qui supprime du dictionnaire D les boîtes dont l'age minimal conseillé est inférieur à A ?

Correction
def filtre(D,A):
    res=[]
    for Num,B in D.items():
        if B[3]<A:
            res.append(Num)
    for elt in res:
        del D[elt]

Question 7

Écrire une fonction Pluch(D) qui permet de retourner la liste des noms des 3 articles les plus chers du dictionnaire D.

Correction
def Chere(D):
    maxi=0
    Nummaxi=0
    for Num,B in D.items():
        if B[4]>maxi:
            maxi=B[4]
            Nummaxi=Num
    return Nummaxi

def Pluch(D):
    D1=D.copy()
    res=[]
    for i in range(3):
        Num=Chere(D1)
        res.append(D1[Num][1])
        del D1[Num]
    return res

Question 8

On achète un lot de boîtes Lego© en ligne. On range ces boîtes dans un nouveau dictionnaire D2 qui contient les nouveaux articles.

On souhaite fusionner les dictionnaires et revendre les 20 boîtes qui contiennent le moins de pièces.

Écrire une fonction revendre(D,D2) qui retourne la liste des numéros des boîtes à revendre.