在while循环中计算输入? [英] Counting the input in a while loop?

查看:65
本文介绍了在while循环中计算输入?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要编写的函数需要帮助,其中包括一个while循环,该循环将继续进行直到用户输入空输入为止,一旦发生这种情况,该函数将返回输入名称的次数

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 return the number of times a name has been entered

到目前为止,我的代码是:

So far my code is:

while True:
    name = input('Enter a name:')

    lst = name.split()
    count={}
    for n in lst:
        if n in count:
            count[n]+=1

    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))

这不会重复,它只会询问用户一次并返回1

This doesn't repeat it only asks the user once and returns 1

输出应如下所示:

Enter next name:Bob
Enter next name:Mike
Enter next name:Bob
Enter next name:Sam
Enter next name:Mike
Enter next name:Bob
Enter next name:

There is 1 student named Sam
There are 2 students named Mike
There are 3 students named Bob

推荐答案

以下内容有些过分.仅知道存在标准模块 collections ,并且其中包含 Counter 类.无论如何,我更喜欢问题中使用的简单解决方案(消除错误之后).第一个功能读取输入,并在输入空名称时中断.第二个函数显示结果:

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:

#!python3

import collections


def enterStudents(names=None):

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

    # Ask for names until the empty input.
    while True:
        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()
        if len(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


def printStudents(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)

代码的某些部分可以删除. enterStudents()中的 name 参数允许调用该函数以将名称添加到现有集合中.初始化为 None 可使空的初始集合成为默认集合.

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.

如果要收集所有内容(包括空格),则不需要 name.strip().

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

它会在我的控制台上打印

It prints on my console

c:\tmp\___python\user\so15350021>py a.py
Enter a name: a
Enter a name: b
Enter a name: c
Enter a name: a
Enter a name: a
Enter a name: a
Enter a name:
Counter({'a': 4, 'b': 1, 'c': 1})
There are 4 students named a
There is one student named b
There is one student named c    

这篇关于在while循环中计算输入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