Je fais ma première classe python. J'ai un problème avec la variable pointsK. C'est un tableau à deux indices k et j. Je ne sais pas comment le remplir au fur et à mesure. En fait je suis un peu perdu par le fait qu'il ne soit pas déclaré. En Fortran ou en C j'aurais donné ses dimensions mais là ça plante avec le code "list assignment index out of range" sur la ligne où je fais :
pointsK[k] = list()
# -*-coding:utf-8 -*
class Bandes(object):
""" Classes definissant les bandes d'énergie :
* nomFichier = fichier VASP de type EIGENVAL contenant les bandes
"""
# constructeur de la classe
def __init__(self, fichier = "EIGENVAL") :
""" constructeur : initialise le nom du fichier contenant les bandes """
self.nomFichier = fichier
print("Bandes contenues dans le fichier : " + self.nomFichier )
def lecture(self) :
""" lecture des bandes """
# ouverture en lecture seule du fichier contenant les bandes
fBandes = open( self.nomFichier , "r" )
# lecture totale du fichier
allLignes = fBandes.readlines()
# enregistrement des bandes sur chaque pts k
k = -1
pointsK = list()
for i,ligne in enumerate(allLignes) :
if i <= 4 :
# header du fichier
continue
elif i == 5 :
# infos utiles ligne 6
elementsLigne = ligne.split()
Nelectrons = int( elementsLigne[0] )
nbrePointsK = int( elementsLigne[1] )
NBANDS = int( elementsLigne[2] )
print("nombre de points k : " + str(nbrePointsK) )
print("nombre de bandes : " + str(NBANDS) )
else :
if not ligne.strip() :
k += 1
pointsK[k] = list()
j = 0
continue
#energie = (ligne.split())[1]
#print(energie)
#pointsK[k][j]
j += 1
if j == 2 :
break
Pour l'exécution je fais :
python3
>>> from maclasse import *
>>> b = Bandes()
>>> b.lecture()
Perso quand j'initialise avec : liste=[None]*longueur
Si tu vas mettre des nombres dedans ensuite, ça peut être intéressant d'initialiser avec None. Comme ça si une case n'a pas été remplie, ça se voit tout de suite...
>>> import array
>>> tab=array.array('i',(0,)*longueur) i indique que tu déclares un tableau de int
Liste à plusieurs indices
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Blond, bouclé, toujours le sourire aux lèvres...