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

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

21.05.2021, 17:40. Показов 2100. Ответов 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
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
22.05.2021, 10:13  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Viktorrus Посмотреть сообщение
Из условия не понятно, нужно это делать или нет. Если одинаковые не надо выводить, то нужно будет подумать как изменить код.
не нужно одинаковые выводить
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.05.2021, 10:17
Frostep23, Если одинаковые последовательности отбрасывать, то код будет такой
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
A = [1, 2, 34, 3, 45, 67, 28, 2, 44, 9, 19, 123, 134, 6, 7, 23, 4, 43]
#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 != [] and not (max_lst in L):
        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
Введите предельное значение суммы  - 2
[1]
[2]
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
22.05.2021, 10:26  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Если одинаковые последовательности отбрасывать, то код будет такой
теперь только осталось переписать это еще раз только под функциональное, но это уже совсем другая история
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.05.2021, 10:37
Frostep23, Я до конца не понимаю, что такое функциональное программированию. Лутц например говорит, что функция map относится к функциональному программированию.
Если же Вашу задачу нужно оформить в виде функции, то это сделать легко. Это Вы можете сделать сами.

Добавлено через 5 минут
Frostep23, Например, можно ли в функциональном программировании использовать циклы? Если нельзя, то как решать задачи требующие цикла. Может через рекурсию?
В общем с функциональным программированием разбирайтесь сами, или кто то другой Вам подскажет.
Я в принципе не признаю никаких ограничений на питон, в том числе и ограничений на стиль программирования.
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
22.05.2021, 10:37  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Я до конца не понимаю, что такое функциональное программированию. Лутц например говорит, что функция map относится к функциональному программированию.
Если же Вашу задачу нужно оформить в виде функции, то это сделать легко. Это Вы можете сделать сами.
вот что написано в методичке, может я не так написал просто

Для решения задачи а) использовать только вызовы функций, определения анонимных функций на основе вызовов других функций, рекурсию (то есть запрещено использовать циклы, условные операторы, операторы присваивания, операторы контроля кроме return).
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.05.2021, 10:40
Frostep23, Ну тогда Вам может кто то другой поможет.
Я принципиально не берусь за задачи с ограничениями.
Извините.
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
22.05.2021, 10:43  [ТС]
Цитата Сообщение от Viktorrus Посмотреть сообщение
Ну тогда Вам может кто то другой поможет.
Я принципиально не берусь за задачи с ограничениями.
Извините.
та я вас и не прошу этого делать, вы и так сделали много, самое главное описали алгоритм, спасибо вам за вашу помощь
Удачного дня!
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
22.05.2021, 11:54
Цитата Сообщение от Viktorrus Посмотреть сообщение
код дает не верное решение для t=1 и t=2
там достаточно знак на <= поменять.
Цитата Сообщение от Viktorrus Посмотреть сообщение
Но я производительностью никогда не заморачивался.
ну тогда разговаривать не о чем.

Не по теме:

надо изучать алгоритмы...

0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.05.2021, 12:25
Цитата Сообщение от eaa Посмотреть сообщение
там достаточно знак на <= поменять.
У Вас там два места, где есть < t . Я второго места не заметил и пробовал менять только в одном. Поэтому не получил правильного результата.
Уж извините, не знал, где править Ваш код.
Но после исправления Ваш код выдает для t=2
Python
1
2
3
[1]
[2]
[2]
,
а должно быть
Python
1
2
[1]
[2]
Но Вы уж исправляйте сами, не все уж мне исправлять.
Цитата Сообщение от eaa Посмотреть сообщение
надо изучать алгоритмы...
В мои 74 года поздно уже изучать все имеющиеся алгоритмы, память уже не та. Я предпочитаю создавать свои алгоритмы, которые соответствовали бы ИИ (моделированию мышления человека). Ваш же алгоритм не соответствует обычной модели мышления (то есть не соответствует ИИ). На листочке никто не решает такую задачу так, как в Вашем алгоритме.
Ваш код, это математическая оптимизация для повышения производительности, но не имеет ничего общего с ИИ.
Так что Вы продолжайте решать по своему, а я буду решать по своему.
Кстати, может у Вас есть алгоритм для кода в стиле функционального программирования? Что бы помочь ТС?
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
22.05.2021, 12:33
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
from collections import deque
 
def foo(a, maxSum):
    d = deque()
    sum_ = 0
    result = 0
    for x in a:
        while sum_ + x > maxSum and d:
            sum_ -= d.popleft()
        if sum_ + x <= maxSum:
            d.append(x)
            sum_ += x
            result = max(result, sum_)
        elif d:
            d.clear()
            sum_ = 0
    return result
    
assert foo((1, 2, 34, 3, 45, 67, 28, 9, 19, 123, 234, 6, 7), 1) == 1
assert foo((1, 2, 34, 3, 45, 67, 28, 9, 19, 123, 234, 6, 7), 2) == 2
assert foo((1, 2, 34, 3, 45, 67, 28, 9, 19, 123, 234, 6, 7), 3) == 3
assert foo((1, 2, 34, 3, 45, 67, 28, 9, 19, 123, 234, 6, 7), 36) == 36

