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"]