#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
(astr
) с возвращаемым значениемcount2
(anint
или abool
)?3. Это не рекурсивная проблема по своей сути (хотя ее можно решить рекурсивно). Является ли рекурсивная часть заявленным требованием проблемы?
4.
'engineers'.count('e')
возвращает3
`
Ответ №1:
Ваш базовый вариант выглядит правильно. Для вашего рекурсивного случая давайте взглянем на логику. Возможны два случая:
- Если первый символ текущей строки является тем, который вы ищете. В этом случае вы должны вернуть 1 количество символов в остальной части строки.
- Если первый символ не равен, то вам следует просто вернуть количество символов в остальной части строки.
Таким образом, функция становится
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])