2014-11-06 2 views
0

Так что я закодировал супер простой счетчик для возвращения соотношения букв:Создания простого счетчика писем

def hasnoe(word): 
    count = 0 
    for letter in word: 
     if letter == 'e': 
      count += 1.0 
    ratio = count/(len(word)) 
    return ratio 

hasnoe('eeeeeeheif') 

Но когда я пытаюсь это, компьютер не возвращает никакого значения - что это вверх?

+1

Ваша правка на свой пост только полностью изменил вопрос. Как написано в настоящее время, ваш код вызывает ожидаемое поведение. – CoryKramer

+2

's = 'eeeeeeheif'; print s.count ('e')/float (len (s)) ' –

+0

Python2 или Python3? Это важно, потому что '/' работает по-другому –

ответ

3

Вы не можете вернуть более одного раза из функции. Вы в настоящее время возвращаете count после первой буквы, которую вы контактируете, поэтому это может быть только 0 или 1.

Все, что вам нужно сделать, чтобы исправить это удалить return count

def hasnoe(word): 
    count = 0 
    for letter in word: 
     if letter == 'e': 
      count += 1.0 
    ratio = count/(len(word)) 
    return ratio 

>>> hasnoe('eeeeeeheif') 
0.7 
+0

+1 за устойчивость. Ты меня избила ..;) –

0

Попробуйте этот код возврата дважды

def hasnoe(word): 
     count = 0 
     for letter in word: 
      if letter == 'e': 
       count += 1.0 
     ratio = count/(len(word)) 
     return ratio 

    hasnoe('eeeeeeheif') 
0

Вы лучше всего будет вернуться кортеже, если вы хотите оба числа.

def hasnoe(word): 
    count = 0 
    for letter in word: 
     if letter == 'e': 
      count += 1.0 
    ratio = count/(len(word)) 
    return ratio, count 

ratio, count = hasnoe('eeeeeeheif') 
1
>>> from collections import Counter 
>>> s = 'eeeeeeheif' 
>>> c = Counter(s) 
>>> c 
Counter({'e': 7, 'i': 1, 'h': 1, 'f': 1}) 
>>> den = float(len(s)) 
>>> freq = dict((k, v/den) for k, v in c.iteritems()) 
>>> freq 
{'i': 0.1, 'h': 0.1, 'e': 0.7, 'f': 0.1}