Как вернуть количество символов, частота которых выше порога - PullRequest
0 голосов
/ 27 марта 2012

Как напечатать количество символов в верхнем регистре, частота которых превышает пороговое значение (в учебнике)?

Вопрос домашнего задания:

Ваша задача написатьфункция, которая принимает в качестве входных данных одно неотрицательное число и возвращает (не печатает) количество символов в подсчете, число которых строго больше, чем аргумент функции.Ваша функция должна называться 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]

Это не работает, но я не знаю, где это неправильно.

Ответы [ 4 ]

1 голос
/ 27 марта 2012

Часть, в которой вы подсчитываете число каждого символа, в порядке:

>>> 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 раз в строке .
  • То, что вы возвращаете, это либо n , либо число раз, когда произошел один определенный символ.

Вместо этого вам нужно пошагово подсчитать количество символов и количество символов, и считать сколько символов имеют частоты, превышающие n .

1 голос
/ 27 марта 2012

Ваша задача - вернуть количество символов, которые удовлетворяют условию. Вы пытаетесь вернуть количество вхождений какого-либо персонажа. Попробуйте это:

result = 0
for key in tally.keys():
  if key.isupper() and tally[key] > threshold:
    result += 1
return result 

Вы можете сделать этот код более питоническим. Я написал это так, чтобы было понятнее.

0 голосов
/ 27 марта 2012
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()]
0 голосов
/ 27 марта 2012

Не изобретайте велосипед, а используйте счетчик объекта , например ::

>>> 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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...