Skip to content Skip to sidebar Skip to footer

Counting The Input In A While Loop?

I need help with a function I have to write which includes a while loop that will continue going until the user enters an empty input and once that happens, the function will retur

Solution 1:

for n in lst:if n in count:count[n]+=1

In your above code, n is never added to your count dict. i.e. count is still empty after the loop..

Solution 2:

What @zzk is saying is

for n in lst:if n in count:count[n]+=1else:count[n]=1

For a mostly functioning answer using everyones suggestions

count= {}

whileTrue:

    name = raw_input('Enter a name:')
    lst = name.split()

    for n in lst:
        count[n] = count.get(n, 0) + 1ifnot lst:
        for n in count:
            if count[n] == 1:
                print('There is {} student named {}'.format(count[n],n))
            else:
                print('There are {} students named {}'.format(count[n],n))
        break

Solution 3:

Except for the fact that you never add n to your count dictionary, you initialize this dictionary again and again with each iteration of the while-loop. You have to put it outside of the loop.

count= {}

whileTrue:
    name = input('Enter a name:')

    lst = name.split()
    for n in lst:
        if n in count:
            count[n] += 1else:
            count[n] = 1for n in count:
        if count[n] == 1:
            print('There is {} student named {}'.format(count[n],\
                                                    n))
        else:

            print('There are {} students named {}'.format(count[n],\
                                                        n))

Solution 4:

The following is a bit overkill. This is only to know that there is the standard module collections and it contains the Counter class. Anyway, I prefer the simple solution as used in the question (after removing errors). The first function reads the inputs and breaks when empty name is entered. The second function displays the result:

#!python3import collections


defenterStudents(names=None):

    # Initialize the collection of counted names if it was not passed# as the argument.if names isNone:
        names = collections.Counter()

    # Ask for names until the empty input.whileTrue:
        name = input('Enter a name: ')

        # Users are beasts. They may enter whitespaces.# Strip it first and if the result is empty string, break the loop.
        name = name.strip()
        iflen(name) == 0:
            break# The alternative is to split the given string to the first# name and the other names. In the case, the strip is done# automatically. The end-of-the-loop test can be based # on testing the list.## lst = name.split()# if not lst:#     break## name = lst[0]#                   (my thanks to johnthexiii ;)# New name entered -- update the collection. The update# uses the argument as iterable and adds the elements. Because# of this the name must be wrapped in a list (or some other # iterable container). Otherwise, the letters of the name would# be added to the collection.## The collections.Counter() can be considered a bit overkill.# Anyway, it may be handy in more complex cases.    
        names.update([name])    

    # Return the collection of counted names.    return names


defprintStudents(names):
    print(names)   # just for debugging# Use .most_common() without the integer argument to iterate over# all elements of the collection.for name, cnt in names.most_common():
        if cnt == 1:
            print('There is one student named', name)
        else:
            print('There are {} students named {}'.format(cnt, name))


# The body of a program.if __name__ == '__main__':
    names = enterStudents()
    printStudents(names)

There are parts of the code that can be removed. The name argument in enterStudents() allows to call the function to add names to the existing collection. The initialization to None is used to make the empty initial collection as the default one.

The name.strip() is not neccessary if you want to collect everything, including whitespaces.

It prints on my console

c:\tmp\___python\user\so15350021>pya.pyEnter a name:aEnter a name:bEnter a name:cEnter a name:aEnter a name:aEnter a name:aEnter a name:Counter({'a':4,'b':1,'c':1})Thereare4studentsnamedaThereisonestudentnamedbThereisonestudentnamedc

Post a Comment for "Counting The Input In A While Loop?"