Найти - Пользователи
Полная версия: Рекурсия
Начало » Python для новичков » Рекурсия
1
I159
Задача: сделать функцию, которая бы давала сумму всех аргументов, при условии, что аргументы являются числами, списками, кортежами или любой комбинацией указанных типов. Сделал так:
def add_coll(*args):
for i in args:
if isinstance(i, tuple) or isinstance(i, list):
add_coll(*i)
return sum(args)
По задумке, функция должна воспроизводить себя до того момента, пока вложенные объекты будут итерируемые. А в итоге сложить все элементы полученного списка. При введении списка
>>> add_coll([1,2,3])
написанная функция выдает ошибку:
TypeError: unsupported operand type(s) for +: ‘int’ and ‘list’
Вместо
return sum(args)
, подставил
print args
и получил:
>>> (1, 2, 3)
>>> ([1, 2, 3],)
Мне не понятен механизм, как список заново попадает в аргументы? И как сделать, чтобы функция работала, в соответсвии с задачей?
Спасибо.
sp3
def add_coll(*args):
m = 0
for i in args:
if isinstance(i, tuple) or isinstance(i, list):
m += add_coll(*i)
else:
m += i
return m

print add_coll([1,2,3,[[1,2],2],(1,2)])
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB