NSI,Tables de Donnees, TP4,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 




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()
    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 
with open('jardins.json') as json_data:
    donnees = json.load(json_data)
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()
    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):
    '''
    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
    '''
    nom_jardin=nom_jardin.lower()
    donnees_retour=[]
    for jardin in donnees:
        if jardin['nom_du_jardin'] !=None:
            jardin_nom=jardin['nom_du_jardin'].lower()
            if  nom_jardin in jardin_nom:
                jardin_retour={}
                jardin_retour['nom_du_jardin']=jardin['nom_du_jardin']
                jardin_retour['commune']=jardin['commune']
                jardin_retour['adresse_de_l_entree_du_public']=jardin['adresse_de_l_entree_du_public']
                jardin_retour['region']=jardin['region']
                donnees_retour.append(jardin_retour)
    return donnees_retour
    
    
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"
    '''
    annee_min=donnees[0]['annee_d_obtention']
    for jardin in donnees:
        if jardin['annee_d_obtention']<annee_min:
            annee_min=jardin['annee_d_obtention']
    retour=[]
    for jardin in donnees:
        if jardin['annee_d_obtention']==annee_min:
            retour.append(jardin)
    return retour