2015-03-10 3 views
1

Я пытаюсь написать программу для подсчета вхождения конкретной буквы в строке без функции count. Я ввел строку в список и установил цикл для подсчета, но счет никогда не меняется, и я не могу понять, почему. Это то, что я имею прямо сейчас:python подсчет букв в строке без функции подсчета

letter = 'a' 
myString = 'aardvark' 
myList = [] 

for i in myString: 
    myList.append(i) 

count = 1 

for i in myList: 
    if i == letter: 
     count == count + 1 

    else: 
     continue 

print (count) 

Любая помощь очень ценится.

+1

'count == count + 1' не является назначением. Просто удалите один '='. –

+0

Зачем придумывать что-то плохо, если '' aardvark'.count ('a') 'делает работу лучше и быстрее? (По крайней мере, это не ошибка) – haavee

+0

В вашем цикле 'for' есть' if ... else ... ', где' else' имеет функцию 'continue'. «Продолжить» не требуется, потому что нет ничего, чтобы избежать вычисления с помощью цикла 'for'. Уединенного 'if' было бы достаточно. – polarise

ответ

1

Будьте осторожны, вы используете count == count + 1, и вы должны использовать count = count + 1

Оператор приписывать новое значение =, оператор == для сравнения двух значений

+0

Спасибо! Это была моя глупость. Я не могу поверить, что сделал эту ошибку. –

0

Ваш счетчик никогда не изменяется, потому что вам используют ==, который равен Проверка равенства, где вы должны использовать = для переназначения count. Еще лучше, можно увеличить с

count += 1 

Также обратите внимание, что else: continue не делает ничего, как вы будете продолжать со следующей итерации цикла в любом случае. Если я должны были иметь, чтобы придумать альтернативный способ подсчета без использования функции count, я бы склоняются к регулярному выражению:

import re 
stringy = "aardvark" 
print(len(re.findall("a", stringy))) 
0

Вместо того

count == count + 1 

вам нужно иметь

count = count + 1 
0

Использование filter Функция, подобная этому

len(filter(lambda x: x==letter, myString)) 
1

Хотя кто-то решил проблему, самое простое решение, чтобы сделать то, что вы хотите сделать, это использовать тип Counter данных:

>>> from collections import Counter 
>>> letter = 'a' 
>>> myString = 'aardvark' 
>>> counts = Counter(myString) 
>>> print(counts) 
Counter({'a': 3, 'r': 2, 'v': 1, 'k': 1, 'd': 1}) 
>>> count = counts[letter] 
>>> print(count) 
3 

Или, более кратко (если вы не хотите проверить несколько букв):

>>> from collections import Counter 
>>> letter = 'a' 
>>> myString = 'aardvark' 
>>> count = Counter(myString)[letter] 
>>> print(count) 
3 

Самый простой способ сделать вашу реализацию будет:

count = sum(i == letter for i in myString) 

или:

count = sum(1 for i in myString if i == letter) 

Это работает, потому что строки могут повторяться, как и списки, и False считается как 0 и True считается как 1 для арифметики.

Смежные вопросы