Devoirs Première

Liste des fichiers Notebook

DM 4 - Première NSI - A rendre le mardi 14 janvier 2025 (Correction)

Question 1

Écrire une fonction trouver_minimum qui retourne le minimum d'une liste donnée.

# Fonction pour trouver le maximum dans une liste
def trouver_minimum(liste):
    min_val = liste[0]
    for val in liste:
        if val < min_val:
            min_val = val
    return min_val

# test
trouver_minimum([42, 17, 8, 23, 56, 34, 12, 89, 5, 31])

Question 2

Utiliser la fonction trouver_minimum pour implémenter la fonction tri_simple qui trie en remplissant une nouvelle liste vide à l'aide des instruction append et remove.

# Fonction de tri autre que par insertion et sélection (tri simple avec liste vide et append)
def tri_simple(liste):
    resultat = []
    while liste:
        min_val = trouver_minimum(liste)
        resultat.append(min_val)
        liste.remove(min_val)
    return resultat

# test
tri_simple([42, 17, 8, 23, 56, 34, 12, 89, 5, 31])

Question 3

Écrire la fonction de tri par sélection et celle de tri par insertion.

# Tri par sélection
def tri_selection(liste):
    for i in range(len(liste)):
        min_index = i
        for j in range(i + 1, len(liste)):
            if liste[j] < liste[min_index]:
                min_index = j
        liste[i], liste[min_index] = liste[min_index], liste[i]
    return liste

# test
tri_selection([42, 17, 8, 23, 56, 34, 12, 89, 5, 31])
# Tri par insertion
def tri_insertion(liste):
    for i in range(1, len(liste)):
        cle = liste[i]
        j = i - 1
        while j >= 0 and cle < liste[j]:
            liste[j + 1] = liste[j]
            j -= 1
        liste[j + 1] = cle
    return liste

# test
tri_insertion([42, 17, 8, 23, 56, 34, 12, 89, 5, 31])

Question 4

À partir du dictionnaire suivant :

donnees = [
    {"ville": "Paris", "superficie": 105.4, "habitants": 2148000},
    {"ville": "Marseille", "superficie": 240.62, "habitants": 870018},
    {"ville": "Lyon", "superficie": 47.87, "habitants": 522228},
    {"ville": "Toulouse", "superficie": 118.3, "habitants": 471941},
    {"ville": "Nice", "superficie": 71.92, "habitants": 342669},
    {"ville": "Nantes", "superficie": 65.19, "habitants": 303382},
    {"ville": "Strasbourg", "superficie": 78.26, "habitants": 280966},
    {"ville": "Montpellier", "superficie": 56.88, "habitants": 285121},
    {"ville": "Bordeaux", "superficie": 49.36, "habitants": 254436},
    {"ville": "Lille", "superficie": 34.83, "habitants": 233897},
    {"ville": "Rennes", "superficie": 50.39, "habitants": 217728},
    {"ville": "Reims", "superficie": 46.9, "habitants": 184076},
    {"ville": "Le Havre", "superficie": 46.95, "habitants": 169733},
    {"ville": "Saint-Étienne", "superficie": 79.97, "habitants": 173089},
    {"ville": "Toulon", "superficie": 42.84, "habitants": 176198}
]

Modifier la fonction de tri par sélection en tri_selection_dictionnaire pour trier la liste donnees par ordre alphabétique des villes.

# Modification du tri par sélection pour trier un dictionnaire
def tri_selection_dictionnaire(liste):
    for i in range(len(liste)):
        min_index = i
        for j in range(i + 1, len(liste)):
            if liste[j]['ville'] < liste[min_index]['ville']:
                min_index = j
        liste[i], liste[min_index] = liste[min_index], liste[i]
    return liste


