"Alfred Canoy" <[EMAIL PROTECTED]> wrote in message news:<[EMAIL PROTECTED]>... > Hello, > > I revised my source code. It was doing great but I'm having problem listing > all the numbers that I'd input. How can I input all the numbers that I > selected? The source code and the output below: > > Source code: > > # compute the Mean, Median & Mode of a list of numbers: > > sum = 0.0 > > print 'This program will take several numbers then average them' > count = input(' How many numbers would you like to sum: ') > current_count = 0 > freq = {} > freq [current_count] = number > > while current_count < count: > current_count = current_count + 1
A cleaner way of writing this is for current_count in xrange(1, count+1): However, there's still a better way. > number = input ('Enter a number: ') It's better to use float(raw_input('Enter a number: ')) to make sure that the user is actually entering a number. But there's a more important problem with your code: when the user inputs a new number, the old one is simply discarded, so you can't calculate the median and mode. > print "Number", current_count,":",number > sum = sum + number > print ' The average is:', sum/count A better way of writing the above code is: def input_numbers(count): "Asks the user for numbers, and returns them in a list." return [float(raw_input('Enter a number: ')) for i in xrange(count)] def mean(numbers): "Returns the arithmetic mean of a numeric list." return sum(numbers) / len(numbers) numbers = input_numbers(count) print 'The average is:', mean(numbers) > # list the numbers selected by user then gets the median & mode > > listNumbers=[] > for list in number: > listNumbers[list]=listNumbers.get(x,0)+1 > > print listNumbers This isn't valid code. "number" isn't a sequence. Also, you don't have any code for computing the median. The simplest way to do this is: def median(numbers): "Return the median of the list of numbers." # Sort the list and take the middle element. n = len(number) copy = numbers[:] # So that "numbers" keeps its original order copy.sort() if n & 1: # There is an odd number of elements return copy[n // 2] else: return (copy[n // 2 - 1] + copy[n // 2]) / 2 > freq = {} > current_count(freq)=number > while number != 0: > number = input ('Enter a number: ') > count = count + 1 > sum = sum + number Don't ask for numbers twice. Just iterate over the "number" list from earlier. > try: > freq[number] += 1 > except KeyError: > freq[number] = 1 > > max = 0 > mode = None > for k, v in freq.iteritems(): > if v > max: > max = v > mode = k > print mode > > > Output: > >>> This program will take several numbers then average them > Number 1 : 6 > Number 2 : 9 > Number 3 : 8 > Number 4 : 4 > Number 5 : 2 > The average is: 5.8 > Traceback (most recent call last): > File > "C:\Python24\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", > line 310, in RunScript > exec codeObject in __main__.__dict__ > File "A:\SLP5.py", line 23, in ? > for x in number: > TypeError: iteration over non-sequence -- http://mail.python.org/mailman/listinfo/python-list