Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29

Функциональное программирование

21.05.2021, 17:40. Показов 2087. Ответов 36

Студворк — интернет-сервис помощи студентам
Вот задание

Выделить из заданного перечня чисел последовательность длинной наибольшей длины,
состоящий из элементов, расположенных подряд, сумма которых не превышает заданное значение.

В чем собственно проблема, я вывожу все числа которые больше заданного
А мне нужно вывести сумму которая не превышает заданное значение, так вот как это можно реализовать?
Вот мое решение:
Python
1
2
3
4
5
6
7
def prox(value, A):
    return list(filter(lambda x: x if x < int(value) else 0, A))
 
 
A = [1, 2, 34, 3, 45, 67, 28, 9, 19, 123, 234, 6, 7]
value = input("Введите значения - ")
print("Новый перечень чисел - " + str(prox(value, A)))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.05.2021, 17:40
Ответы с готовыми решениями:

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

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

Функциональное программирование
Изучаю функции на python, необходима ваша помощь. Что не так в коде? Где? Почему? Зачем? Прошу не применять ООП и классы, хочу...

36
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
21.05.2021, 17:52
Цитата Сообщение от Frostep23 Посмотреть сообщение
длинной длины
нормально.

подмассив или подпоследовательность ?
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
21.05.2021, 17:58  [ТС]
Выделить из заданного перечня чисел последовательность самой длинной длины,
которая состоит из элементов, расположенных подряд, сумма которых не превышает заданное значение.

вот оригинал
Виділити з заданого переліку чисел послідовність найдовшої довжини,
що складається з елементів, розташованих поспіль, сума яких не перевищує задане значення.

только я не понял что ты хотел
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
21.05.2021, 18:02
Цитата Сообщение от Frostep23 Посмотреть сообщение
длинной длины
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.05.2021, 18:03
Цитата Сообщение от Frostep23 Посмотреть сообщение
Выделить из заданного перечня чисел последовательность
Выделить, это видимо вывести? Так вывести любую последовательность удовлетворяющую условию или все, если их несколько?
И как насчет пересекающихся последовательностей? Их все выводить?
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
21.05.2021, 18:05  [ТС]
Выделить из заданного перечня чисел последовательность самой длинной длины

Добавлено через 2 минуты
вывести все последовательности которые удовлетворяют условия
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
21.05.2021, 18:06
короче:
найти подмассив наибольшей длины сумма которого не превышает заданного числа.
жадный алгоритм.
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
21.05.2021, 18:06  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Выделить, это видимо вывести? Так вывести любую последовательность удовлетворяющую условию или все, если их несколько?
И как насчет пересекающихся последовательностей? Их все выводить?
Цитата Сообщение от Viktorrus Посмотреть сообщение
Выделить, это видимо вывести? Так вывести любую последовательность удовлетворяющую условию или все, если их несколько?
И как насчет пересекающихся последовательностей? Их все выводить?

вывести все последовательности которые удовлетворяют условия
0
21.05.2021, 18:08

Не по теме:

Обрыдаешься. Уже ТЗ за ТСов пишем... Рукалицо

0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.05.2021, 18:08
До меня дошло, нужно из всех, удовлетворяющих условию последовательностей, вывести ту, которая максимальной длины.
А если несколько одинаковой длины? Их все выводить?
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
21.05.2021, 18:09  [ТС]
да, все выводить
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.05.2021, 18:21
Цитата Сообщение от Frostep23 Посмотреть сообщение
найдовшої довжини
Хотя я украинского не знаю, но напрашивается перевод "наибольшей длины", а не "самой длинной длины".

Добавлено через 9 минут
Кстати список (последовательность) в питоне может состоять и из одного символа, например [5,]. Такие тоже рассматривать?
Если не окажется последовательностей большей длины, удовлетворяющих условию, то Рассматривать последовательности из одного числа?
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
21.05.2021, 18:24  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Кстати список (последовательность) в питоне может состоять и из одного символа, например [5,]. Такие тоже рассматривать?
Если не окажется последовательностей большей длины, удовлетворяющих условию, то Рассматривать последовательности из одного числа?
A = [1, 2, 34, 3, 45, 67, 28, 9, 19, 123, 234, 6, 7]
все под эту последовательность
и если список состоит из одного элемента то он и есть ответ по идеи
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.05.2021, 18:37
Цитата Сообщение от Frostep23 Посмотреть сообщение
все под эту последовательность
Но тогда нет смысла в функции. Функция пишется для общих случаев, а не для конкретного варианта.

