Mission 5

Mission 5

Pour cette mission, vous devez écrire des fonctions et tester leur bon fonctionnement. Comme dans les exercices de préparation, vous devez travailler à deux de cette façon: pendant qu'un étudiant écrit une fonction, l'autre développe la fonction de test correspondante. Lorsqu'une fonction est correctement spécifiée, on peut écrire les tests permettant de vérifier son bon fonctionnement sans connaître son code.

Dans cette mission vous allez créer plusieurs fonctions qui fonctionnent sur une liste de communes de la Belgique.

Etapes

Téléchargez le fichier sorted_belgian_communes.py, qui contient une liste de toutes les communes de la Belgique ainsi que leurs coordonnées (selon une projection Mercator). Ecrivez toutes les fonctions demandées durant cette mission dans ce fichier.

Etape 1

  • Écrivez une fonction verify_order(communes) qui vérifie que la liste de communes communes est triée par nom. Cette fonction doit retourner True quand la liste est triée, et False autrement. Écrivez une spécification de la fonction dans le style de Google!
  • Écrivez des tests pour cette fonction, en utilisant des exemples plus petits. Les tests doivent se baser sur la spécification de la fonction, comme convenu avec votre partenaire. Ajoutez les tests dans le même fichier, dans une fonction test_verify_order() sans arguments. Dans cette fonction de test, des instructions assert doivent être utilisé pour vérifier l'exactitude de la fonction verify_order(communes).

Finalement, appliquez votre fonction à la liste all_communes.

Etape 2

  • Écrivez une fonction coordinate(commune,all_communes) pour trouver les coordonnées d'une commune dans la liste all_communes, basé sur le nom de la commune. Utilisez une variation de binary_search. La fonction doit retourner un tuple qui représente les coordonnées selon la projection Mercator.
  • Écrivez des tests pour cette fonction, en utilisant des exemples plus petits. Ajoutez les testes dans le même fichier, dans une fonction test_coordinate().

Etape 3

Écrivez une fonction distance(commune1, commune2, all_communes) pour calculer la distance euclidienne entre deux communes dont les noms sont donnés. La distance euclidienne entre deux coordonnées (x1,y1) et (x2,y2) est:

((x1 − x2)2 + (y1 − y2)2)

Rappel: le module math contient une implémentation d'une fonction sqrt. Écrivez une fonction auxiliaire pour calculer la distance entre deux coordonnées (x1,y1) et (x2,y2).

De nouveau: ajoutez des spécifications pour toutes les fonctions, ainsi que des tests, dans une fonction test_distance().

Etape 4

Écrivez une fonction tour_distance(communes, all_communes) pour calculer la distance totale d'une tournée à travers toutes les communes dans la liste communes. La tournée commence à communes[0], va ensuite vers communes[1], communes[2], ..., communes[-1], pour finalement retourner à communes[0].

De nouveau: ajoutez des spécifications pour la fonction, ainsi que des tests, dans une fonction test_tour_distance().

Remise de votre solution

Pour cette mission, vous devez soumettre votre fichiers sorted_belgian_communes.py et README.txt au serveur de soumissions de programmes du cours. Les fonctions et les testes doivent être dans le même fichier. Le fichier ne doit contenir que des fonctions (en plus de la variable all_communes). Votre fichier sorted_belgian_communes.py doit au moins contenir les fonctions :

verify_order(communes)
coordinate(commune,all_communes)
distance(commune1, commune2, all_communes)
tour_distance(communes, all_communes)
You cannot see this exercise because you are currently not logged in. Click here to log in or get a direct access to the exercice on INGInious by following this link.

Page précédente Page suivante