Функция, если True возвращает список комбинаций

Я смотрю видео о динамическом программировании. Однако возврат False для заданных наборов чисел показан ниже. Он должен отображать [3,4]

Если я изменю «комбо» на True. Он вернет True. Однако вместо этого я хочу показать комбинацию.

combo = list()

def howsum(targetsum,numbers):
    if targetsum == 0: return combo
    if targetsum < 0: return False
    
    for number in numbers:
        remainder = targetsum - number
        combo.append(number)
        
        if howsum(remainder,numbers) == True: return combo
    return False
     
print(howsum(7,[3,4])) #output should be [3,4]

Вам нужно передать копию combo при каждом вызове вашей функции. На данный момент вы добавляете слишком много значений в один и тот же список

Iain Shelvington 20.12.2020 08:33

Вы возвращаете False или список - возможно, вам следует вернуть None или список и проверить None/Not None вместо True/False

Stefan 20.12.2020 08:50

Привет, извини, я не понимаю. Не могли бы вы объяснить больше о «передавать копию омбо при каждом вызове моей функции». Спасибо

SoraHeart 20.12.2020 08:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема здесь в том, что вы проверяете, истинно ли возвращаемое значение, а не существует ли оно. Правдивость пустой коллекции равна False, а непустой коллекции — True. Также для возврата вам нужно pop() из текущей комбинации, чтобы попробовать альтернативы.

combo = list()
def howsum(targetsum, numbers):
    if targetsum == 0: return combo
    if targetsum < 0: return False

    for number in numbers:
        remainder = targetsum - number
        combo.append(number)
        if howsum(remainder, numbers): return combo
        combo.pop()
    return False


print(howsum(7, [3, 4]))  # output should be [3,4]

Еще одно замечание. Вместо создания глобального списка combo мы можем передать его в качестве параметра, введя вспомогательную функцию.

def howsum_helper(targetsum, numbers, combo):
    if targetsum == 0: return combo
    if targetsum < 0: return False

    for number in numbers:
        remainder = targetsum - number
        combo.append(number)
        if howsum_helper(remainder, numbers, combo): return combo
        combo.pop()
    return False

def howsum(targetsum, numbers):
    return howsum_helper(targetsum, numbers, [])

print(howsum(7, [3, 4]))  # output should be [3,4]

Это решение также предполагает, что число в списке чисел можно повторить, чтобы достичь targetSum.

Спасибо. Постараюсь понять поп-функцию и вспомогательную функцию.

SoraHeart 20.12.2020 09:09

Привет, если есть несколько наборов целей и чисел, глобальный список комбо приведет к тому, что предыдущий набор будет передан следующему набору, например print(howsum(7,[3,4]) #output [3,4] print(howsum(8,[2,3,4] # output [3,4,2,2,2,2] # the [3,4 was passdown from the previous output] Однако в видео нет помощника. В коде TheList создается, когда Sumtarget == 0. Пожалуйста, сообщите, почему список не очищается каждый раз при вызове функции. Могу ли я узнать, возможно ли это в Python без вспомогательной функции? Код на момент времени 1:42:54 [ссылка]youtube.com/watch?v=oBt53YbR9Kk&t=6174s

SoraHeart 20.12.2020 11:33

Другие вопросы по теме