Matrice 2 dimension, probleme valeurs
Résolu
riad
-
Furansujean Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
Furansujean Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Matrice 2 dimension, probleme valeurs
- Supercopier 2 - Télécharger - Gestion de fichiers
- Dimension a5 - Guide
- Dimension bbox must - Accueil - Guide box et connexion Internet
- 2 ecran pc - Guide
- Faire 2 colonnes sur word - Guide
7 réponses
Bonjour
peux tu poster ton code en utilisant les balises de code, voir un petit tuto ici https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
peux tu poster ton code en utilisant les balises de code, voir un petit tuto ici https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Cele me donne un resultat que je n'attends pas :
d_d=0 d_c=0 x=8 y=4 print(x,y) print('rr',matrice_hauteur[7:9],d_c) for d_d in range(0,x): for d_c in range(0,y): matrice_hauteur[d_d][d_c]=A print(d_d,d_c) if d_c==y: break if d_d==x: break for d_d in range(0,10): for d_c in range(0,10): print(matrice_hauteur[d_d-d_c]) print(matrice_hauteur[0-9]) print(matrice_hauteur[1-9]) print(matrice_hauteur[2-9]) print(matrice_hauteur[3-9]) print(matrice_hauteur[4-9]) print(matrice_hauteur[5-9]) print(matrice_hauteur[6-9]) print(matrice_hauteur[7][0],matrice_hauteur[7][1], matrice_hauteur[7][2],matrice_hauteur[7][3], matrice_hauteur[7][4],matrice_hauteur[7][5], matrice_hauteur[7][6],matrice_hauteur[7][7], matrice_hauteur[7][8],matrice_hauteur[7][9]), print(matrice_hauteur[8][0],matrice_hauteur[8][1], matrice_hauteur[8][2],matrice_hauteur[8][3], matrice_hauteur[8][4],matrice_hauteur[8][5], matrice_hauteur[8][6],matrice_hauteur[8][7], matrice_hauteur[8][8],matrice_hauteur[8][9]), print(matrice_hauteur[9-9]) print(matrice_hauteur[8][4]) print(matrice_hauteur[8])
matrice_hauteur = [['-']*10]*10 matrice_largeur = [['-']*10]*10 d_d=0 d_c=0 x=8 y=4 print(x,y) print('rr',matrice_hauteur[7:9],d_c) for d_d in range(0,x): for d_c in range(0,y): matrice_hauteur[d_d][d_c]='A' print(d_d,d_c) if d_c==y: break if d_d==x: break for d_d in range(0,10): for d_c in range(0,10): print(matrice_hauteur[d_d-d_c]) print(matrice_hauteur[0-9]) print(matrice_hauteur[1-9]) print(matrice_hauteur[2-9]) print(matrice_hauteur[3-9]) print(matrice_hauteur[4-9]) print(matrice_hauteur[5-9]) print(matrice_hauteur[6-9]) print(matrice_hauteur[7][0],matrice_hauteur[7][1], matrice_hauteur[7][2],matrice_hauteur[7][3], matrice_hauteur[7][4],matrice_hauteur[7][5], matrice_hauteur[7][6],matrice_hauteur[7][7], matrice_hauteur[7][8],matrice_hauteur[7][9]), print(matrice_hauteur[8][0],matrice_hauteur[8][1], matrice_hauteur[8][2],matrice_hauteur[8][3], matrice_hauteur[8][4],matrice_hauteur[8][5], matrice_hauteur[8][6],matrice_hauteur[8][7], matrice_hauteur[8][8],matrice_hauteur[8][9]), print(matrice_hauteur[9-9]) print(matrice_hauteur[8][4]) print(matrice_hauteur[8])
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je ne suis pas spécialiste en Python, mais comme pour l'instant personne d'autre ne te réponds, voilà le début des mes "investigations".
J'ai modifié ton code, pour remplir la matrice de 1 à 100, en principe.
Au passage, ces lignes
Ensuite, avec une seconde itération de la matrice j'affiche tous les élèments.
Et là, "surprise" au lieu d'avoir des valeurs de 1 à 100, j'ai des successions de valeurs de 91 à 100.
Tu peux voir là https://www.onlinegdb.com/rJnJ3x9KI
Je ne connais pas la raison, et je dois passer à autre chose là maintenant, mais manifestement c'est dans l'initialisation qu'il y a un problème.
J'ai modifié ton code, pour remplir la matrice de 1 à 100, en principe.
Au passage, ces lignes
if d_c==y: break if d_d==x: breakne servent à rien puisque tes ranges commencent à 0 pour x ou y valeurs, elles ne les atteignent donc jamais.
Ensuite, avec une seconde itération de la matrice j'affiche tous les élèments.
matrice_hauteur = [['-']*10]*10 matrice_largeur = [['-']*10]*10 d_d=0 d_c=0 x=10 y=10 i = 1 print("init matrice") print("") for d_d in range(0,x): for d_c in range(0,y): matrice_hauteur[d_d][d_c]=i print("indices", d_d,d_c, ", i =", i, ", matrice_hauteur[d_d][d_c] =", matrice_hauteur[d_d][d_c]) i += 1 print("") print("Vérif matrice") print("") for d_d in range(0,x): for d_c in range(0,y): print("indices", d_d,d_c, ", matrice_hauteur[d_d][d_c] =", matrice_hauteur[d_d][d_c])
Et là, "surprise" au lieu d'avoir des valeurs de 1 à 100, j'ai des successions de valeurs de 91 à 100.
Tu peux voir là https://www.onlinegdb.com/rJnJ3x9KI
Je ne connais pas la raison, et je dois passer à autre chose là maintenant, mais manifestement c'est dans l'initialisation qu'il y a un problème.
Bonsoir,
Je t'explique pourquoi il ne faut pas faire l'initialisation que tu as faite, cela pose effectivement problème dans le cas où tu modifies ta matrice ensuite.
Explication
Je repars de ton initialisation, en créant une matrice M :
L'instruction ci-dessous permet d'afficher la matrice ligne par ligne
Ensuite, on modifie le premier élément en position (0,0)
Et là... patatras ! Toutes les lignes ont été modifiées...
Pourquoi donc ?
Eh bien, parce que chacune des lignes dans la matrice fait référence à une seule et même ligne. Donc si tu en modifies une, toutes les autres sont modifiées.
La preuve : elles ont le même identifiant :
Solution
Tout ça pour dire que tu dois changer ta manière d'initialiser la matrice.
Tu peux faire comme cela par exemple :
On constate, cette fois-ci, que les lignes de la matrice sont différentes (au sens identifiant de l'objet liste, même si leur contenu est le même) :
Et ça devrait être plus facile maintenant pour modifier la matrice.
Je t'explique pourquoi il ne faut pas faire l'initialisation que tu as faite, cela pose effectivement problème dans le cas où tu modifies ta matrice ensuite.
Explication
Je repars de ton initialisation, en créant une matrice M :
>>> M = [['-']*10]*10
L'instruction ci-dessous permet d'afficher la matrice ligne par ligne
>>> print("\n".join([str(ligne) for ligne in M])) ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-']
Ensuite, on modifie le premier élément en position (0,0)
>>> M[0][0] = 'A'
Et là... patatras ! Toutes les lignes ont été modifiées...
>>> print("\n".join([str(ligne) for ligne in M])) ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-']
Pourquoi donc ?
Eh bien, parce que chacune des lignes dans la matrice fait référence à une seule et même ligne. Donc si tu en modifies une, toutes les autres sont modifiées.
La preuve : elles ont le même identifiant :
>>> M[1] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] >>> id(M[1]) 140154560403784 >>> M[2] ['A', '-', '-', '-', '-', '-', '-', '-', '-', '-'] >>> id(M[2]) 140154560403784
Solution
Tout ça pour dire que tu dois changer ta manière d'initialiser la matrice.
Tu peux faire comme cela par exemple :
>>> M = [['-' for colonne in range(10)] for ligne in range(10)]
On constate, cette fois-ci, que les lignes de la matrice sont différentes (au sens identifiant de l'objet liste, même si leur contenu est le même) :
>>> id(M[0]) 140154560403720 >>> id(M[1]) 140154560404616
Et ça devrait être plus facile maintenant pour modifier la matrice.