Help please, why doesn't it show the next input?

John Gordon gordon at panix.com
Fri Sep 13 18:41:15 EDT 2013


In <364bcdb3-fdd5-4774-b7d2-040e2ccb4cfd at googlegroups.com> William Bryant <gogobebe2 at gmail.com> writes:

> Hello, I've done this so far but why doesn't the mode function work?

> def mode():
>     global NumberOfXItems, Themode
>     for i in List:
>         NumberOfXItems.append(i)
>         NumberOfXItems.append(List.count(i))
>     Themode = max(NumberOfXItems)
>     print(Themode)

As far as I can see, you're appending each of the user's numbers onto
NumberOfXItems, and you're also appending the number of times each number
occurs.

So, if the user had entered these numbers:

    5 9 9 9 15 100 100

NumberOfXItems would end up looking like this:

    5 1 9 3 9 3 9 3 15 1 100 2 100 2

The max is 100, but 9 is the most often-occuring number.

Also, since NumberOfXItems mixes user input and the counts of that input,
you risk getting a max that the user didn't even enter.  For example if the
user entered these numbers:

    1 1 1 1 1 1 2 3

NumberOfXItems would end up looking like this:

    1 6 1 6 1 6 1 6 1 6 1 6 2 1 3 1

The max is 6, which is a count, not user input.

mode would be much better written like this:

  def mode(mylist):

      max_occurrences = 0
      themode = None

      for i in mylist:
          thecount = mylist.count(i)
          if thecount > max_occurrences:
              max_occurrences = thecount
              themode = i

      print(themode)

-- 
John Gordon                   A is for Amy, who fell down the stairs
gordon at panix.com              B is for Basil, assaulted by bears
                                -- Edward Gorey, "The Gashlycrumb Tinies"




More information about the Python-list mailing list