Нужна помощь с редактированием кода в Python

Вопрос:

Я только недавно начал программировать на 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')

и покончить с этим.

Оцените статью
TechArks.Ru
Добавить комментарий