Graphique

Retrouver tous les sujets résolus.
Invité

Re: Graphique

Message par Invité » sam. 18 janv. 2020 19:51

Merci pour votre réponse.

Et comment construire un code permettant de dire si deux lignes sont reliées entre elles ?

En gros j'ai pour chaque ligne SNCF une liste qui contient toutes les gares qui appartiennent à cette ligne.

Je veux comparer toutes ces listes entre elles (il y en a 50), pour savoir quelles lignes ont telles gares en commun.

Comment construire un tel programme ?

Là je suis vraiment bloqué alors que j'en ai parlé hier vendredi matin à mon prof...
sos-math(21)
Messages : 7992
Enregistré le : lun. 30 août 2010 11:15

Re: Graphique

Message par sos-math(21) » lun. 20 janv. 2020 20:35

Bonjour,
normalement, le code que je t'ai proposé gère cela car il ajoute à chaque gare les autres gares qui appartiennent à une même ligne qu'elle.
Relis le code pour vérifier qu'il fait bien ce que l'on souhaite et teste-le sur des exemples.
Bonne continuation
jean

Re: Graphique

Message par jean » mer. 5 févr. 2020 16:01

Bonjour,
J'arrive un peu tard.
Avez vous le droit d'utiliser networkx https://networkx.github.io/ pour construire le graphe? L'algo du plus court chemin y est disponible (pour vérification)

Sinon avec un dictionnaire on on peut construire une graphe (ici non pondéré):

Code : Tout sélectionner

graphe_non_pond = {'A':set(['C','D']), 'B':set(['A','C']), 'C':set(['A','B']), 'D':set(['A'])}
sommets = set(graphe_non_pond.keys())
print('les sommets du graphe sont:',sommets)
print('les arrêtes du graphes sont:')
for origine in sommets:
    for destination in graphe_non_pond[origine]:
        print(origine, destination)

print('D relié à B?','D' in graphe_non_pond['B'])
print('D relié à A?','D' in graphe_non_pond['A'])
sos-math(21)
Messages : 7992
Enregistré le : lun. 30 août 2010 11:15

Re: Graphique

Message par sos-math(21) » mer. 5 févr. 2020 17:31

Bonjour,
effectivement, le module networkx permet de construire des graphes mais je ne sais pas si cela correspond au projet.
Bonne continuation
Invité

Re: Graphique

Message par Invité » mer. 5 févr. 2020 22:41

Non ce n'est pas trop tard !

Là je suis encore en galère dessus...

Est-ce que SoS vous êtes là ce soir ?
sos-math(21)
Messages : 7992
Enregistré le : lun. 30 août 2010 11:15

Re: Graphique

Message par sos-math(21) » jeu. 6 févr. 2020 09:41

Bonjour,
quelle est votre question ?
Invité

Re: Graphique

Message par Invité » jeu. 13 févr. 2020 21:44

Bonsoir,

Désolé de ne revenir que maintenant.

Je serai en vacances vendredi soir (donc demain) et mon prof m'a dit de beaucoup avancer ce projet pendant les vacances. Il a donné plus de temps que prévu...

Mais la solution dont on avait parlé (le dictionnaire) ne lui convient pas ! J'ai pourtant essayé de le convaincre, mais je n'ai pas réussi... J'en suis vraiment désolé, mais au moins j'ai beaucoup appris sur les dictionnaires.

J'ai donc désormais plusieurs fichiers CSV : chacun contient la liste des gares d'une ligne SNCF, en partant d'un terminus, vers un autre (dans le sens de succession sur la ligne).

Maintenant, je dois me débrouiller avec ça pour appliquer un algorithme de Dijkstra. La première étape est donc de déterminer toutes les gares qui permettent une correspondance, et de préciser avec quelle ligne la correspondance est possible.

Mais comment faire ceci en Python ? Avec l'outil "intersection" (set) de Python ? Mais je n'ai réussi à écrire aucun programme qui fonctionne avec... Alors quoi faire ?

Merci beaucoup par avance pour votre aide.
sos-math(21)
Messages : 7992
Enregistré le : lun. 30 août 2010 11:15

Re: Graphique

Message par sos-math(21) » ven. 14 févr. 2020 06:52

Bonjour
Pourquoi est ce que la solution avec dictionnaire ne lui convient pas ?
Il s’agit d’un projet avec prise d’initiative ou non ?
Je pense que tu peux toujours t’en sortir par une liste de tuples mais c’est moins évident car il n’y a plus le côté associatif du dictionnaire.
Si tu veux croiser les deux fichiers, je pense qu’il faut que tu fasses un double parcours (avec des boucles) pour enregistrer les points communs aux deux fichiers.
Mais je ne peux pas t’en dire plus car il faut y passer un temps conséquent que je n’ai pas pour l’instant
Si tu as des questions, tu peux les poser à ton professeur, il a l’air de savoir ce qu’il veut...:)
Bonne continuation
Invité

Re: Graphique

Message par Invité » ven. 14 févr. 2020 20:26

Merci pour votre réponse.

Voyez-vous simplement un moyen en Python pour déterminer l'intersection de listes ?

