如何打印频率高于阈值的大写字母数(在教程中)?
作业问题是:
您的任务是编写一个函数,该函数将单个非负数作为输入,并返回(不打印)计数严格大于函数参数的计数中的字符数。您的函数应该被称为freq_threshold。
我的回答是:
mobyDick = "Blah blah A B C A RE."
def freq_threshold(threshold):
tally = {}
for char in mobyDick:
if char in tally:
tally[char] += 1
else:
tally[char] = 1
for key in tally.keys():
if key.isupper():
print tally[key],tally.keys
if threshold>tally[key]:return threshold
else:return tally[key]
它不起作用,但我不知道它出错了。
答案 0 :(得分:1)
您的任务是返回满足条件的字符数。你试图返回一些角色的出现次数。试试这个:
result = 0
for key in tally.keys():
if key.isupper() and tally[key] > threshold:
result += 1
return result
您可以使此代码更加pythonic。我这样写它是为了让它更清晰。
答案 1 :(得分:1)
你计算每个角色数量的部分很好:
>>> pprint.pprint ( tally )
{' ': 5,
'.': 1,
'A': 2,
'B': 2,
'C': 1,
'E': 1,
'R': 1,
'a': 2,
'b': 1,
'h': 2,
'l': 2,
'\x80': 2,
'\xe3': 1}
错误在于您如何总结统计数据。
您需要逐步完成字符和字符计数,计算有多少字符的频率超过 n 。
答案 2 :(得分:0)
不要重新发明轮子,而是使用counter object,例如:
>>> from collections import Counter
>>> mobyDick = "Blah blah A B C A RE."
>>> c = Counter(mobyDick)
>>> c
Counter({' ': 6, 'a': 2, 'B': 2, 'h': 2, 'l': 2, 'A': 2, 'C': 1, 'E': 1, '.': 1, 'b': 1, 'R': 1})
答案 3 :(得分:0)
from collections import Counter
def freq_threshold(s, n):
cnt = Counter(s)
return [i for i in cnt if cnt[i]>n and i.isupper()]
重新发明轮子:
def freq_threshold(s, n):
d = {}
for i in s:
d[i] = d.get(i, 0)+1
return [i for i in d if d[i]>n and i.isupper()]