我想找出我的代码。该代码的目的是创建一个字符频率计数器。字符频率计数器必须按字母顺序显示结果。因此,代码必须接受输入并显示如下字符数:
输入=(“苹果”) '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])
非常感谢任何帮助。非常感谢你!
答案 0 :(得分:3)
你有各种各样的零件,但问题实际上比你做的更简单:
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
>
答案 1 :(得分:1)
你也可以尝试这个:
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
答案 2 :(得分:1)
这就是我使用collections.Counter
和新奇f-strings编写程序的方式:
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}")
答案 3 :(得分:0)
也许你可以创建一些使用过的符号列表&#39;在计算任何符号后,只需将其添加到列表中。
usedsymb=[]
for character in user_input:
if usedsymb.count(character)==0:
char_dict[character] +=1 (this will add 1)
usedsymb.append(character)
答案 4 :(得分:0)
你得到&#39; p&#39;两次,因为你正在循环这个词&#39; apple&#39;哪个有&#39; p&#39;在它两次。尝试循环遍历字典中已排序的键列表,因为每个字符只能有一个唯一键。
所以改变第二行到最后一行,并删除一些不再需要的行:
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])
答案 5 :(得分:0)
我能想到的一个更好的解决方案是使用Python中的集合包。这是一种设计模式。集合包有一个方法Counter,可以解决您的问题。
它非常简单易用。
以下是该代码块。
input_string = "apple"
from collections import Counter
result = Counter([i for i in input_string])
print (result)
这应该是你的魔术。使用设计模式通常更好,因为它们可以简化工作。
使用计数器,您可以在极少数代码中获得所需的结果。