Encore merci et bon WE.
sos-math(21)
Messages : 7992
Enregistré le : lun. 30 août 2010 11:15

Re: Graphique

Message par sos-math(21) » ven. 14 févr. 2020 21:24

Bonsoir,
Tu peux traduire la situation par une liste en compréhension :

Code : Tout sélectionner

 Intersection = [element for element in liste1 if element in liste2]
Ce qui peut aussi se faire par une boucle qui parcourt liste1 et teste pour chaque élément son appartenance à liste2.
Bonne continuation
Invité

Re: Graphique

Message par Invité » sam. 15 févr. 2020 12:57

Ok, je vais essayer avec tout ça !

Est-ce que vous serez connecté(e) cet après-midi si j'ai des questions ? :)

Merci de m'aider !!
sos-math(21)
Messages : 7992
Enregistré le : lun. 30 août 2010 11:15

Re: Graphique

Message par sos-math(21) » sam. 15 févr. 2020 14:51

Bonjour,
je ne suis pas sûr d'être connecté toute la soirée mais je pourrai te répondre demain matin si jamais une question te vient à l'esprit.
Bonne continuation
Invité

Re: Graphique

Message par Invité » sam. 15 févr. 2020 16:38

Merci beaucoup !

Je viens de recevoir un mail de mon professeur.
Il m'a dit que, finalement, il accepte que j'utilise le dictionnaire, mais uniquement si je comprends parfaitement bien le code.

Je dois donc lui montrer que j'ai bien compris le principe, en créant le dictionnaire dont on avait parlé pour chaque gare, dans le cas d'un modèle réduit : deux lignes : L1=["A","B","C"] et L2=["B","D","E"]. Il m'impose de manipuler la liste L=[["A","B","C"],["B","D","E"]].
L[0] est donc la liste des stations de la ligne 1...

A partir de cette liste L, je dois donc construire les dictionnaires pour chaque gare. Ensuite, seulement, si j'ai bien compris cela, il m'autorise à généraliser... Désolé pour vous, mais sachez que j'apprécie énormément votre aide, qui m'est extrêmement bénéfique.

Donc, construisons ces dictionnaires pour chaque gare A, B, C, D et E à partir de la liste L.

Code : Tout sélectionner

dic={}
for i in range (len(L)):
    for j in range (len(L[i])):
        station=L[i][j]
Avec ça, on a donc, la liste des stations, non ? Comment continuer pour avoir les dictionnaires attendus ?

Merci encore !!!
sos-math(21)
Messages : 7992
Enregistré le : lun. 30 août 2010 11:15

Re: Graphique

Message par sos-math(21) » sam. 15 févr. 2020 17:08

Bonjour,
je ne comprends pas trop ton message : si ton professeur t'autorise à utiliser les dictionnaires, alors tu peux utiliser tout ce qu'on a fait auparavant, non ?
De quoi as-tu besoin désormais ? J'avoue que j'ai du mal à te suivre et je ne perçois plus vraiment ce que tu attends : tu as l'avantage d'être "dans ton truc" alors que, moi, je m'y mets une fois toutes les deux semaines donc c'est difficile de cerner tes besoins.
Je peux t'aider sur le code mais il faut que ta demande soit très précise....
Pour ton code, cela ne donne pas grand chose, puisque tu affectes successivement tes éléments de L à une même variable station.
Si tu veux que cela soit mis dans un dictionnaire, il faut associer une clé à chaque valeur de la liste, par exemple comme un système de coordonnées, les clés étant ici des tuples dépendant des rangs i et j :

Code : Tout sélectionner

L=[["A","B","C","D"], ["A", "B", "E"],["C","D", "F", "G"]]
dic={}
for i in range (len(L)):
    for j in range (len(L[i])):
        dic[(i,j)]=L[i][j]
qui remplit le dictionnaire dic ainsi :

Code : Tout sélectionner

>>> dic
{(0, 0): 'A', (0, 1): 'B', (0, 2): 'C', (0, 3): 'D', (1, 0): 'A', (1, 1): 'B', (1, 2): 'E', (2, 0): 'C', (2, 1): 'D', (2, 2): 'F', (2, 3): 'G'}
Bonne continuation
Invité

Re: Graphique

Message par Invité » sam. 15 févr. 2020 17:17

Oui, je comprends que cela ne doit pas être évident pour vous...

En fait, ce que je dois montrer à mon prof est que j'ai bien compris l'utilisation des dictionnaires dans le programme que vous m'aviez proposé dernièrement. Et après réflexion, je ne suis pas sûr de bien l'avoir compris...

Donc je dois montrer à mon prof comment construire, pour chaque gare A, B, C, D et E, un dictionnaire avec en entrée la gare, et en valeur associée la liste des gares sur la même ligne ainsi que les distances les séparant de la station de départ (terminus). (Comme ce que vous m'aviez suggéré en décembre.)

Est-ce que le programme que vous m'aviez proposé fonctionne pour la liste L=[["A","B","C"],["B","D","E"]], avec L[0] qui est donc la liste des stations de la ligne 1 ?

J'espère que ma question est plus claire...