Python-如何计数字符,但只打印一次?
我正在试着找出我的代码。代码的目标是创建字符频率计数器。字符频率计数器必须按字母顺序显示结果。因此,代码必须接受输入并显示如下字符数: 输入=(“苹果”) “a”=1 “e”=1 “l”=1 ‘p’=2 目前,我的代码执行以下操作: “a”=1 “e”=1 “l”=1 ‘p’=2 ‘p’=2 有解决这个问题的办法吗?理想情况下,我只希望“p”显示一次,但同时计算两个字符 这是我的密码: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
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