我需要让用户输入一个允许包含任何字符的字符串。输入后,我需要计算字符串中每个字母字符的出现。到目前为止,我有:
s = input("Enter a string: ")
s = s.upper()
all_freq = {}
for i in s:
if i in all_freq:
all_freq[i] += 1
else:
all_freq[i] = 1
print(all_freq)
这是错误的,因为它在计数中包含数字,空格和特殊字符。
答案 0 :(得分:3)
使用列表推导进行过滤,对Counter(来自集合)进行计数将使其更加紧凑:
from collections import Counter
s = "Hello World!"
result = Counter(c for c in s.upper() if c.isalpha())
print(result)
# Counter({'L': 3, 'O': 2, 'H': 1, 'E': 1, 'W': 1, 'R': 1, 'D': 1})
答案 1 :(得分:1)
如果只想计算字符,则可以使用isalpha
函数来检查字符是否为字母。
s = input("Enter a string: ")
s = s.upper()
all_freq = {}
for i in s:
if i.isalpha():
if i in all_freq:
all_freq[i] += 1
else:
all_freq[i] = 1
print(all_freq)
Enter a string: Hello World!
{'H': 1, 'E': 1, 'L': 3, 'O': 2, 'W': 1, 'R': 1, 'D': 1}
希望这会有所帮助!
答案 2 :(得分:1)
您还可以使用正则表达式来检查字符
import re
s = input("Enter a string: ")
s = s.upper()
all_freq = {}
for i in s:
if bool(re.match('[A-Z]',i)):
if i in all_freq :
all_freq[i] += 1
else:
all_freq[i] = 1
print(all_freq)
以下是输出:
Enter a string: hello hello 1 $
{'H': 2, 'E': 2, 'L': 4, 'O': 2}
答案 3 :(得分:0)
也许一个简单的解决方案是像下面这样使用string
模块:
import string
s = input("Enter a string: ")
ignore = string.whitespace + string.digits + string.punctuation
s = s.upper()
all_freq = {}
for c in s:
if c not in ignore:
all_freq[c] = all_freq.get(c, 0) + 1
print(all_freq)