A group of statisticians at a local college has asked you to create a set of functions that compute the median and mode of a set of numbers. Define these functions, median and mode, in a module named stats.py. Also include a function named mean, which computes the average of a set of numbers. Each function should expect a list of numbers as an argument and return a single number. Each function should return 0 if the list is empty. Include a main function that tests the three statistical functions using the following list defined in main:
List: [3, 1, 7, 1, 4, 10]
Mode: 1
Median: 3.5
Mean: 4.33333333333
#Here is the code I am using:
def median(list):
if len(list) == 0:
return 0
list.sort()
midIndex = len(list) / 2
if len(list) % 2 == 1:
return list[midIndex]
else:
return (list[midIndex] + list[midIndex - 1]) / 2
def mean(list):
if len(list) == 0:
return 0
list.sort()
total = 0
for number in list:
total += number
return total / len(list)
def mode(list):
numberDictionary = {}
for digit in list:
number = numberDictionary.get(digit, None)
if number == None:
numberDictionary[digit] = 1
else:
numberDictionary[digit] = number + 1
maxValue = max(numberDictionary.values())
modeList = []
for key in numberDictionary:
if numberDictionary[key] == maxValue:
modeList.append(key)
return modeList
def main():
print ("Mean of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: "), mean(range(1, 11))
print ("Mode of [1, 1, 1, 1, 4, 4]:"), mode([1, 1, 1, 1, 4, 4])
print ("Median of [1, 2, 3, 4]:"), median([1, 2, 3, 4])
main()
The Error that I am getting is on Line 14: AttributeError: 'range'object has no attribute 'sort'.
Also on Line 36:
Line36: 10]: "), mean(range1, 11)).

Respuesta :

Answer:

In Python:

def median(mylist):

   mylist.sort()

   if len(mylist) % 2 == 1:

       midIndex = int((len(mylist) +1)/ 2)

       print("Median: "+str(mylist[midIndex-1]))

   else:

       midIndex = int((len(mylist))/ 2)

       Mid = (mylist[midIndex] + mylist[midIndex-1] )/2

       print("Median: "+str(Mid))

def mean(mylist):

   isum = 0

   for i in range(len(mylist)):

       isum += mylist[i]

   ave = isum/len(mylist)

   print("Mean: "+str(ave))

   

def mode(mylist):

   print("Mode: "+str(max(set(mylist), key=mylist.count)))

Explanation:

Your program is a bit difficult to read and trace. So, I rewrite the program.

This defines the median function

def median(mylist):

This sorts the list

   mylist.sort()

This checks if the list count is odd

   if len(mylist) % 2 == 1:

If yes, it calculates the mid index

       midIndex = int((len(mylist) +1)/ 2)

And prints the median

       print("Median: "+str(mylist[midIndex-1]))

   else:

If otherwise, it calculates the mid indices

       midIndex = int((len(mylist))/ 2)

       Mid = (mylist[midIndex] + mylist[midIndex-1] )/2

And prints the median

       print("Median: "+str(Mid))

This defines the mean function

def mean(mylist):

This initializes sum to 0

   isum = 0

This iterates through the list

   for i in range(len(mylist)):

This calculates the sum of items in the list

       isum += mylist[i]

This calculates the mean

   ave = isum/len(mylist)

This prints the mean

   print("Mean: "+str(ave))

   

This defines the mode

def mode(mylist):

This calculates and prints the mode using the max function

   print("Mode: "+str(max(set(mylist), key=mylist.count)))