Упражнение 7.9 из раздела «Как мыслить как компьютерный ученый (python)» для измерения вхождений символа в строку - PullRequest
1 голос
/ 17 января 2011

Вопрос заключается в том, как написать программу, которая измеряет, сколько раз символ появляется в строке обобщенным образом в 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

когда я использую эту функцию, она измеряет длину строки вместо того, сколько раз символ встречается в строке.Что я сделал не так?Как правильно написать этот код?

Ответы [ 4 ]

5 голосов
/ 17 января 2011

Вы перезаписываете свою переменную '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

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

Встроенная-in метод 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

и быструю замену Pythonic:

def countLetters(search_in, search_for):
    return sum(1 for s in search_in if s==search_for)
2 голосов
/ 17 января 2011

Логично подумайте о том, что происходит, когда вы запускаете свой код: поскольку тест в цикле проходит успешно на первой итерации, он гарантированно будет успешным каждый раз!Вы просто проверяете, что итерация в 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)
0 голосов
/ 17 января 2011

Полностью не проверено:

def count_letters(s, c):
    return sum(1 for x in s if x == c)
0 голосов
/ 17 января 2011

Ваш цикл неправильный.

Это должно работать:

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