# obtention des données
f = open('matrice',"r")
lignes = f.readlines()
f.close()
# définition d'une matrice vide
NL = len(lignes)
NC = len(lignes[0])
if NL>1:
NC = NC-1
print 'N_Lignes =',NL,' N_Colonnes =',NC
m = {}
for i in range(1,NL+1):
m[i] = {}
# remplissage de la matrice
for i in range(1,NL+1):
for j in range(1,NC+1):
m[i][j] = int(lignes[i-1][j-1])
# affichage de la matrice remplie
print '\nMatrice créée:'
for i in range(1,NL+1):
for j in range(1,NC+1):
print m[i][j],
print ''
print ''
lignes est une liste des lignes présentes dans le fichier 'matrice'
NL = len(lignes) la longueur de la liste correspond au nombre d'éléments de la liste
NC = len(lignes[0]) le nombre de caractères de la première ligne (numérotée 0) est le nombre de colonnes à condition que toutes les lignes du fichier aient le même nombre de caractères
if NL>1: NC = NC-1 Il faut soustraire 1 à la longueur de la ligne pour tenir compte de la présence du signe de retour à la ligne (la plupart du temps invisible), car readlines() lit tous les caractères y compris celui de retour à la ligne. Pour voir le signe de retour à la ligne (qui est noté \n), il faut faire print lignes. Mais ceci n'est vrai que s'il n'y a pas qu'une seule ligne dans le fichier, sinon lignes ne comporte qu'une seule ligne sans le signe de retour à la ligne à la fin.
m = {} crée un dictionnaire vide
for i in range(1,NL+1): m[i] = {} définit NL éléments pour le dictionnaire m et les définit comme étant eux même des dictionnaires.
À ce stade, m est donc un dictionnaire de NL dictionnaires, ces derniers étant de longueurs encore indéfinies.
m[i][j] = int(lignes[i-1][j-1])
La numérotation des lignes et des colonnes de la matrice commence à 1, tandis que le premier élément de la liste 'lignes' est numéroté 0 et que le premier caractère de chaque ligne est numéroté 0.
-----------------------------
Il serait aussi possible de définir la matrice comme un dictionnaire de listes.
dicli = {}
for i in range(1,NL+1):
dicli[i] = []
for i in range(1,NL+1):
for j in range(1,NC+1):
dicli[i].append(int(lignes[i-1][j-1]))
print '\nMatrice dict de listes'
for i in range(1,NL+1):
for j in range(1,NC+1):
print dicli[i][j-1],
print ''
Mais le remplacement d'un élément d'une telle matrice serait compliqué par le fait qu'on ne peut pas facilement insérer ou remplacer un élément à une position donnée dans une liste. Un dictionnaire de dictionnaire est le mieux je pense.
Le code que vous avez posté est vraiment interaissant mais ça m'a généré une erreur à la ligne:
m[i][j] = int(lignes[i-1][j-1])
-->"invalid literal for int() with base 10:'a'"
cette erreur m'a apparu non seulement avec votre code mais aussi à chaque fois que j'utilise j i et leur boucle
J'ai ajouté import numpy-----> "No module named numpy"
Q'est ce que je dois faire. C'est très important.
Quelle est la format de votre fichier .txt
Merci
vous essayez de convertir la lettre 'a' en nombre.
Je présume que ce 'a' est présent dans votre fichier.