Problème dans changement de variables [Résolu]

Signaler
-
yg_be
Messages postés
10172
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2020
-
Bonjour,

je fais un programme pour résoudre un Rubik's cube (juste pour le défi), et j'ai un problème que j'ai réussi à isoler :

elif couleur == "c":
          temporaire = cf
          cf[0] = bc[1]
          cf[1] = bc[0]
          bc = ac
          ac[0] = cd[1]
         ac[1] = cd[0]
         cd = temporaire


en gros, cf, bc, ac et cd sont des listes à deux items, et pour les changer entre elles particulièrement, j'utilise une variable temporaire. Mais ça ne fonctionne pas ! C'est quand j'affiche cd que je vois une erreur, car c'est cd qui prend la valeur de la variable temporaire. Si quelqu'un pourrait m'aider, merci beaucoup.
(l'indentation est bonne)
Configuration: Macintosh / Safari 12.1.1

4 réponses

Désolé pour les balises de codes, je ne savais pas... J'ai trouvé d'où venait le problème, mais n'ai aucune idée de pourquoi le programme réagit comme ça :

Quand j'écrit ça, tout fonctionne bien, ab devient ["c", "d"] et cd devient ["a", "b"] :


ab = ["a", "b"]
cd = ["c", "d"]
temporaire = ["x", "y"]

temporaire = ab
ab = cd
cd = temporaire

print(ab)
print(cd)




Par contre, quand je précise quels élément de la liste doivent changer, ab devient ["d", "c"] (normal), mais cd devient aussi ["d", "c"] :


ab = ["a", "b"]
cd = ["c", "d"]
temporaire = ["x", "y"]

temporaire = ab
ab[0] = cd[1]
ab[1] = cd[0]
cd = temporaire

print(ab)
print(cd)



J'ai donc suivi temporaire, et j'ai vu que temporaire change exactement comme ab, donc au passage de ab[0] = cd[1], temporaire[0] devient aussi cd[1], et au passage de ab[1] = cd[0], temporaire[1] devient aussi cd[0].

J'espère que quelqu'un a la solution...
yg_be
Messages postés
10172
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2020
573
Messages postés
10172
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2020
573
bonjour, tu n'expliques pas ce que tu attends précisément de ton code. crois-tu que nous pouvons le deviner en analysant ton code?
d'autant plus que tu ne montres qu'une partie de ton code.
ce serait probablement préférable de donner un exemple complet, en montrant le résultat que tu obtiens et le résultat que tu attends. n'hésite pas à prendre le temps de construire un exemple court et clair. n'hésite pas non plus à ajouter des print() pour montrer où la réalité diverge de tes attentes.
si c'est la valeur de temporaire qui te surprend, pourquoi ne pas faire
print(temporaire)
après chaque instruction?
Pour remettre ça au clair, voici un code un peu simplifié de ce que j'ai fait :

ab = ["a", "b"]
bc = ["b", "c"]
cd = ["c", "d"]
de = ["d", "e"]

temporaire = ["x", "y"]

temporaire = ab
print(temporaire)
ab[0] = bc[1]
ab[1] = bc[0]
print(ab)
bc = cd
print(bc)
cd[0] = de[1]
cd[1] = de[0]
print(cd)
de = temporaire
print(de)

Ensuite, toutes les listes s'affichent bien avec les valeurs que j'attends, sauf la dernière, qui affiche ["c", "b"]. En fait, la liste qui vaut ["c", "b"] est la liste ab (une fois changée). Je me rend compte qu'il est écrit plus haut dans le code temporaire = ab, puis plus bas de = temporaire. Donc de pourrait prendre temporaire comme valeur mais normalement celle-ci a été changée AVANT que ab ne change. Donc je trouve que ce n'est pas normal, ou alors j'ai raté quelque chose... Merci de votre aide
yg_be
Messages postés
10172
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2020
573
si c'est la valeur de temporaire qui te surprend, pourquoi ne pas faire print(temporaire) après chaque instruction?
cela t'aidera à comprendre ce que fait ton programme, et à découvrir par toi-même ce que tu as raté.
merci, aussi, d'utiliser les balises de code quand tu postes du code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Merci beaucoup !
yg_be
Messages postés
10172
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2020
573
peux-tu marquer le sujet comme résolu?