在while循环中计算输入? [英] Counting the input in a while loop?
问题描述
我需要编写的函数需要帮助,其中包括一个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屋!