簡體   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