С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/167: Рейтинг темы: голосов - 167, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 09.03.2021
Сообщений: 27

Своя функция sum

18.03.2021, 20:05. Показов 33550. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Прошу помочь с написанием собственной функции sum. которая должна быть более гибкой, чем стандартная функция sum. Вот что она должна уметь делать:

Складывать числа из списка списков.

Складывать из набора параметров.

Примеры вызовов функции:

sum([[1, 2, [3]], [1], 3])
Ответ: 10

sum(1, 2, 3, 4, 5)
Ответ: 15
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.03.2021, 20:05
Ответы с готовыми решениями:

Своя функция zip
В самом конце собеседования вас неожиданно спросили: «Расскажите, что делает функция zip?». Чтобы произвести впечатление, вы решили не...

Задача 7. Продвинутая функция sum
Доброго времени суток! Помогите пожалуйста решить задачу Напишите свою функцию sum, которая должна быть более гибкой, чем стандартная...

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

24
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
18.03.2021, 20:36
Zaouza, называть sum не стал ибо это не правильно

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> def summ(*args):
...     def flatten(a_list):
...         result = []
...         for e in a_list:
...             if isinstance(e,int):
...                 result.append(e)
...             else:
...                 result.extend(flatten(e))
...         return result
...     return sum(flatten(args))
... 
>>> summ([[1, 2, [3]], [1], 3])
10
>>> summ(1,2,3,4,5)
15
4
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
18.03.2021, 20:43
Лучший ответ Сообщение было отмечено Zaouza как решение

Решение

Welemir1,
Python
1
2
3
4
5
6
7
from typing import Iterable
 
def sum_(*args):
    return sum(sum_(*arg) if isinstance(arg, Iterable) else arg for arg in args)
    
assert sum_([[1, 2, [3]], [1], 3]) == 10
assert sum_(1, 2, 3, 4, 5) == 15
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
18.03.2021, 20:48
Ну и я как всегда в своем репертуаре
Python
1
2
3
4
import re
 
def summ(*args):
    return sum(map(int, re.findall(r'\d+', str(args))))
5
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
18.03.2021, 20:49
iSmokeJC, вот это кстати норм варик!
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
18.03.2021, 20:52
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Ну и я как всегда в своем репертуаре
Чет с float все печально:
Python
1
print(summ(1.5, 2.5))
Выводит: 13
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
18.03.2021, 20:56
Arsegg, дык регулярку допилить надо

Добавлено через 2 минуты
Яволь, май фюрер!
Python
1
return sum(map(float, re.findall(r'\d*\.?\d+', str(args))))
3
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
18.03.2021, 21:22
iSmokeJC, а комплексные числа: complex?
Python
1
sum((1j, 2j, 3j))
1
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
19.03.2021, 08:36

Не по теме:

Цитата Сообщение от Arsegg Посмотреть сообщение
комплексные числа
Не шарю


0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 6
19.03.2021, 09:38
Вообще-то для реальной работы это неправильный подход. Нужна функция типа flatten, которая делает плоскую структуру, и затем её уже передавать функции sum или иной. Но по стилю вопроса понятно, что это задание на "сдать и забыть", так что пусть его.
2
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
19.03.2021, 09:46
Цитата Сообщение от dondublon Посмотреть сообщение
Нужна функция типа flatten, которая делает плоскую структуру
itertools.chain мало подходит для данной задачи. А без isinstance и рекурсии на ум приходит только try/except, что тоже не очень...
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
19.03.2021, 09:50
Цитата Сообщение от Arsegg Посмотреть сообщение
А без isinstance и рекурсии на ум приходит только try/except, что тоже не очень...
hasattr(e, '__iter__')
1
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 6
19.03.2021, 11:08
Ну тут без рекурсии не выкрутишься, да.
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
19.03.2021, 11:39
Цитата Сообщение от dondublon Посмотреть сообщение
Ну тут без рекурсии не выкрутишься, да.
Можно же) Стек вызовов явно использовать, да и все.

А вот как решить эту задачу без доп. памяти (а в рекурсии неявно используется стек: O(log(N)) памяти)? Для меня пока остается загадкой.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38163 / 21098 / 4306
Регистрация: 12.02.2012
Сообщений: 34,686
Записей в блоге: 14
19.03.2021, 12:04
Цитата Сообщение от Arsegg Посмотреть сообщение
А вот как решить эту задачу без доп. памяти (а в рекурсии неявно используется стек: O(log(N)) памяти)?
- хвостовая рекурсия лишена этого недостатка...
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
19.03.2021, 12:07
Цитата Сообщение от Catstail Посмотреть сообщение
- хвостовая рекурсия лишена этого недостатка...
В Python'е ее нет...
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 6
19.03.2021, 12:11
Цитата Сообщение от Arsegg Посмотреть сообщение
Можно же) Стек вызовов явно использовать, да и все.
Не понял. Нам же надо обойти список, пока ещё никакого стека нет.
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
19.03.2021, 12:15

Не по теме:

Цитата Сообщение от dondublon Посмотреть сообщение
Не понял. Нам же надо обойти список, пока ещё никакого стека нет.
Посмотрите, пожалуйста, мое решение выше.


По сути: 1) Вместо рекурсии мы будем класть текущие аргументы в стек;
2) Доставать аргумент из стека;
3) Смотреть, если он iterable:
3.1) Кладем все его элементы в стек;
3.2) Пропускаем итерацию;
4) Добавляем к результату текущий элемент.
P. S. Это в цикле while stack:.
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
19.03.2021, 12:25
удалить все скобки + sum
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,181
Записей в блоге: 6
19.03.2021, 12:26
Arsegg, не, простите, но это вариация на тему рекурсии.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2021, 12:26
Помогаю со студенческими работами здесь

Как добавить в sql столбец для разницы двух sum из разных таблиц: sum(A)-sum(B)
Прошу помощи в решении следующей задачи: Сервер Interbase 2009 (обязательно, посколько есть рабочая база). Таблицы: ...

Вычислить рекурсивно сумму чисел от 1 до n, по формуле sum(n) = sum(n, 2) + sum(n-1, 2)
Вычислить рекурсивно сумму чисел от 1 до n, по формуле sum(n) = sum(n, 2) + sum(n-1, 2), где n – целое положительное число, sum(n, a) = n +...

Запрос для формирования сводной таблицы + функция SUM + функция IFNULL
Сформирован запрос, который включает в себя формирование сводной таблицы и функцию SUM. Не получается применить функцию IFNULL, возникают...

Своя функция
Снова Здравствуйте! Начал изучать сей язык,не могу понять в чем ошибка CL-USER 1 > (DEFUN my (n x) EQ (12 ((NTH n x)))) MY ...

Функция sum
Есть таблица с такими полями: ид преподавателя(берется ид из таблицы "преподаватели"), ид дисциплины(берется ид из таблицы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru