Вопрос заключается в том, как написать программу, которая измеряет, сколько раз символ появляется в строке обобщаемым способом в python.
Код, который я написал:
def countLetters(str, ch):
count=0
index=0
for ch in str:
if ch==str[index]:
count=count+1
index=index+1
print count
когда я использую эту функцию, он измеряет длину строки вместо того, сколько раз символ появляется в строке. Что я сделал не так? Каков правильный способ написания этого кода?
Вы переписываете свою переменную ch:
def countLetters(str, ch):
# ^ the character you are looking for
count=0
index=0
for ch in str:
# ^ the string character you are trying to check
if ch==str[index]: # ???
count=count+1
index=index+1
print count
(также обычно полезно возвращать значение, а не просто его печатать).
Встроенный метод - str.count:
"aaabb".count("a") -> 3
Как вы можете переписать свой код:
def countLetters(search_in, search_for):
count = 0
for s in search_in: # iterate by string char, not by index
if s==search_for:
count += 1
return count
и быстрая замена питона:
def countLetters(search_in, search_for):
return sum(1 for s in search_in if s==search_for)
Подумайте логически о том, что происходит, когда вы запускаете свой код: поскольку тест в цикле успешно завершается на первой итерации, он всегда будет успешным каждый раз! Вы просто проверяете, что итерация в Python работает.
Правильная формулировка
def count(s, input):
count = 0
for c in s:
if c == input:
count += 1
Или, что эквивалентно,
def count(input):
return sum(c == input for c in s)
Но вы могли бы так же хорошо:
s.count(c)
Полностью непроверенный:
def count_letters(s, c):
return sum(1 for x in s if x == c)
Ваша петля неверна.
Это должно работать:
for s in str:
if ch == s:
...
таким образом переменная index
не будет использоваться, и вы можете ее удалить. Если вы хотите использовать index
, то измените for
на:
for index in range(len(str)):
... (rest is OK but ...)
... (do not increase index in loop body)
Вы также можете увеличить переменную с помощью оператора +=
, например:
cnt += 1
Итак, готовый код будет выглядеть так:
def countLetters(str, ch):
count = 0
for s in str:
if ch == s:
count += 1
print count
s
в аргументыcount
?