# Exemple de données
donnees = [
    {"ville": "Paris", "superficie": 105.4, "habitants": 2148000},
    {"ville": "Marseille", "superficie": 240.62, "habitants": 870018},
    {"ville": "Lyon", "superficie": 47.87, "habitants": 522228},
    {"ville": "Toulouse", "superficie": 118.3, "habitants": 471941},
    {"ville": "Nice", "superficie": 71.92, "habitants": 342669},
    {"ville": "Nantes", "superficie": 65.19, "habitants": 303382},
    {"ville": "Strasbourg", "superficie": 78.26, "habitants": 280966},
    {"ville": "Montpellier", "superficie": 56.88, "habitants": 285121},
    {"ville": "Bordeaux", "superficie": 49.36, "habitants": 254436},
    {"ville": "Lille", "superficie": 34.83, "habitants": 233897},
    {"ville": "Rennes", "superficie": 50.39, "habitants": 217728},
    {"ville": "Reims", "superficie": 46.9, "habitants": 184076},
    {"ville": "Le Havre", "superficie": 46.95, "habitants": 169733},
    {"ville": "Saint-Étienne", "superficie": 79.97, "habitants": 173089},
    {"ville": "Toulon", "superficie": 42.84, "habitants": 176198}
]


# Test : Tri par ordre alphabétique des villes
tri_ville = tri_selection_dictionnaire(donnees)
print("Tri par ordre alphabétique des villes:", tri_ville)
Tri par ordre alphabétique des villes: [{'ville': 'Bordeaux', 'superficie': 49.36, 'habitants': 254436}, {'ville': 'Le Havre', 'superficie': 46.95, 'habitants': 169733}, {'ville': 'Lille', 'superficie': 34.83, 'habitants': 233897}, {'ville': 'Lyon', 'superficie': 47.87, 'habitants': 522228}, {'ville': 'Marseille', 'superficie': 240.62, 'habitants': 870018}, {'ville': 'Montpellier', 'superficie': 56.88, 'habitants': 285121}, {'ville': 'Nantes', 'superficie': 65.19, 'habitants': 303382}, {'ville': 'Nice', 'superficie': 71.92, 'habitants': 342669}, {'ville': 'Paris', 'superficie': 105.4, 'habitants': 2148000}, {'ville': 'Reims', 'superficie': 46.9, 'habitants': 184076}, {'ville': 'Rennes', 'superficie': 50.39, 'habitants': 217728}, {'ville': 'Saint-Étienne', 'superficie': 79.97, 'habitants': 173089}, {'ville': 'Strasbourg', 'superficie': 78.26, 'habitants': 280966}, {'ville': 'Toulon', 'superficie': 42.84, 'habitants': 176198}, {'ville': 'Toulouse', 'superficie': 118.3, 'habitants': 471941}]

Question 5

À partir du dictionnaire suivant :

autres_donnees = [
    {"ville": "Bordeaux", "pays": "France", "code_postal": 33000},
    {"ville": "Le Havre", "pays": "France", "code_postal": 76600},
    {"ville": "Lille", "pays": "France", "code_postal": 59000},
    {"ville": "Lyon", "pays": "France", "code_postal": 69000},
    {"ville": "Marseille", "pays": "France", "code_postal": 13000},
    {"ville": "Montpellier", "pays": "France", "code_postal": 34000},
    {"ville": "Nantes", "pays": "France", "code_postal": 44000},
    {"ville": "Nice", "pays": "France", "code_postal": 6000},
    {"ville": "Paris", "pays": "France", "code_postal": 75000},
    {"ville": "Reims", "pays": "France", "code_postal": 51100},
    {"ville": "Rennes", "pays": "France", "code_postal": 35000},
    {"ville": "Saint-Étienne", "pays": "France", "code_postal": 42000},
    {"ville": "Strasbourg", "pays": "France", "code_postal": 67000},
    {"ville": "Toulon", "pays": "France", "code_postal": 83000},
    {"ville": "Toulouse", "pays": "France", "code_postal": 31000}
]

Réaliser une jointure entre la liste existante donnees et la liste autres_donnees, en utilisant la clé commune "ville" pour fusionner les informations des deux listes dans une nouvelle liste ?

