Format de variable
fab44_1419
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
D’après le programme suivant (Algorithme de Dijkstra de scènes de spectacle) qui lui fonctionne bien, je voudrais en effectuer le tracé avec matplotlib.
Quand je remplace la liste en ligne 58 par la ligne 59 le tracé s’effectue bien (indépendamment de Dijkstra) et bon affichage des coordonnées de scènes en lignes 92 à 95.
Je pense avoir un problème de format de variable en ligne 52 :
parcours_liste = format(s_explore[k][1])
Pourriez-vous m’aider.
Merci d’avance, Fab.
modération : Pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
D’après le programme suivant (Algorithme de Dijkstra de scènes de spectacle) qui lui fonctionne bien, je voudrais en effectuer le tracé avec matplotlib.
Quand je remplace la liste en ligne 58 par la ligne 59 le tracé s’effectue bien (indépendamment de Dijkstra) et bon affichage des coordonnées de scènes en lignes 92 à 95.
Je pense avoir un problème de format de variable en ligne 52 :
parcours_liste = format(s_explore[k][1])
Pourriez-vous m’aider.
Merci d’avance, Fab.
# -*- coding: utf-8 -*- """ le 25/02/2021. """ from matplotlib import pyplot as plt #---FONCTION QUI CALCULE TOUS LES PLUS COURTS CHEMINS DE LA SCENE DE DEPART A CHACUNE DES SCENES D'ARRIVEE (SOMMETS)------- def Dijkstra_Scenes(G, s): inf = sum(sum(G[sommet][i] for i in G[sommet]) for sommet in G) + 1 #On considère comme "infini" un majorant de la somme de toutes les pondérations du grapheScenes global s_explore global s_a_explorer s_explore = {s : [0, [s]]} #On associe au sommet_scene d'origine s la liste [longueur, plus court chemin] s_a_explorer = {j : [inf, ""] for j in G if j != s} #On associe à chaque sommet_scene j à explorer la liste [longueur, sommet précédent] for suivant in G[s]: s_a_explorer[suivant] = [G[s][suivant], s] print("Dans le grapheScene d\'origine {} dont les arcs_longueur sont :".format(s)) for k in G: print(k, ":", G[k]) print() #On créé une boucle qui tourne tant que la liste des sommets_scenes à explorer contient #des points tels que la distance provisoire calculée depuis l'origine est #inférieure à l'infini while s_a_explorer and any(s_a_explorer[k][0] < inf for k in s_a_explorer): s_min = min(s_a_explorer, key = s_a_explorer.get) longueur_s_min, precedent_s_min = s_a_explorer[s_min] for successeur in G[s_min]: if successeur in s_a_explorer: dist = longueur_s_min + G[s_min][successeur] if dist < s_a_explorer[successeur][0]: s_a_explorer[successeur] = [dist, s_min] s_explore[s_min] = [longueur_s_min, s_explore[precedent_s_min][1] + [s_min]] del s_a_explorer[s_min] return s_explore #---------------------FONCTION QUI DEMANDE LE DEPART ET L'ARRIVEE DU GRAPHE------------------ def depart_arrivee(M, depart, arrivee): Dijkstra_Scenes(M, depart) for k in s_explore: if arrivee == k: print("Le plus court chemin menant de {} à {} est {} ".format(depart, arrivee, s_explore[k][1])) print("Son poids en distance est égale à {} métres ".format(s_explore[k][0])) parcours_liste = format(s_explore[k][1]) print("c'est ici {}".format(parcours_liste)) #ListeScenesXo= ['mainstage02', 'mainstage01', 'warzone', 'altar', 'temple', 'valley'] ListeScenesXo= parcours_liste print("ListeScenesXo", ListeScenesXo) for index, value in enumerate(ListeScenesXo): if value == 'mainstage02': ListeScenesXo[index] = 0.5 if value =='mainstage01': ListeScenesXo[index] = 1.5 if value =='warzon': ListeScenesXo[index] = 3 if value =='alta': ListeScenesXo[index] = 4.5 if value =='templ': ListeScenesXo[index] = 5.5 if value =='valley': ListeScenesXo[index] = 7 #ListeScenesYo= ['mainstage02', 'mainstage01', 'warzone', 'altar', 'temple', 'valley'] ListeScenesYo= format(parcours_liste) print("ListeScenesYo", ListeScenesYo) for index, value in enumerate(ListeScenesYo): if value == 'mainstage02': ListeScenesYo[index] = 5.5 if value == 'mainstage01': ListeScenesYo[index] = 5.5 if value == 'warzone': ListeScenesYo[index] = 0.5 if value == 'altar': ListeScenesYo[index] = 7 if value == 'temple': ListeScenesYo[index] = 7 if value == 'valley': ListeScenesYo[index] = 6 xo= ListeScenesXo # x0 et y0 sont les coordonnées du trajet yo= ListeScenesYo print("liste des scènes à afficher en x", xo) print("liste des scènes à afficher en y", yo) #plt.scatter(x,y,c='blue',label='Scène x') #plt.legend() plt.title('Scènes de spectacles') plt.plot(xo,yo, "o-",color = "blue") plt.grid() plt.show() for k in s_a_explorer: if arrivee == k: print("Il n\'existe aucun chemin de {} à {}".format(depart, arrivee)) #-------------------------------------------PROGRAMME PRINCIPAL------------------------------ grapheScenes = { 'mainstage01':{'mainstage02':200, 'altar':680, 'warzone':1040}, 'mainstage02':{'mainstage01':200, 'altar':860, 'warzone':1120}, 'altar':{'mainstage01':680, 'mainstage02':860, 'temple':200, 'warzone':1320}, 'temple':{'altar':200, 'valley':360, 'warzone':1400}, 'valley':{'temple':360, 'warzone':1380}, 'warzone':{'mainstage01':1040, 'mainstage02':1120, 'altar':1320, 'temple':1400, 'valley':1380} } depart = input("Quelle est la scène de départ ? ") arrivee = input("Quelle est la scène de d'arrivée ? ") print() depart_arrivee(grapheScenes, depart, arrivee)
modération : Pour la mise en forme des sources, au dessus de la zone d'édition de tes messages, il y a des icônes pour l'enrichissement du texte. Celle qui a cet aspect
<> ▼permet d'appliquer au code, suivant une liste de valeurs, le format correspondant à sa nature, python dans le cas présent.
Un petit tuto là : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
A voir également:
- Format de variable
- Format epub - Guide
- Format factory - Télécharger - Conversion & Codecs
- Hp usb disk storage format tool - Télécharger - Stockage
- Format apfs - Guide
- Format bin - Guide
7 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
tu n'expliques pas comment tester ton programme, ni le résultat attendu, ni l'erreur obtenue.
ton explication "Quand je remplace la liste en ligne 58 par la ligne 59" n'est pas très claire.
tu n'expliques pas comment tester ton programme, ni le résultat attendu, ni l'erreur obtenue.
ton explication "Quand je remplace la liste en ligne 58 par la ligne 59" n'est pas très claire.
Bonjour,
Pour tester mon programme , après l'avoir lancé, il faut répondre aux questions posées Quelle est le scène de départ, puis la scène d'arrivée.
Par exemple valley puis mainstage01.
Le résultat attendu est le tracé du graphe des scènes.
Pour essayer le tracé sans l'Algorithme de Dijkstra il faut remplacer la ligne 59 par la 58.
Cdt, Fab
Pour tester mon programme , après l'avoir lancé, il faut répondre aux questions posées Quelle est le scène de départ, puis la scène d'arrivée.
Par exemple valley puis mainstage01.
Le résultat attendu est le tracé du graphe des scènes.
Pour essayer le tracé sans l'Algorithme de Dijkstra il faut remplacer la ligne 59 par la 58.
Cdt, Fab
Voici le programme avec la ligne remplacée 58 et 75
# -*- coding: utf-8 -*-
"""
le 25/02/2021.
"""
from matplotlib import pyplot as plt
#---FONCTION QUI CALCULE TOUS LES PLUS COURTS CHEMINS DE LA SCENE DE DEPART A CHACUNE DES SCENES D'ARRIVEE (SOMMETS)-------
def Dijkstra_Scenes(G, s):
inf = sum(sum(G[sommet][i] for i in G[sommet]) for sommet in G) + 1
#On considère comme "infini" un majorant de la somme de toutes les pondérations du grapheScenes
global s_explore
global s_a_explorer
s_explore = {s : [0, [s]]}
#On associe au sommet_scene d'origine s la liste [longueur, plus court chemin]
s_a_explorer = {j : [inf, ""] for j in G if j != s}
#On associe à chaque sommet_scene j à explorer la liste [longueur, sommet précédent]
for suivant in G[s]:
s_a_explorer[suivant] = [G[s][suivant], s]
print("Dans le grapheScene d\'origine {} dont les arcs_longueur sont :".format(s))
for k in G:
print(k, ":", G[k])
print()
#On créé une boucle qui tourne tant que la liste des sommets_scenes à explorer contient
#des points tels que la distance provisoire calculée depuis l'origine est
#inférieure à l'infini
while s_a_explorer and any(s_a_explorer[k][0] < inf for k in s_a_explorer):
s_min = min(s_a_explorer, key = s_a_explorer.get)
longueur_s_min, precedent_s_min = s_a_explorer[s_min]
for successeur in G[s_min]:
if successeur in s_a_explorer:
dist = longueur_s_min + G[s_min][successeur]
if dist < s_a_explorer[successeur][0]:
s_a_explorer[successeur] = [dist, s_min]
s_explore[s_min] = [longueur_s_min, s_explore[precedent_s_min][1] + [s_min]]
del s_a_explorer[s_min]
return s_explore
#---------------------FONCTION QUI DEMANDE LE DEPART ET L'ARRIVEE DU GRAPHE------------------
def depart_arrivee(M, depart, arrivee):
Dijkstra_Scenes(M, depart)
for k in s_explore:
if arrivee == k:
print("Le plus court chemin menant de {} à {} est {} ".format(depart, arrivee, s_explore[k][1]))
print("Son poids en distance est égale à {} métres ".format(s_explore[k][0]))
parcours_liste = format(s_explore[k][1])
print("c'est ici {}".format(parcours_liste))
ListeScenesXo= ['mainstage02', 'mainstage01', 'warzone', 'altar', 'temple', 'valley']
#ListeScenesXo= parcours_liste
print("ListeScenesXo", ListeScenesXo)
for index, value in enumerate(ListeScenesXo):
if value == 'mainstage02':
ListeScenesXo[index] = 0.5
if value =='mainstage01':
ListeScenesXo[index] = 1.5
if value =='warzon':
ListeScenesXo[index] = 3
if value =='alta':
ListeScenesXo[index] = 4.5
if value =='templ':
ListeScenesXo[index] = 5.5
if value =='valley':
ListeScenesXo[index] = 7
ListeScenesYo= ['mainstage02', 'mainstage01', 'warzone', 'altar', 'temple', 'valley']
#ListeScenesYo= format(parcours_liste)
print("ListeScenesYo", ListeScenesYo)
for index, value in enumerate(ListeScenesYo):
if value == 'mainstage02':
ListeScenesYo[index] = 5.5
if value == 'mainstage01':
ListeScenesYo[index] = 5.5
if value == 'warzone':
ListeScenesYo[index] = 0.5
if value == 'altar':
ListeScenesYo[index] = 7
if value == 'temple':
ListeScenesYo[index] = 7
if value == 'valley':
ListeScenesYo[index] = 6
xo= ListeScenesXo # x0 et y0 sont les coordonnées du trajet
yo= ListeScenesYo
print("liste des scènes à afficher en x", xo)
print("liste des scènes à afficher en y", yo)
#plt.scatter(x,y,c='blue',label='Scène x')
#plt.legend()
plt.title('Scènes de spectacles')
plt.plot(xo,yo, "o-",color = "blue")
plt.grid()
plt.show()
for k in s_a_explorer:
if arrivee == k:
print("Il n\'existe aucun chemin de {} à {}".format(depart, arrivee))
#-------------------------------------------PROGRAMME PRINCIPAL------------------------------
grapheScenes = {
'mainstage01':{'mainstage02':200, 'altar':680, 'warzone':1040},
'mainstage02':{'mainstage01':200, 'altar':860, 'warzone':1120},
'altar':{'mainstage01':680, 'mainstage02':860, 'temple':200, 'warzone':1320},
'temple':{'altar':200, 'valley':360, 'warzone':1400},
'valley':{'temple':360, 'warzone':1380},
'warzone':{'mainstage01':1040, 'mainstage02':1120, 'altar':1320, 'temple':1400, 'valley':1380}
}
depart = input("Quelle est la scène de départ ? ")
arrivee = input("Quelle est la scène de d'arrivée ? ")
print()
depart_arrivee(grapheScenes, depart, arrivee)
peux-tu préciser "python" quand tu utilises les balises de code? https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tu me demandes la version de python : 3
En ce qui concerne ce qui ne fonctionne pas (dans la fonction def depart_arrivee(M, depart, arrivee) :Dijkstra_Scenes(M, depart))
- Quand je remplace ListeScenesXo= parcours_liste
par
ListeScenesXo= ['mainstage02', 'mainstage01', 'warzone', 'altar', 'temple', 'valley']
et
ListeScenesYo= format(parcours_liste)
par
ListeScenesYo= ['mainstage02', 'mainstage01', 'warzone', 'altar', 'temple', 'valley']
le tracé se dessine bien par j’impose en liste de scènes.
- quand je remets ce qui doit être : ListeScenesXo= parcours_liste
et ListeScenesYo= format(parcours_liste)
le dassin est un point.
L’erreur vient de la variable « parcours_liste »
- On peut le vérifier par
print("liste des scènes à afficher en x", xo)
print("liste des scènes à afficher en y", yo)
qui devraient afficher une liste de coordonnées et non une liste de noms de scènes.
En ce qui concerne ce qui ne fonctionne pas (dans la fonction def depart_arrivee(M, depart, arrivee) :Dijkstra_Scenes(M, depart))
- Quand je remplace ListeScenesXo= parcours_liste
par
ListeScenesXo= ['mainstage02', 'mainstage01', 'warzone', 'altar', 'temple', 'valley']
et
ListeScenesYo= format(parcours_liste)
par
ListeScenesYo= ['mainstage02', 'mainstage01', 'warzone', 'altar', 'temple', 'valley']
le tracé se dessine bien par j’impose en liste de scènes.
- quand je remets ce qui doit être : ListeScenesXo= parcours_liste
et ListeScenesYo= format(parcours_liste)
le dassin est un point.
L’erreur vient de la variable « parcours_liste »
- On peut le vérifier par
print("liste des scènes à afficher en x", xo)
print("liste des scènes à afficher en y", yo)
qui devraient afficher une liste de coordonnées et non une liste de noms de scènes.
en bien, il t'a fallu du temps pour expliquer que xo et yo devraient afficher une liste de coordonnées et non une liste de noms de scènes!
tu as deux versions de ton programme, celle que tu as partagé la première fois, et celle que tu as partagé la seconde fois.
quelle version te pose problème?
as-tu écrit ce programme? en comprends-tu le fonctionnement?
tu as deux versions de ton programme, celle que tu as partagé la première fois, et celle que tu as partagé la seconde fois.
quelle version te pose problème?
as-tu écrit ce programme? en comprends-tu le fonctionnement?
oui c'est moi qui l'est écrit.
j'ai essayé de sortir les données correspondantes à la liste des scènes.
et J'arrive bien à les afficher avec
print("Le plus court chemin menant de {} à {} est {} ".format(depart, arrivee, s_explore[k][1])
mais apparemment pas à les mettre dans la variable parcours_liste
parcours_liste = format(s_explore[k][1]) ne fonctionne pas.
Je ne sais pas comment m’y prendre.
Aurais-tu une idée?
Merci d'avance, Fab44_1419
j'ai essayé de sortir les données correspondantes à la liste des scènes.
et J'arrive bien à les afficher avec
print("Le plus court chemin menant de {} à {} est {} ".format(depart, arrivee, s_explore[k][1])
mais apparemment pas à les mettre dans la variable parcours_liste
parcours_liste = format(s_explore[k][1]) ne fonctionne pas.
Je ne sais pas comment m’y prendre.
Aurais-tu une idée?
Merci d'avance, Fab44_1419
... et maitriser les balises de code:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :
def test(): print('test') test()