Problem with a for loop and a list

A

Alexnb

I am not sure what is going on here. Here is the code that is being run:

def getWords(self):
self.n=0
for entry in self.listBuffer:
self.wordList[self.n] = entry.get()
self.n=self.n+1

print self.wordList

This is the "listBuffer" that you see:

self.listBuffer=[self.e1, self.e2, self.e3, self.e4,
self.e5, self.e6, self.e7, self.e8,
self.e9, self.e10, self.e11,
self.e12, self.e13, self.e14]

(side note, those are all tkinter entry widgets, and the get() function gets
the text)

this is the error the interpreter is giving me when I run it:

self.getWords()
File "C:/Documents and Settings/Alex/My Documents/PYTHON/DictionaryApp/The
GUI.py", line 153, in getWords
self.wordList[self.n] = entry.get()
IndexError: list assignment index out of range

I have no idea what "list assignment index out of range means?!?!
 
P

Peter Otten

Alexnb said:
I am not sure what is going on here. Here is the code that is being run:

def getWords(self):
self.n=0

The value of self.n only makes sense within the method, so you better use
the local variable n instead of the instance attribute self.n
for entry in self.listBuffer:
self.wordList[self.n] = entry.get()
self.n=self.n+1

print self.wordList

This is the "listBuffer" that you see:

self.listBuffer=[self.e1, self.e2, self.e3, self.e4,
self.e5, self.e6, self.e7, self.e8,
self.e9, self.e10, self.e11,
self.e12, self.e13, self.e14]

(side note, those are all tkinter entry widgets, and the get() function
gets the text)

this is the error the interpreter is giving me when I run it:

self.getWords()
File "C:/Documents and Settings/Alex/My
Documents/PYTHON/DictionaryApp/The
GUI.py", line 153, in getWords
self.wordList[self.n] = entry.get()
IndexError: list assignment index out of range

I have no idea what "list assignment index out of range means?!?!

As Albert explained this means that wordList is shorter than listBuffer. The
most flexible remedy is to have wordList grow dynamically:

def getWords(self):
wordList = []
for entry in self.listBuffer:
wordList.append(entry.get())
print wordList

If for some reason you want to remember the values in wordList add

self.wordList = wordList

to the method (this is the same consideration as for self.n versus n).

Peter
 
B

Bruno Desthuilliers

Alexnb a écrit :
I am not sure what is going on here. Here is the code that is being run:

def getWords(self):
self.n=0
for entry in self.listBuffer:
self.wordList[self.n] = entry.get()
self.n=self.n+1
print self.wordList


def get_words(self):
self.word_list = [e.get() for e in self.list_buffer]

This is the "listBuffer" that you see:

self.listBuffer=[self.e1, self.e2, self.e3, self.e4,
self.e5, self.e6, self.e7, self.e8,
self.e9, self.e10, self.e11,
self.e12, self.e13, self.e14]

What a fantastic naming scheme. So easy to read, understand and
maintain. Congratulation, you just won the right to read "How to write
unmaintainable code":

http://mindprod.com/jgloss/unmain.html
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,579
Members
45,053
Latest member
BrodieSola

Latest Threads

Top