Добавлено через 5 минут
Frostep23, Я вижу решение, только с помощью вложенных циклов for.
Как делать с помощью функции lambda , не представляю.
Можно конечно написать списковое включение с вложенностью, но это будет сложная конструкция. Хотя есть любители.
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
21.05.2021, 18:40  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Я вижу решение, только с помощью вложенных циклов for.
Как делать с помощью функции lambda , не представляю.
Можно конечно написать списковое включение с вложенностью, но это будет сложная конструкция. Хотя есть любители.
ну давайте со вложеным циклом, у меня тоже просто нет идей как это сделать с помощью функции lambda
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.05.2021, 18:52
Frostep23, Если в лоб, то можно использовать такой алгоритм.
В цикле for берем последовательно по одному элементу из списка, и во вложенном списке for добавляем по одному элементу из списка, следующим за ним, и проверяем сумму взятых элементов, до тех пор, пока сумма не превысит заданную. Тогда берем предыдущую последовательность с удовлетворяющей условию суммой. И так для каждого элемента из внешнего цикла.
Из всех полученных последовательностей, выбираем наибольшей длины.
Кстати, перед циклами инициализируем пустой список, куда помещаем полученные наибольшие последовательности для каждого элемента списка, что бы потом выбрать из них наибольшей длины.
Может кто то предложит более простой алгоритм.
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
21.05.2021, 19:25
жадный алгоритм. один цикл.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
21.05.2021, 20:22
Цитата Сообщение от eaa Посмотреть сообщение
жадный алгоритм. один цикл.
Я этого алгоритма не знаю, поэтому у меня такой код
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
A = [1, 2, 34, 3, 45, 67, 28, 9, 19, 123, 234, 6, 7]
S = int(input("Введите предельное значение суммы  - "))
 
L = []
for i in range(len(A)):
    max_lst = []
    for j in range(len(A[i:])):
        s = sum(A[i:i+j+1])
        if s <= S:
            max_lst = A[i:i+j+1]
        else: break
    if max_lst != []:
        L.append(max_lst)
    max_lst = []
 
max_len = max(L, key=lambda x: len(x))
for lst in L:
    if len(lst) == len(max_len):
        print(lst)
Пример вывода:
Python
1
2
3
Введите предельное значение суммы  - 20
[1, 2]
[6, 7]
Обычно я коды не пишу, только консультирую. Но так как алгоритма жадного кода не написали, то в доказательство работы своего, пусть не оптимального, но рабочего алгоритма, написал код.
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
21.05.2021, 20:41
правильно вроде называется "алгоритм скользящего окна":
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a = [1, 2, 34, 3, 45, 67, 28, 2, 44, 9, 19, 123, 134, 6, 7, 23, 4, 43]
t = 80
s = k = kmax = 0
res = []
for i in range(len(a)):
    if s + a[i] < t:
        k += 1
    else:
        s -= a[i-k]
    s += a[i]
    if k >= kmax:
        if k > kmax:
            res = []
        kmax = k
        if s < t:
            res.append(i+1)
print(*[a[i-kmax:i] for i in res], sep='\n')
1
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.05.2021, 10:04
eaa, Ваш код дает не верное решение для t=1 и t=2.
Для t=1 у Вас выводит
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
А для t=2 выводит
Python
1
[1]
,
а должно выводить
Python
1
2
3
Введите предельное значение суммы  - 2
[1]
[2]
Как я понимаю, Ваш код выводит последовательности, для которых сумма меньше чем t, а по условию, она должна быть меньше или равна t.
Цитата Сообщение от Frostep23 Посмотреть сообщение
сумма которых не превышает заданное значение
Добавлено через 6 минут
eaa, Если я загоню, как и у Вас, цикл вывода в print, то количество строк кода будет такое же, как и у Вас. Не знаю как для кого, но читаемость моего кода лучше. Может у вашего кода производительность выше? Сейчас проверю.

Добавлено через 28 минут
eaa, Производительность у Вас действительно Выше "затраченное время 0.00018119999999999248 сек",
против моих "затраченное время 0.00028129999999992883 сек".
Но я производительностью никогда не заморачивался.

Добавлено через 22 минуты
Frostep23, Взяв не Вашу последовательность, а ту , что у eaa, я получил, что мой код выводит удовлетворяющие условию одинаковые последовательности, если их несколько.
Python
1
2
3
4
Введите предельное значение суммы  - 2
[1]
[2]
[2]
Из условия не понятно, нужно это делать или нет. Если одинаковые не надо выводить, то нужно будет подумать как изменить код.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.05.2021, 10:04
Помогаю со студенческими работами здесь

Функциональное программирование. Список из функций
Подскажите пожалуйста, как здесь быть. Нужно вывести список полученных значений (). А выводит только .Как можно вывести значение функции?...

Как переписать под функциональное программирование
Вот само задание: Толковый словарь определяет для каждого слова его толкование. Вывести на экран списки, первый из которых состоит из...

Как записать задачу, используя функциональное программирование?
Добрый день, Есть задача Во входном файле записан текст. Словом считается последовательность непробельных символов идущих...

Функциональное программирование
Написать функцию для нахождения коэффициентов многочлена являющегося производной заданного многочлена (коэффициеты всех многочленов...

Функциональное программирование
Читал или слышал, что те, кто выучил ООП, потом не могут изучить функциональное программирование. Достаточно ли будет изучить...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru