NSI: pb du voyageur de commerce

TP :
1. Télécharger le fichier csv suivant

2. Copier et coller le code python suivant dans un fichier voyageur_commerce.py situé dans le même dossier que le précédent fichier csv

def ouvrir_donnees():
    fichier = open("donnes_villes.csv", "r")
    donnees = fichier.read()
    donnees = donnees.replace (",", ".").split("\n")
    donnees=[ t.strip ("\r\n ").split (";") for t in donnees ]
    fichier.close()
    return donnees

3. Etudier le format de données

4. Ecrire une fonction permettant de déterminer la distance entre 2 villes

def distance(ville1,ville2):

5. Ecrire une fonction permettant de déterminer le meilleur trajet pour relier différentes villes figurant dans les données.

6. Utiliser le module folium pour placer les villes et tracer le trajet.

Proposition de correction

def ouvrir_donnees():
    fichier = open("donnes_villes.csv", "r")
    donnees = fichier.read()
    donnees = donnees.replace (",", ".").split("\n")
    donnees=[ t.strip ("\r\n ").split (";") for t in donnees ]
    fichier.close()
    return donnees
donnees=ouvrir_donnees()

def indice(nom_ville):
    for i in range(len(donnees)):
        if nom_ville==donnees[i][0]:
            return i
    return None

def distance(ville1,ville2):
    '''
    >>>distance("Nantes","Strasbourg")
    865
    >>>distance("Caen","Rennes")
    185
    '''
    imin=min(indice(ville1),indice(ville2))
    imax=max(indice(ville1),indice(ville2))
    return int(donnees[imax][3+imin])

villes=["Lille","Caen","Marseille","Saint-Etienne",
        "Paris","Brest","Toulouse","Strasbourg",
        "Le Havre","Lens"]

def meilleur_trajet(villes):
    trajet=[villes[0]]
    villes_restantes=villes.copy()
    del(villes_restantes[0])
    while len(villes_restantes)!=0:
        dmin=distance(trajet[-1],villes_restantes[0])
        ville_plus_proche=villes_restantes[0]
        for ville in villes_restantes:
            if distance(ville,trajet[-1]) <dmin:
                dmin=distance(ville,trajet[-1])
                ville_plus_proche=ville
        villes_restantes.remove(ville_plus_proche)
        trajet.append(ville_plus_proche)
        print(trajet,villes_restantes)
    return trajet