Не по теме:

Предыдущие сообщения в теме не читал...

0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.05.2021, 12:36

Не по теме:

Цитата Сообщение от Viktorrus Посмотреть сообщение
но не имеет ничего общего с ИИ
Поправлю себя. На самом деле Ваш алгоритм, который кстати Вы не описали словами, это тоже ИИ, но не стандартного мышления обычного человека, а мышления математика.
Я же, как обычный человек, стремлюсь к простоте мышления.:)



Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Arsegg Посмотреть сообщение
Предыдущие сообщения в теме не читал...
В предыдущих сообщениях ТС уточнял условие задачи.:)

0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
22.05.2021, 12:42

Не по теме:

Цитата Сообщение от Viktorrus Посмотреть сообщение
Кстати, может у Вас есть алгоритм для кода в стиле функционального программирования? Что бы помочь ТС?
Сейчас придет Уважаемый КулХацкеръ и выполнит данное ТЗ.
P. S. Правда я на 100% уверен, что препод, когда давал задание ТСу, не имел в виду, что задание нужно выполнить в чисто функциональном стиле. Выражаясь по-французски, в одну строчку.



Добавлено через 4 минуты

Не по теме:

Цитата Сообщение от Viktorrus Посмотреть сообщение
В предыдущих сообщениях ТС уточнял условие задачи.:)
Пусть ТС вначале с ТЗ определится, а затем только создает соответствующую тему: никто не будет копошиться в раздутой теме ради новых уточнений ТЗ. Надо будет - доработает!

0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.05.2021, 12:46

Не по теме:

Arsegg, Кстати выводить нужно не числа а списки удовлетворяющие условию. Если их несколько, то выводить все, которые удовлетворяют условию, кроме тех, которые одинаковые.



Добавлено через 2 минуты
Arsegg, И по условию нужно использовать только функциональное программирование. Это значит, что в том числе нельзя использовать циклы, а вместо их рекурсию. У нас это не получилось, может у Вас получится.
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
22.05.2021, 12:50
Цитата Сообщение от Viktorrus Посмотреть сообщение
Кстати выводить нужно не числа а списки удовлетворяющие условию. Если их несколько, то выводить все, которые удовлетворяют условию, кроме тех, которые одинаковые.
А мне нужно вывести сумму которая не превышает заданное значение, так вот как это можно реализовать?
Сумма есть число. Как ранее я уже упоминал, восстановить ответ по числу - не Rocket Science.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от Viktorrus Посмотреть сообщение
И по условию нужно использовать только функциональное программирование. Это значит, что в том числе нельзя использовать циклы, а вместо их рекурсию.
Даже пытаться не буду - такие синтетические задачи на ФП не вызывают восторга.

0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.05.2021, 13:12
Цитата Сообщение от Arsegg Посмотреть сообщение
Сумма есть число
Бесспорно.
Просто выдержка
Цитата Сообщение от Frostep23 Посмотреть сообщение
А мне нужно вывести сумму которая не превышает заданное значение,
Это не из условия. ТС просто оговорился. Ну путаник он.
В условии Выше говорится так
Цитата Сообщение от Frostep23 Посмотреть сообщение
Выделить из заданного перечня чисел последовательность длинной наибольшей длины,
состоящий из элементов, расположенных подряд, сумма которых не превышает заданное значение.
То есть решением должна быть одна или несколько удовлетворяющих условию последовательностей (например списков, но можно и кортежей).

Добавлено через 4 минуты
Я уточнял это у ТС.
Arsegg, Но в принципе Вы правы, пусть ТС с учетом всех замечаний напишет правильно условие, Хотя такое дурацкое условие ему дал преподаватель. И переделывать его он как бы не решается.
Уф, все.
Дальше сами.
0
22.05.2021, 13:16

Не по теме:

Цитата Сообщение от Viktorrus Посмотреть сообщение
Это не из условия. ТС просто оговорился. Ну путаник он.
Тут не просто оговорился, а "выдумал" совершенно новое задание.

0
710 / 356 / 104
Регистрация: 09.02.2018
Сообщений: 805
30.05.2021, 12:24
Цитата Сообщение от Arsegg Посмотреть сообщение

Не по теме:

Сейчас придет ... КулХацкеръ и выполнит данное ТЗ ... в одну строчку.

Хах, это можно:
Python
1
print(*(lambda a, limit: sorted(set(str(w) for win in [[[(sum(w), w) for w in [a[i:i+k] for i in range(len(a)-k+1)]] for k in range(1, len(a)+1)]] for s, w in win[max(k for e, k in [(min(s)[0], k) for k, s in enumerate(win)] if e <= limit)] if s <= limit)))([1, 2, 34, 3, 45, 67, 28, 2, 44, 9, 19, 123, 134, 6, 7, 23, 4, 43], int(input('введите предел суммы: '))), sep='\n')
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.05.2021, 12:24
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru