当前位置: 首页 > 知识库问答 >
问题:

有输入时如何计数

敖毅
2023-03-14

我试图编写一个函数,它不接受输入,而是要求一个名称。如果您输入一个空字符串,函数应该为每个名字打印同名的人数。

例如:

>>>name()
Enter a name: Paul
Enter a name: Bill
Enter a name: John
Enter a name: Paul
Enter a name: Nick
Enter a name: Bill
Enter a name: Bill
Enter a name:    
There is 1 person named John
There is 1 person named Nick
There are 2 people named Paul
There are 3 people named Bill

到目前为止,我已经:

def name():
    name = input ('Enter a name: ')
    count = 0

    while name:
        if name == input ('Enter a name: '):
            count = count + 1
        else:
            print (count)

我敢肯定我没有数对。您将如何正确执行此功能,以及在不知道将有多少不同名称的情况下如何区分不同的输入并对其进行计数?

此外,如果可能的话,我想在我还在学习的时候学习基本代码,即使它不高效。

共有3个答案

西门旻
2023-03-14
from collections import defaultdict
dic = defaultdict(int)
while True:
    name = input ('Enter a name: ')
    if name:
        dic[name] += 1
    else:
        for k,v in sorted(dic.items(), key = lambda x: (x[1],x[0])):
            print ("There is {} person named {}".format(v,k))
        break    

演示:

$ python3 so.py
Enter a name: Paul
Enter a name: Bill
Enter a name: John
Enter a name: Paul
Enter a name: Nick
Enter a name: Bill
Enter a name: Bill
Enter a name: 
There is 1 person named John
There is 1 person named Nick
There is 2 person named Paul
There is 3 person named Bill
罗韬
2023-03-14

Python附带了一个专门用于计数的集合,称为计数器

import collections

counts = collections.Counter()

while True:
    name = input('Enter a name: ')
    if not name:
        break
    counts[name] += 1

for name, count in counts.items():
    print('There is {} person named {}'.format(count, name))

如果您希望结果从最不常见到最常见的顺序,计数器有一个按计数排序的函数,most_common。不幸的是,它是向后的...但是你可以通过调用反向来解决这个问题:

for name, count in reversed(counts.most_common()):
    print('There is {} person named {}'.format(count, name))

或者,如果您喜欢按名称排序:

for name, count in sorted(counts.items()):
    print('There is {} person named {}'.format(count, name))
姬承教
2023-03-14

只是为了好玩,一句话这样做:

>>> collections.Counter(iter(functools.partial(input, "Enter a name: "), ""))
Enter a name: Paul
Enter a name: Bill
Enter a name: John
Enter a name: Paul
Enter a name: Nick
Enter a name: Bill
Enter a name: Bill
Enter a name: 
Counter({'Bill': 3, 'Paul': 2, 'Nick': 1, 'John': 1})

这可能不是在真实代码中实现的方法。

 类似资料:
  • 我正在处理存在于一个php文件中的html表单,如下所示,我想计算输入的html输入值。 Php/HTML代码: 点击保存后,它会保存在JSON中,如下所示,并输入值列表。此时,我已经输入了值,因此在JSON中显示如下: 下面是属于上述html/php代码的表单截图部分: 输入值后,显示如下: 以下是inspect上的html代码: 问题陈述: 我想知道我需要添加什么php代码,以便获得输入值的计

  • 我正在使用javascript编码一个计算器,遇到了一个问题。 我想不出输入新号码时清除显示屏的代码。 实例 > 按3(屏幕上有3个apear) 按 /-/*/ ( 将3存入Num1并设置操作,则屏幕清晰。( 按4(屏幕上有4个apear) 按下另一个(将4保存到Num2,解决(Num1 Num2),然后将答案保存回Num1) --这里是一个问题,我不知道如何在输入新号码时清除显示。系统解决问题后

  • 我在写一个地牢风格的游戏,地牢基本上是一个网格窗格。我想让玩家每0.5秒移动一格,如果他保持控制键。但我不知道如何做到这一点。我读过JavaFX:如何检测钥匙是否被按下。但这个问题与我的问题并没有特别的关系(除了我可以追踪发生了多少关键事件,或许可以在此基础上做更多)。所以我跟随这篇文章并尝试使用线程。sleep()解决了我的问题,但事实证明玩家只是停了几秒钟,然后突然移动了几格。 有人知道怎么解

  • 我试图清除一个输入的值取决于它是否找到一个id如果它找到一个现有的id js更新的值的输入但如果它不保持最后一个找到但我需要有明确的值,有人能告诉我怎么了吗:

  • 问题内容: 如何在输入框中获取输入框中的值? 问题答案: 每次释放键都会触发onkeyup。虽然它看起来是解决方案,但它仍然存在一些问题。 如果用户使用箭头移动光标,则会触发该光标,并且您必须检查自己是否字段值没有更改。 如果用户使用鼠标在输入字段中复制/粘贴一个值,或者在浏览器中单击“撤消/重做”,则不会触发。 就像在Mac或Google文档中一样,我不想保存按钮来在我们的应用程序中提交表单,这

  • 我有一个Java作业,我需要读入一个字符,然后计算该字符在数组中出现的次数。这是我目前所掌握的。