繁体   English   中英

Python-如何计算字符,但只能打印一次?

[英]Python - How to count characters, but only print once?

我试图弄清楚我的代码。 该代码的目的是创建一个字符频率计数器。 字符频率计数器必须按字母顺序显示结果。 因此,代码必须输入并显示如下所示的字符数:

输入=(“苹果”)'a'= 1

'e'= 1

'l'= 1

'p'= 2

目前,我的代码执行此操作:

'a'= 1

'e'= 1

'l'= 1

'p'= 2

'p'= 2

有解决这个问题的想法吗? 理想情况下,我只希望将“ p”显示一次,但同时计算两个字符。

这是我的代码:

char_dict = {}
user_input = input("Please enter a word or sentence: ")
user_input = user_input.replace(" ", "")
user_input = user_input.lower()
test_list = list(user_input)
test_list.sort()
for character in user_input:
    char_dict[character] = 0
for character in user_input:
    char_dict[character] = char_dict[character] + 1
for character in test_list:
    print (character, ":", char_dict[character])

任何帮助将不胜感激。 非常感谢!

您拥有正确的零件,但问题实际上要比制造过程简单:

user_input = input("Please enter a word or sentence: ")
user_input = user_input.replace(" ", "")
user_input = user_input.lower()

char_dict = {}

for character in user_input:
    char_dict[character] = char_dict.get(character, 0) + 1

for character in sorted(char_dict):
    print(character, ":", char_dict[character])

输出值

> python3 test.py
Please enter a word or sentence: apple
a : 1
e : 1
l : 1
p : 2
>

您也可以尝试以下方法:

string = "apple" #Input string
string = string.replace(" ","").lower() #In case of whitespace
setString = sorted(map(lambda i : [i,string.count(i)], set(string)))
for i in setString:
    print("%s : %d" % (i[0],i[1]))

输出:

a : 1
e : 1
l : 1
p : 2

这就是我使用collections.Counter和新的f字符串编写程序的方式:

from collections import Counter
word = input("What is your word? ")
letter_counts = Counter(word.lower())
sorted_letter_counts = sorted(letter_counts.items())
for letter, count in sorted_letter_counts:
    print(f"'{letter}' = {count}")

也许您可以创建一些“已用符号”的列表,然后在计算任何符号后,只需将其添加到列表中即可。

usedsymb=[]
for character in user_input:
    if usedsymb.count(character)==0:
        char_dict[character] +=1        (this will add 1)
        usedsymb.append(character)

您会两次获得“ p”,因为您要遍历其中有“ p”的单词“ apple”。 尝试遍历字典中键的排序列表,因为每个字符将只有一个唯一的键。

因此,将第二行更改为最后一行,并删除几行不再需要的行:

char_dict = {}
user_input = input("Please enter a word or sentence: ")
user_input = user_input.replace(" ", "")
user_input = user_input.lower()

for character in user_input:
    char_dict[character] = 0
for character in user_input:
    char_dict[character] = char_dict[character] + 1
for character in sorted(char_dict.keys()):
    print (character, ":", char_dict[character])

我能想到的一个更好的解决方案是在Python中使用collections包。 这是一种设计模式。 收集包中有一个Counter方法,该方法可以解决您的问题。

它非常简单易用。

以下是该代码块。

input_string = "apple" from collections import Counter result = Counter([i for i in input_string]) print (result)

这应该为您做魔术。 使用设计模式通常会更好,因为它们会简化工作。

使用计数器,只需几行代码即可获得所需的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM