Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2011 13:01:06

I159
От:
Зарегистрирован: 2010-12-09
Сообщения: 85
Репутация: +  0  -
Профиль   Отправить e-mail  

Рекурсия

Задача: сделать функцию, которая бы давала сумму всех аргументов, при условии, что аргументы являются числами, списками, кортежами или любой комбинацией указанных типов. Сделал так:

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],)
Мне не понятен механизм, как список заново попадает в аргументы? И как сделать, чтобы функция работала, в соответсвии с задачей?
Спасибо.



Офлайн

#2 Апрель 14, 2011 13:33:25

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Рекурсия

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)])



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version