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

#python #python-3.x #recursion

#python #python-3.x #рекурсия

Вопрос:

Это то, что у меня есть на данный момент:

 def count2(char,text):
    if len(text)==0:
        return 0
    else:
        if char==count2(char,text[:-1]):
            return (1 count2(char,text[:-1]))
        else:
            return False
  

Это просто приведет к false, но я пытаюсь подсчитать, сколько раз «char» равен каждому символу «текста».

Комментарии:

1. Почему вы возвращаете false из своего метода подсчета? false — это не количество чего-либо

2. Зачем сравнивать char (a str ) с возвращаемым значением count2 (an int или a bool )?

3. Это не рекурсивная проблема по своей сути (хотя ее можно решить рекурсивно). Является ли рекурсивная часть заявленным требованием проблемы?

4. 'engineers'.count('e') возвращает 3 `

Ответ №1:

Ваш базовый вариант выглядит правильно. Для вашего рекурсивного случая давайте взглянем на логику. Возможны два случая:

  1. Если первый символ текущей строки является тем, который вы ищете. В этом случае вы должны вернуть 1 количество символов в остальной части строки.
  2. Если первый символ не равен, то вам следует просто вернуть количество символов в остальной части строки.

Таким образом, функция становится

 def count2(char,text):
    if len(text)== 0:
        return 0
    count = 1 if text[0] == char else 0
    return count   count2(char, text[1:]) 
  

Ответ №2:

В Python есть аккуратный способ обработки True / False как 1/0, поэтому вы могли бы просто написать что-то вроде этого:

 def numberofcharacters(char, text):
    if len(text) == 0:
        return 0
    return (text[-1] == char)   numberofcharacters(char, text[:-1])
  

Ответ №3:

  def count2(char, text):
    charCount = 0
    for i in text:
        if i == char:
            charCount  = 1
    return(charCount)
  

Вот мои два соображения по этому вопросу, менее сложное решение.

Ответ №4:

Лучшим способом добиться этого будет использование string.count() функции как:

 >>> 'engineering'.count('e')
3
  

Но я полагаю, что это часть некоторого присваивания. Поскольку вы специализируетесь на использовании рекурсивной функции, ниже приведен пример кода для достижения этого в виде:

 def numberofcharacters(my_char, my_string):
    if my_string:
       if my_char == my_string[0]:
            return 1   numberofcharacters(my_char, my_string[1:])
       else:
            return numberofcharacters(my_char, my_string[1:])
    else:
       return 0
  

Это решение может быть дополнительно упрощено как:

 def numberofcharacters(my_char, my_string):
    return ((my_char == my_string[0])   numberofcharacters(my_char, my_string[1:])) if my_string else 0
  

Пример запуска:

 >>> numberofcharacters('e','engineering')
3
  

Ответ №5:

Использование понимания списка проясняет ситуацию :

 def numberofcharacters(my_char, my_string):
    return len([c for c in my_string if c == my_char])