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

Python-如何计数字符,但只打印一次?,python,loops,for-loop,character,frequency,Python,Loops,For Loop,Character,Frequency,我正在试着找出我的代码。代码的目标是创建字符频率计数器。字符频率计数器必须按字母顺序显示结果。因此,代码必须接受输入并显示如下字符数: 输入=(“苹果”) “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

我正在试着找出我的代码。代码的目标是创建字符频率计数器。字符频率计数器必须按字母顺序显示结果。因此,代码必须接受输入并显示如下字符数:

输入=(“苹果”) “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
>

您拥有所有正确的零部件,但问题实际上比您所做的要简单:

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
>

也许你们可以创建一些“使用过的符号”列表,在你们数完任何符号后,把它添加到列表中

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

也许你们可以创建一些“使用过的符号”列表,在你们数完任何符号后,把它添加到列表中

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

你两次得到“p”,因为你在“apple”这个词上循环了两次,这个词里面有“p”。尝试在字典中的键排序列表中循环,因为每个字符只有一个唯一的键

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

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

你两次得到“p”,因为你在“apple”这个词上循环了两次,这个词里面有“p”。尝试在字典中的键排序列表中循环,因为每个字符只有一个唯一的键

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

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

你也可以试试这个:

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

你也可以试试这个:

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

我能想到的一个更好的解决方案是在Python中使用collections包。这是一种设计模式。收集包有一个方法计数器,它将为您的问题提供解决方案

它非常简单,易于使用

下面是这方面的代码块

input\u string=“苹果”
从收款进口柜台
结果=计数器([i代表输入字符串中的i])
打印(结果)

这对你来说应该是个魔术。使用设计模式通常更好,因为它们将简化工作


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

我能想到的一个更好的解决方案是使用Python中的collections包。这是一种设计模式。收集包有一个方法计数器,它将为您的问题提供解决方案

它非常简单,易于使用

下面是这方面的代码块

input\u string=“苹果”
从收款进口柜台
结果=计数器([i代表输入字符串中的i])
打印(结果)

这对你来说应该是个魔术。使用设计模式通常更好,因为它们将简化工作


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

这就是我将如何编写您的程序,使用和新型:


这是我将如何编写您的程序,使用和新型:


sorted(char\u dict.keys())
->
sorted(char\u dict)
@cdlane:我会坚持使用
sorted(char\u dict.keys())
谢谢。我工作的环境中,每次可能有多达200人查看/编辑代码,而我们的编码标准规定,清晰性是第一位的。我们特别不做读者可能会称之为“pythonic方式”的事情,因为这意味着懒散地不键入字符,因为python不需要这些字符,而是为了读者的清晰度。我是按照keys()操作符返回的键数组显式排序,我不是在对字典排序,因为只检索了键对,而没有检索键值对。
sorted(char\u dict.keys())
->
sorted(char\u dict)
@cdlane:我会坚持使用
sorted(char\u dict.keys())
谢谢。我工作的环境中,每次可能有多达200人查看/编辑代码,而我们的编码标准规定,清晰性是第一位的。我们特别不做读者可能会称之为“pythonic方式”的事情,因为这意味着懒散地不键入字符,因为python不需要这些字符,而是为了读者的清晰度。我是按照keys()操作符返回的键数组显式排序,我不是在字典中排序,因为只检索了键而不是键值对。或者,更简单地说,第三行可以是
result=Counter(input\u string)
。这是真的。答案给出了这个想法的要点。您可以在一行中对其进行编码。或者,更简单地说,第三行可以是
result=Counter(input\u string)
。这是正确的。答案给出了这个想法的要点。你可以在一行代码中输入。如果不能正确控制大小写,请尝试输入“Google”。我声称它给出了“Google”的正确答案,因为“G”和“G”不一样。但是,更改非常简单:
letter\u counts=Counter(word.lower())
仅基于OP的原始代码。显然,这是一个简单的解决办法。我喜欢f弦。谢谢。如果无法正确控制大小写,请尝试输入“Google”。我声称它给出了“Google”的正确答案,因为“G”和“G”不一样。但是,更改非常简单:
letter\u counts=Counter(word.lower())
仅基于OP的原始代码。显然,这是一个简单的解决办法。我喜欢f弦。谢谢。既然
char\u dict.keys()
已经包含了与
usedsymb
相同的字符,为什么还要麻烦呢?既然
char\u dict.keys()
已经包含了与
usedsymb
相同的字符,为什么还要麻烦呢?您对
list()
的调用似乎没有必要。您对
list()的调用
doe