David M. Synck wrote: >Hi all, > >I am fairly new to Python and trying to figure out a syntax error >concerning lists and iteration through the same. What I am trying to do is >sum a list of float values and store the sum in a variable for use later. > >The relevant code looks like this - > >def getCredits(): > > """ This function asks the user to input any credits not shown on their > bank statement > > It returns the sum(converted to float) of the entered credits """ > > global credits > credlist = [] > credits = 0.0 > temp = 0.0 > print "Now you need to enter any credits not shown on your bank statement > \n" > print "Please enter a zero (0) once all credits have been entered \n" > raw_input("Hit 'Enter' to continue \n") > temp = float(raw_input("Please enter the first credit \n")) > > while temp != 0: > credlist.append(temp) > temp = float(raw_input("Please enter the next credit \n")) > > i = 0 > for i in credlist: > credits += credlist[i] > i = i + 1 > > return credits > >And the syntax error I get is this - > >Traceback (most recent call last): > File "./BankReconciler_Rev1.py", line 129, in ? > main() > File "./BankReconciler_Rev1.py", line 116, in main > getCredits() > File "./BankReconciler_Rev1.py", line 60, in getCredits > credits += credlist[i] >TypeError: list indices must be integers > > >If anyone can point me in the right direction, I would greatly appreciate >it. > >Thanks in advance > > Your problem is here:
i = 0 for i in credlist: credits += credlist[i] i = i + 1 In the for loop, i is successively bound to each element in credlist (which are floats) and you then try to index credlist with each element in turn: you can't index lists with floats, so you get an error. Try inserting a print command just before the credits expression, and you'll see what I mean: i = 0 for i in credlist: print i credits += credlist[i] i = i + 1 What you probably mean is: credits = 0.0 for i in credlist: credits += i However, you should really use: credits = sum(credlist) It's far faster and more "pythonic". NOTE: Although it may be easy to think of Python lists as arrays, they're more than that. The Python for loop moves through a list, binding (think assigning) the loop variable (in this case "i") to each *element* of the list at a time on successive iterations, viz: >>> for i in ["apples","oranges","grapes","pears","tomatoes"]: ... print i apples oranges grapes pears tomatoes >>> Hope that helps ;-) -andyj -- http://mail.python.org/mailman/listinfo/python-list