Я только недавно начал программировать на python. Это мой первый опыт в программировании.
Это проблема академии кода. Мне в основном нужно:
“Запишите функцию
fizz_count
которая принимает список x в качестве входных данных и возвращает счет строки"fizz"
в этом списке.Например,
fizz_count(["fizz","buzz","fizz"])
должен возвращать 2. “
Вот мой код:
def fizz_count(x):
count = 0
for a in x:
if a == "fizz":
return fizz_count(x) == 1 + count
else:
return fizz_count(x) == count
Но это не работает. Где я ошибаюсь?
Вы, кажется, используете рекурсивное программирование, но вы не понимаете, как это должно работать.
Вы вызываете свою функцию рекурсивно, но рекурсивный подсчет требует, чтобы вы разделили свою проблему на подзадачи; решить один и делегировать остальное на рекурсивный вызов или разбить набор на подзадачи, пока у вас не будет небольшого набора, который вы знаете, как его решить. Однако вы пытаетесь решить подзадачу для всех элементов в списке, а затем передаете весь список рекурсивному вызову. Это просто приводит к исключению бесконечной рекурсии, потому что вы только когда-либо смотрите на тот же набор проблем.
Рекурсивная версия:
def fizz_count(x):
if not x:
return 0
return (1 if x[0] == 'fizz' else 0) + fizz_count(x[1:])
Это просто смотрит на первый элемент и делегирует подсчет остальной части списка на рекурсивный вызов. Если список пуст, возвращается 0.
Разделение списка на половинки – это еще один вариант, возвращаемый только тогда, когда список пуст или имеет только один элемент:
def fizz_count(x):
lenx = len(x)
if not lenx:
return 0
if lenx == 1:
return (1 if x[0] == 'fizz' else 0)
return fizz_count(x[:lenx//2]) + fizz_count(x[lenx//2:])
Если вы хотите перебирать список и подсчитывать этот путь (без рекурсии), увеличивать count
и возвращаться только после завершения цикла:
def fizz_count(x):
count = 0
for a in x:
if a == 'fizz':
count += 1
return count
Однако самым простым решением является использование стандартной функции list.count()
:
def fizz_count(x):
return x.count('fizz')
и покончить с этим.