Упражнение 7.9 из раздела «Как мыслить как компьютерный ученый (python)», в котором измеряется вхождение символа в строку.

1

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

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

Теги:
string

4 ответа

5
Лучший ответ

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

Подумайте логически о том, что происходит, когда вы запускаете свой код: поскольку тест в цикле успешно завершается на первой итерации, он всегда будет успешным каждый раз! Вы просто проверяете, что итерация в 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
    Разве вы не забыли добавить s в аргументы count ?
  • 0
    Да, исправление, спасибо!
0

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

def count_letters(s, c):
    return sum(1 for x in s if x == c)
  • 0
    Оставьте список понимания. Просто используйте выражение генератора.
  • 0
    Исправлено, спасибо.
0

Ваша петля неверна.

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

  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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню