Dictionnaires : Données Maritimes
L'usage de la calculatrice n'est pas autorisé
L'utilisation des fonctions sum
, max
ou count
est interdite.
Durée: 1h
Gestion de la base de données des bateaux
On va consulter et modifier une base de données qui contient des bateaux sous forme de dictionnaires (chaque bateau correspond à un dictionnaire).
Tous les bateaux sont donc des dictionnaires qui ont pour clĂ©sâŻ:
Ci-dessous, voici un exemple de bateau.
navire_nordnes = {
"nom": "NORDNES",
"type": "Vraquier", # Type du bateau. Un vraquier transporte des matériaux en vrac (sable, métal,...)
"capacité": 15000, # Capacité en tonnes
"ismm": 258033200, # Numéro ISMM, un numéro unique.
"performances": {
"vitesse_max": 25, # Vitesse maximale en noeuds
"consommation_carburant": 120, # Consommation de carburant en litres par heure
},
"pavillon": "NorvĂšge", # Pavillon du bateau
}
Question 1
Ăcrire une instruction qui retourne le numĂ©ro ISMM du navire_nordnes
.
Corrigé
navire_nordnes["ismm"]
Question 2
Donner une expression qui vaut True
si la capacité d'un bateau dont le dictionnaire est appelé B
est supérieure à \(10000\) tonnes et False
sinon.
Corrigé
B["capacité"] > 10000
Question 3
Le navire décrit par le dictionnaire navire_nordnes
vient de passer sous pavillon Suisse. Cependant, cette modification doit ĂȘtre validĂ©e uniquement si le nouveau pavillon n'est pas dĂ©jĂ celui du bateau.
Que faut-il écrire pour mettre à jour le pavillon du bateau et afficher un message approprié si le pavillon ne change pas�
Corrigé
if navire_nordnes["pavillon"] != "Suisse":
navire_nordnes["pavillon"] = "Suisse"
print("Le pavillon a été mis à jour.")
else:
print("Le pavillon est déjà celui du bateau.")
On va à présent condidérer la liste des bateaux qui naviguent sur les mers et océans de la planÚte. Cette liste s'écrit de la façon suivante: L=[...,petitbateau,navire_nordnes,grosbateau...]
et elle contient des milliers de bateaux qui ne peuvent pas ĂȘtre tous dĂ©crits ici.
Question 4
Ăcrire une fonction panama(L)
qui retourne la liste des noms des navires sous pavillon du Panama et ayant une vitesse maximale supérieure à 20 noeuds.
Corrigé
def panama(L):
resultats = []
for bateau in L:
if bateau["pavillon"] == "Panama" and bateau["performances"]["vitesse_max"] > 20:
resultats.append(bateau["nom"])
return resultats
Question 5
Ăcrire une fonction serieux(L)
qui supprime de la liste les navires du type plaisance
.
Corrigé
def serieux(L):
plais = []
for bateau in L:
if bateau["type"] == "plaisance":
plais.append(bateau)
for bateau in plais:
L.remove(bateau)
return L
Question 6
Ăcrire une fonction compeche(L)
qui retourne le nombre de navires de pĂȘche et la capacitĂ© moyenne de ces navires.
Corrigé
def compeche(L):
nbpeche = 0
capacite_totale = 0
for bateau in L:
if bateau["type"].lower() == "pĂȘche":
capacite_totale += bateau["capacité"]
nbpeche += 1
capacite_moyenne = capacite_totale / nbpeche
return nombre_peche, capacite_moyenne
Question 7
Ăcrire une fonction majo(L)
qui retourne le type majoritaire parmis les navires.
En cas d'Ă©galitĂ©, retourner tous les types en tĂȘte sous forme de liste.
Corrigé
def majo(L):
dicotypes = {}
for bateau in L:
type_bateau=bateau["type"]
if type_bateau in dicotypes:
dicotypes[type_bateau] += 1
else:
dicotypes[type_bateau] = 1
# on cherche le maximum
max_type = 0
for nb in type_bateau.values():
if nb > max_type:
max_type = nb
# on crée la liste des types avec le maximum trouvé avant
types_majo = []
for type, nb in type_bateau.items():
if nb == max_type:
types_majo.append(type_bateau)
return types_majo
Question 8
Ăcrire une fonction speed(L)
qui retourne le numéro ISMM du bateau ayant la vitesse maximale la plus grande.
Si plusieurs bateaux ont la mĂȘme vitesse maximale, choisir celui avec la plus grande capacitĂ©.
Corrigé
def speed(L):
meilleur_bateau = None
for bateau in L:
if meilleur_bateau is None or (
bateau["performances"]["vitesse_max"] > meilleur_bateau["performances"]["vitesse_max"]
) or (bateau["performances"]["vitesse_max"] == meilleur_bateau["performances"]["vitesse_max"]
and bateau["capacité"] > meilleur_bateau["capacité"]):
meilleur_bateau = bateau
return meilleur_bateau["ismm"]