Format de variable

Fermé
fab44_1419 Messages postés 2 Date d'inscription jeudi 25 février 2021 Statut Membre Dernière intervention 25 février 2021 - Modifié le 25 févr. 2021 à 14:00
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 27 févr. 2021 à 08:48
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.

# -*- 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:

7 réponses

yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
Modifié le 25 févr. 2021 à 14:21
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.
0
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
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
25 févr. 2021 à 15:18
ce serait plus clair si tu montrais comment tu remplaces une ligne par une autre.
le programme que tu as partagé fonctionne bien.
quand je décommente la ligne 58 et commente la ligne 59, j'obtiens une erreur en ligne 100.
0
fab44_1419 Messages postés 2 Date d'inscription jeudi 25 février 2021 Statut Membre Dernière intervention 25 février 2021 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
25 févr. 2021 à 17:35
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)
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > fab44_1419 Messages postés 2 Date d'inscription jeudi 25 février 2021 Statut Membre Dernière intervention 25 février 2021
25 févr. 2021 à 18:01
peux-tu préciser "python" quand tu utilises les balises de code? https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > fab44_1419 Messages postés 2 Date d'inscription jeudi 25 février 2021 Statut Membre Dernière intervention 25 février 2021
25 févr. 2021 à 18:05
tu as donc partagé deux versions de ton programme. pourrais-tu maintenant leur donner un nom et expliquer le soucis?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
Modifié le 25 févr. 2021 à 18:58
ton programme affiche des informations. montre-nous quelles sont les informations incorrectes, et précise bien quelle version du programme tu utilises.
0
j'ai oublié de vous dire , que lorsqu'on laisse la ligne 58
le tracé n'est qu'un point
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
25 févr. 2021 à 17:55
tu n'as toujours pas expliqué le résultat attendu.
0
Bonjour
Le résultat attendu est le tracé du parcours des scènes (matplotlib).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
As tu réussi à faire fonctionner ce programme ?
0
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.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476
26 févr. 2021 à 12:02
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?
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
26 févr. 2021 à 12:20
pourquoi fais-tu
parcours_liste = format(s_explore[k][1])
?
quel est le but de cette instruction? que souhaites-tu avoir comme résultat dans
parcours_liste
?
0
Fab44_1419 > yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024
26 févr. 2021 à 16:31
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
0
Fab44_1419 > Fab44_1419
26 févr. 2021 à 17:03
Je n'avais pas vu ta requête...
C'est la première version qui pose problème.
0
yg_be Messages postés 22720 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 23 avril 2024 1 476 > Fab44_1419
26 févr. 2021 à 17:18
pourquoi utiliser format() dans
parcours_liste = format(s_explore[k][1])
?
sais-tu à quoi sert format()?
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
27 févr. 2021 à 08:48
... 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) :

def test():
    print('test')

test()
0