Эта проблема проще/эффективнее решить с помощью цикла, но если вы действительно, действительно хотите написать рекурсивную решение, давайте посмотрим, как это сделать. Первый пример, как подсчитать количество строчных букв в строке (это правильная реализация вашей string()
функции):
import string
def countString(strg):
if not strg: # if it's the empty string
return 0 # then it has 0 letters
elif strg[0] in string.ascii_lowercase: # if the first char is a letter
return 1 + countString(strg[1:]) # add 1 and continue with recursion
else: # if the first char is not a letter
raise Exception, 'Incorrect Letters' # then throw an exception
countString('abcd')
=> 4
countString('ab$cd')
=> Exception: Incorrect Letters
выше возвратит число строчных букв в строке ввода, или выдать исключение, если был найден небуквенный символ. Обратите внимание, что вы не можете просто распечатать сообщение, если появляется небуквенный символ, необходимо также остановить рекурсию - вот почему я создаю исключение.
Второй пример, как подсчитать количество вхождений символа в строке (это отвечает на вопрос в названии), он похож на предыдущий пример, но он рассчитывает только символ, передаваемый в качестве параметра:
def countChar(strg, ch):
if not strg: # if it's the empty string
return 0 # then ch's count is 0
elif strg[0] == ch: # if the first char is ch
return 1 + countChar(strg[1:], ch) # add 1 and continue with recursion
else: # if the first char is not ch
return countChar(strg[1:], ch) # simply continue with recursion
countChar('abcdeabca', 'a')
=> 3
countChar('abcdeabca', 'x')
=> 0
взглянуть на это http://stackoverflow.com/questions/1155617/count-occurrence-of-a-character-in-a-python -string –
как 'file', так и' string' уже существуют в python, поэтому не используйте те, что мне это имена. –
Поскольку у вас нет переменной 'str', эта строка:' string (char, str) 'не будет работать. –