PYTINERIS!

VladislavIV Messages postés 16 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 1 mai 2007 - 16 avril 2007 à 11:32
colpompidou Messages postés 3 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 1 novembre 2010 - 1 nov. 2010 à 15:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42180-pytineris

colpompidou Messages postés 3 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 1 novembre 2010
1 nov. 2010 à 15:08
Je ne travaillerai plus sur cette source. Toutefois, je serais heureux de répondre aux questions de ceux qui souhaitent l'améliorer, notamment en ce qui concerne l'interface graphique (restée assez rudimentaire).
aera group Messages postés 382 Date d'inscription mercredi 23 août 2006 Statut Membre Dernière intervention 8 novembre 2010 18
1 nov. 2010 à 10:17
Je gros problème de cette source est sont interface graphique qui je pense limite les possibilité.
Je ne sais pas si cette source est toujours en développement (ca pourrais être un beau projet pour PythonFrance), mais je ne saurais trop conseiller à l'auteur d'oublier vite fait Tk et de passer à quelques chose de plus professionnel du genre WxPython ou Qt ...

Je ne sais pas si cela existe un fichier contenant toutes les routes de France ainsi que les villes. Voila qui pourrait être intéressant il suffirez de le lire et de l'enregistrer sous notre format (conversion des coordonnée - sans doute au forma GPS - mise en forme des infos etc ...)

Ensuite c'est juste de l'interface ...
saigneurdushi Messages postés 45 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 25 janvier 2011
1 nov. 2010 à 01:16
Est il possible de mettre un poids différent sur les portions de chemin entre deux villes ?
Gérez par exemple une distance différente entre un aller et le retour suivant les modification des poids qui ont été opperer lors du voyage ?
En tout cas merci :-)
colpompidou Messages postés 3 Date d'inscription samedi 5 juin 2004 Statut Membre Dernière intervention 1 novembre 2010
23 juin 2007 à 17:07
VladislavIV : l'avantage du return, c'est qu'il coupe la boucle while. Ainsi, la boucle for suivant la condition et qui ajoute au tas les villes voisines (liées par une route) n'aura pas à être exécutée inutilement. La fonction est donc plus rapide.
Je vais réfléchir à l'implémentation du zoom. Mais je ne sais pas comment l'intégrer à l'interface graphique ... je suis impatient de voir vos conseils.
VladislavIV Messages postés 16 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 1 mai 2007
2 mai 2007 à 22:26
Ouiii... enfin, ne poussons pas le vice trop loin ! :D Mais c'est vrai qu'en donnant comme valeur à chaque arc, les Km de routes qui séparent les deux villes, on peut trouver le parcours minimal en Km pour aller d'une ville donnée à une autre.
Ca ne devrait pas être trop dur à faire, vu ce qu'il y a déjà !
cs_DoudouBidou Messages postés 102 Date d'inscription jeudi 29 mai 2003 Statut Membre Dernière intervention 23 juin 2008 5
2 mai 2007 à 18:49
pas mal c'est un bon début,
reste plus qu'à implanter les vrais routes et à ajouter une fonction de zoom ;)
aera group Messages postés 382 Date d'inscription mercredi 23 août 2006 Statut Membre Dernière intervention 8 novembre 2010 18
2 mai 2007 à 12:09
Pas mal, je note 10. Bon courrage pour la suite
VladislavIV Messages postés 16 Date d'inscription vendredi 18 novembre 2005 Statut Membre Dernière intervention 1 mai 2007
16 avril 2007 à 11:32
Je n'ai pas pu tester le code (pas installé PIL), mais je te propose ceci pour la méthode pluscourtchemin, de la classe Itineraire (modifications signalées par #<----):

def pluscourtchemin(self, G, start, end):
def flatten(L): # Flatten linked list of form [0,[1,[2,[]]]]
while len(L) > 0:
yield L[0]
L = L[1]
q = [(0, start, ())] # Heap of (cost, path_head, path_rest).
visited = set() # Visited vertices.
res = False #<----
fin = False #<----
while not fin: #<----
(cost, v1, path) = heappop(q)
if v1 not in visited:
visited.add(v1)
if v1 == end:
res = list(flatten(path))[::-1] + [v1] #<----
fin = True #<----
path = (v1, path)
for (v2, cost2) in G[v1].iteritems():
if v2 not in visited:
heappush(q, (cost + cost2, v2, path))
return res #<----


Pour être "propre", une fonction ne doit avoir qu'un seul point de sortie (return), et cela doit être sa dernière instruction. Visualise l'exécution comme un fluide qui sécoule du début à la fin de ta fonction : il n'y a qu'une entrée, il n'y a qu'une sortie. Entre les deux, le traitement. Il faut éviter de mettre des sorties n'importe où au milieu, ou on prend le risque de ne pas contrôler le flux.

De plus, si on fait abstraction de ton "return" au milieu du code, ta boucle "while True:" est une boucle infinie. Il faut absolument éviter ça, ça ne t'apportera que des ennuis !

En espérant être utile ;)
A++
Rejoignez-nous