NSI,JSON

Télécharger le fichier json de la liste des jardins remarquables en France (1944-1999) à l’adresse ci-desous :

https://data.culture.gouv.fr/explore/dataset/liste-des-jardins-remarquables/export/?disjunctive.types

On considère le programme python ci-dessous :

import json
# on ouvre le fichier json effectifs-armentieres

with open('liste-des-jardins-remarquables.json') as mon_fichier:
    # on stocke les donnees
    donnees = json.load(mon_fichier)
def recherche_par_region(nom_region):
    '''
    retourne la liste des jardins remarquables dans
    la région
    recherche_par_region("Occitanie") ou recherche_par_region("occitanie") doivent renvoyer la même liste
    >>>len(recherche_par_region("Occitanie"))
    43
    '''
    # on convertit en minuscules le nom de la region
    nom_region=nom_region.lower()
    # on utilise la variable globale donnees pour eviter de
    # la passer en paramètre
    global donnees
    donnees_retour=.................................
    # on parcourt les donnees
    for jardin in donnees:
        # si le nom de la region n'est pas vide
        if .................... !=None:
            # on convertit le nom de la region en minuscules
            region_jardin=..........................
            # si le nom recherché est dans le nom de la region
            if .............................. :
                # on ajoute au donnees à retourner le jardin
                ..................................
    return ..................
    

Exercice 1 : 8 points

Recopier ce programme et compléter les 6 lignes en pointillés de la fonction pour qu’elle réponde à sa docstring.

Exercice 2 : 8 points

On considère la fonction suivante et sa docstring:

def recherche_par_nom(nom_jardin):
    '''
    retourne la liste des jardins contenant le nom_jardin
    la liste retournée contient pour chaque jardin trouvé
    le nom, l'adresse de l'entrée publique, la commune et la
    région
    >>> recherche_par_nom('Rocambole')
    [{'nom': 'Jardin Rocambole', 'entrée': '112 La Lande aux Pitois, 35150 Corps-Nuds, France', 'ville': 'Corps-Nuds', 'region': 'Bretagne'}]
    >>> recherche_par_nom('ROCAMBOLe')
    [{'nom': 'Jardin Rocambole', 'entrée': '112 La Lande aux Pitois, 35150 Corps-Nuds, France', 'ville': 'Corps-Nuds', 'region': 'Bretagne'}]
    >>>len(recherche_par_nom('botanique'))
    19
    '''

A vous de la compléter.

Exercice 3 : 4 points

Compléter la fonction suivante :

def plus_anciens():
    '''
    retourne la liste des jardins ayant obtenus le titre
    de jardin remarquable les plus anciens
    >>> len(plus_anciens())
    117
    >>>plus_anciens()[0]["annee_d_obtention"]
    '2004'
    >>> plus_anciens()[0]["nom_du_jardin"]
    "Roseraie de l'abbaye de Chaalis"
    '''

proposition de correction

import json
# on ouvre le fichier json effectifs-armentieres

with open('liste-des-jardins-remarquables.json') as mon_fichier:
    # on stocke les donnees
    donnees = json.load(mon_fichier)

def recherche_par_region(nom_region):
    '''
    retourne la liste des jardins remarquables dans
    la région
    recherche_par_region("Occitanie") ou recherche_par_region("occitanie") doivent renvoyer la même liste
    >>>len(recherche_par_region("Occitanie"))
    43
    '''
    # on convertit en minuscules le nom de la region
    nom_region=nom_region.lower()
    # on utilise la variable globale donnees pour eviter de
    # la passer en paramètre
    global donnees
    donnees_retour=[]
    # on parcourt les donnees
    for jardin in donnees:
        # si le nom de la region n'est pas vide
        if jardin["region"] !=None:
            # on convertit le nom de la region en minuscules
            region_jardin=jardin["region"].lower()
            # si le nom recherché est dans le nom de la region
            if nom_region in region_jardin  :
                # on ajoute au donnees à retourner le jardin
                donnees_retour.append(jardin)
    return donnees_retour

def recherche_par_nom(nom_jardin):
    nom_jardin=nom_jardin.lower()
    global donnees
    donnees_retour=[]
    # on parcourt les donnees
    for jardin in donnees:
        if jardin["nom_du_jardin"] !=None:
            # on convertit le nom de la region en minuscules
            jardin_nom=jardin["nom_du_jardin"].lower()
            # si le nom recherché est dans le nom de la region
            if nom_jardin in jardin_nom:
                # on ajoute au donnees à retourner le jardin
                dico={}
                dico["nom"]=jardin["nom_du_jardin"]
                dico["commune"]=jardin["commune"]
                dico["entrée"]=jardin["adresse_de_l_entree_du_public"]
                dico["region"]=jardin["region"]
                donnees_retour.append(dico)
    return donnees_retour