On Mon, 16 Sep 2013 16:33:35 -0700, William Bryant wrote: > Hey I am new to python so go easy, but I wanted to know how to make a > program that calculates the maen. > > List = [15, 6, 6, 7, 8, 9, 40] > def mean(): > global themean, thesum > for i in List: > thecount = List.count(i) > thesum = sum(List) > themean = thesum / thecount > > Why doesn't this work?
Let me start by saying that the above is not "best practice" for how to write functions, and I'll explain why later, but for now I'll just fix the problem with the calculation. You have List = [15, 6, 6, 7, 8, 9, 40] and then the mean function walks through each of the items 15, 6, 6, 7, ... counting how many times that item is found: for i in List: thecount = List.count(i) thesum = sum(List) So the first time, i gets the value 15, thecount calculates List.count(15) which is 1, thesum calculates sum(List) which is 91, and the end of the loop is reached. The second time around, i gets the value 6, then thecount calculates List.count(6) which is 2, thesum calculates sum(List) *again*, which is still 91, and the end of the loop is reached. Third time around, i gets the value 6 again, thecount again gets the value 2, thesum yet again sums up List which still hasn't changed, so yet again gets 91. And so on, and so on, until the last iteration, where i gets the value 40, thecount calculates List.count(40) which is 1, thesum re-calculates the sum yet again, still getting the exact same result 91, and finally the for-loop comes to an end. Now the final calculation occurs: themean = thesum/thecount which is 91/1 or just 91. What do you actually want? It's much simpler: you want to count the *total* number of items, 7, not by counting each item individually. The total number of items is given by the length of the list: len(List) returns 7. And you want to sum the list once, there's no need to sum it 7 times. So the first step is to get rid of the for-loop, just calculate thesum = sum(List) once, and thecount = len(List) once. Once you've done that, please write back with your new code, because I think there will be some more improvements to be made. -- Steven -- https://mail.python.org/mailman/listinfo/python-list