# Fonction pour joindre deux listes de dictionnaires sur une clé commune
def jointer_listes(liste1, liste2):
    resultat = []
    for item1 in liste1:
        for item2 in liste2:
            if item1["ville"] == item2["ville"]:
                fusion = {}
                # Copier les clés et valeurs de item1
                for key, value in item1.items():
                    fusion[key] = value
                # Copier les clés et valeurs de item2 (les valeurs de item2 écrasent celles de item1 en cas de conflit)
                for key, value in item2.items():
                    fusion[key] = value
                resultat.append(fusion)
    return resultat


# Autres données
autres_donnees = [
    {"ville": "Bordeaux", "pays": "France", "code_postal": 33000},
    {"ville": "Le Havre", "pays": "France", "code_postal": 76600},
    {"ville": "Lille", "pays": "France", "code_postal": 59000},
    {"ville": "Lyon", "pays": "France", "code_postal": 69000},
    {"ville": "Marseille", "pays": "France", "code_postal": 13000},
    {"ville": "Montpellier", "pays": "France", "code_postal": 34000},
    {"ville": "Nantes", "pays": "France", "code_postal": 44000},
    {"ville": "Nice", "pays": "France", "code_postal": 6000},
    {"ville": "Paris", "pays": "France", "code_postal": 75000},
    {"ville": "Reims", "pays": "France", "code_postal": 51100},
    {"ville": "Rennes", "pays": "France", "code_postal": 35000},
    {"ville": "Saint-Étienne", "pays": "France", "code_postal": 42000},
    {"ville": "Strasbourg", "pays": "France", "code_postal": 67000},
    {"ville": "Toulon", "pays": "France", "code_postal": 83000},
    {"ville": "Toulouse", "pays": "France", "code_postal": 31000}
]


# Test
donnees_jointees = jointer_listes(donnees, autres_donnees)
print("Données jointes :", donnees_jointees)
Données jointes : [{'ville': 'Bordeaux', 'superficie': 49.36, 'habitants': 254436, 'pays': 'France', 'code_postal': 33000}, {'ville': 'Le Havre', 'superficie': 46.95, 'habitants': 169733, 'pays': 'France', 'code_postal': 76600}, {'ville': 'Lille', 'superficie': 34.83, 'habitants': 233897, 'pays': 'France', 'code_postal': 59000}, {'ville': 'Lyon', 'superficie': 47.87, 'habitants': 522228, 'pays': 'France', 'code_postal': 69000}, {'ville': 'Marseille', 'superficie': 240.62, 'habitants': 870018, 'pays': 'France', 'code_postal': 13000}, {'ville': 'Montpellier', 'superficie': 56.88, 'habitants': 285121, 'pays': 'France', 'code_postal': 34000}, {'ville': 'Nantes', 'superficie': 65.19, 'habitants': 303382, 'pays': 'France', 'code_postal': 44000}, {'ville': 'Nice', 'superficie': 71.92, 'habitants': 342669, 'pays': 'France', 'code_postal': 6000}, {'ville': 'Paris', 'superficie': 105.4, 'habitants': 2148000, 'pays': 'France', 'code_postal': 75000}, {'ville': 'Reims', 'superficie': 46.9, 'habitants': 184076, 'pays': 'France', 'code_postal': 51100}, {'ville': 'Rennes', 'superficie': 50.39, 'habitants': 217728, 'pays': 'France', 'code_postal': 35000}, {'ville': 'Saint-Étienne', 'superficie': 79.97, 'habitants': 173089, 'pays': 'France', 'code_postal': 42000}, {'ville': 'Strasbourg', 'superficie': 78.26, 'habitants': 280966, 'pays': 'France', 'code_postal': 67000}, {'ville': 'Toulon', 'superficie': 42.84, 'habitants': 176198, 'pays': 'France', 'code_postal': 83000}, {'ville': 'Toulouse', 'superficie': 118.3, 'habitants': 471941, 'pays': 'France', 'code_postal': 31000}]