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

Выделить из заданного перечня чисел последовательность самой большой длины

09.04.2024, 18:24. Показов 1029. Ответов 14

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

Как переделать код чтоб было использование рекурсии - это обязательно ,

также Важно:
использовать только вызовы функций, определение анонимных функций на основе вызовов других функций, рекурсию.
То есть запрещено использовать циклы, условные операторы, операторы присваивания, операторы контроля кроме return.
Помогите пожалуйста
Есть код но нужно обязательно чтоб была ещё рекурсия

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 from functools import reduce
 
def task_0(lst):
    return list(map(lambda start: list(map(lambda length: lst[start:start+length],range(1,len(lst)-start+1))), range(0,len(lst))))
 
def task_1(a):
    return reduce(lambda acc,x: acc+x,task_0(a),[])
 
def task_2(a):
    return list(map(lambda x: (x,sum(x),len(x)),task_1(a)))
    
def task_3(a,s):
    return max(filter(lambda x: x[1] <= s,task_2(a)),key=lambda x: x[2])
 
print(task_3([1,2,3,4,5,6,7,8,9],15))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.04.2024, 18:24
Ответы с готовыми решениями:

Выделить из заданного перечня чисел последовательность самой большой длины
Помогите решить задание пожалуйста. Сколько пытаюсь - мыслей как это действительно реализовать практически мало. Задание : Выделить...

Выделить в отдельную строку все слова, где встречается хотя бы один специальный символ из заданного перечня
Люди Хелп. оч срочно надо написать программу. А как я не могу понять вообще как это реализовать. Составить и отладить программу, которая...

В списке нужно найти сумму цифр числа самой большой длины
программа просто не запускается.. X= for i in range(len(X)): while X!=0: X//10 k+=1 if k&gt;m: ...

14
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38170 / 21105 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
09.04.2024, 19:32
Plastic _frog_, знакомый код. Где я его мог видеть?

Проще всего "добавить рекурсию" так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from functools import reduce
 
def task_0(lst):
    return list(map(lambda start: list(map(lambda length: lst[start:start+length],range(1,len(lst)-start+1))), range(0,len(lst))))
 
#def task_1(a):
#    return reduce(lambda acc,x: acc+x,task_0(a),[])
 
def task_1(a):
    if len(a)==0:
        return []
    else:
        return a[0]+task_1(a[1:])
 
def task_2(a):
    return list(map(lambda x: (x,sum(x),len(x)),task_1(task_0(a))))
    
def task_3(a,s):
    return max(filter(lambda x: x[1] <= s,task_2(a)),key=lambda x: x[2])
 
print(task_3([1,2,3,4,5,6,7,8,9],15))
3
0 / 0 / 0
Регистрация: 09.11.2022
Сообщений: 36
09.04.2024, 20:33  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
def task_1(a):
    if len(a)==0:
        return []
    else:
        return a[0]+task_1(a[1:])
По условию задачи запрещено использовать условные операторы(
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38170 / 21105 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
09.04.2024, 20:50
Plastic _frog_, без условного оператора рекурсию не построишь. А где я этот код видел?
1
0 / 0 / 0
Регистрация: 09.11.2022
Сообщений: 36
09.04.2024, 21:37  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Plastic _frog_, без условного оператора рекурсию не построишь. А где я этот код видел?
Цитата Сообщение от Catstail Посмотреть сообщение
без условного оператора рекурсию не построишь
Возможно ли как-то с помощью "filter" ?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38170 / 21105 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
10.04.2024, 07:27
Цитата Сообщение от Plastic _frog_ Посмотреть сообщение
с помощью "filter"
- всё и сделано с помощью filter, но без рекурсии.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.04.2024, 05:20
Цитата Сообщение от Catstail Посмотреть сообщение
без условного оператора рекурсию не построишь.
В условии нет запрета на исключения. Типа так:

Python
1
2
3
4
5
6
7
8
def f(n: int) -> int:
    _ = 1 // n
    try:
        return n + f(n - 1)
    except ZeroDivisionError:
        return n
    
print(f(5))
Добавлено через 46 секунд
Правильнее так:
Python
1
2
3
4
5
6
def f(n: int) -> int:
    try:
        _ = 1 // n
    except ZeroDivisionError:
        return 0
    return n + f(n - 1)
Добавлено через 1 минуту
Python
1
2
3
4
5
def task_1(a: list):
    try:
        return a[0] + task_1(a[1:])
    except IndexError:
        return []
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38170 / 21105 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
13.04.2024, 05:58
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
В условии нет запрета на исключения.
- тогда сразу же следует два вопроса:

1) не является ли группа try-except завуалированной формой ветвления? (Ответ - да, безусловно)
2) какова методическая цель этой задачи? Догадаться, что if можно смоделировать с помощью try-except? Зачем? (Учитывая общий "настрой" этой задачи, последнее крайне маловероятно)

Кстати, можно с пом. while, но смысл?

Python
1
2
3
4
5
6
7
def sum_list(lst):
    sz=len(lst)
    while sz > 0:
        return lst[0]+sum_list(lst[1:])
    return 0
    
print(sum_list([1,2,3,4]))
1
0 / 0 / 0
Регистрация: 09.11.2022
Сообщений: 36
13.04.2024, 13:30  [ТС]
Как исправить код, чтоб был без map, filter и reduce , но при этом использовать только вызовы функций, определение анонимных функций на основе вызовов других функций, рекурсию.
То есть запрещено использовать циклы, условные операторы, операторы присваивания, операторы контроля кроме return?
Помогите пожалуйста.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from functools import reduce
 
def gen_sublists(lst):
    return list(map(lambda start: list(map(lambda length: lst[start:start+length], range(1, len(lst)-start+1))), range(0, len(lst))))
 
 
def concaten_list(a):
    return (len(a) != 0 and (a[0] + concaten_list(a[1:] )) or [] )
 
 
def analyze_sublists(a):
    return list(map(lambda x: (x,sum(x),len(x)),concaten_list(gen_sublists(a))))
    
def find_max_sublist(a,s):
    return max(filter(lambda x: x[1] <= s,analyze_sublists(a)),key=lambda x: x[2])
 
print(find_max_sublist([1,2,3,4,5,6,7,8,9],15))
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.04.2024, 15:46
Без filter() решение невозможно, автор толстый тролль.

Python
1
2
3
4
5
6
7
8
9
10
11
12
def func(lst: list[int], limit: int) -> list[int]:
    for i in range(len(lst), 0, -1):
        for j in range(len(lst) - i - 1, -1, -1):
            rrr = lst[j:j + i]
            if sum(rrr) <= limit:
                return rrr
    return []
    
    
lst = [1,2,0,0,4,6]
limit = 3
print(func(lst, limit))
Добавлено через 29 минут
Только сейчас заметил, что здесь оператор присваивания…
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def f1(n: int):
    yield from range(n - 1, 0, -1)
 
def f2(n: int, i: int):
    yield from range(n - i - 1, -1, -1)
 
def f3(n: int):
    g = f1(n)
    
    def f4():
        try:
            i = next(g)
        except StopIteration:
            return
        g2 = f2(n, i)
            
        def f5():
            try:
                j = next(g2)
            except StopIteration:
                return
            print(i, j + i)
            f5()
            
        f5()
        f4()
    f4()
    
print(f3(6))
Добавлено через 23 минуты
Цитата Сообщение от Plastic _frog_ Посмотреть сообщение
был без map, filter и reduce , но при этом использовать только вызовы функций, определение анонимных функций на основе вызовов других функций, рекурсию.
То есть запрещено использовать циклы, условные операторы, операторы присваивания, операторы контроля кроме return?
Помогите пожалуйста.
Python
1
2
3
4
5
6
7
8
9
10
11
12
def func(lst: list[int], limit: int) -> list:
    s = base64.b64decode(b'''\
ZGVmIGZ1bmMobCxtKToKIHE9cmFuZ2UKIHc9bGVuKGwpCiBmb3IgaSBpbiBxKHcsMCwtMSk6CiAg
Zm9yIGogaW4gcSh3LWktMSwtMSwtMSk6CiAgIHI9bFtqOmoraV0KICAgaWYgc3VtKHIpPD1tOnJl
dHVybiByCiByZXR1cm4gW10=''')
    exec(compile(s, '<string>', 'exec'), globals())
    return func(lst, limit)
 
    
lst = [1,2,0,0,4,6]
limit = 3
print(func(lst, limit))
1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
13.04.2024, 21:49
Цитата Сообщение от Plastic _frog_ Посмотреть сообщение
использовать
Цитата Сообщение от Plastic _frog_ Посмотреть сообщение
рекурсию
Цитата Сообщение от Plastic _frog_ Посмотреть сообщение
запрещено использовать
Цитата Сообщение от Plastic _frog_ Посмотреть сообщение
условные операторы
Взаимоисключающие условия. Приведи полный текст задания без своей отсебятины.
0
0 / 0 / 0
Регистрация: 09.11.2022
Сообщений: 36
13.04.2024, 23:20  [ТС]
Задание :
Выделить из заданного перечня чисел последовательность самой большой длины, состоящую из элементов, расположенных подряд, сумма которых не превышает заданное значение.

Важно:
использовать только вызовы функций, определение анонимных функций на основе вызовов других функций, рекурсию.
То есть запрещено использовать циклы, условные операторы, операторы присваивания, операторы контроля кроме return.
Map, filter, reduce использовать нельзя .
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38170 / 21105 / 4307
Регистрация: 12.02.2012
Сообщений: 34,696
Записей в блоге: 14
14.04.2024, 06:46
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
автор толстый тролль.
+ 1000!
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
14.04.2024, 08:09
Цитата Сообщение от Catstail Посмотреть сообщение
2) какова методическая цель этой задачи?
Полностью с вам согласен.

Я ещё могу понять (но не принять), когда изучают list comprehension, хотя от него по моему мнению больше проблем. И понимаю, когда знакомят с функциональным программированием (опять же имхо в питоне оно не очень). Вот продублирую свой же пример:

Python
1
2
3
4
5
6
7
8
def func(lst: list[int], limit: int) -> int:
    return max(
        map(lambda x: x[0],
        filter(lambda x: x[1] <= limit,
        map(lambda x: (len(x), sum(x)),
        map(lambda x: lst[x[0]:x[1]],
        product(range(len(lst) + 1), repeat=2)
    )))))
Тут чаще всего подход, что мы берём что-то итерируемое и модицифируем map-ами или фильтруем/сортируем в функциональном стиле.

Но запрет одновременно и циклов, и map'ы…
2
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
14.04.2024, 18:08
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Но запрет одновременно и циклов, и map'ы…
Ну это очевидно, что отсебятина от ТСа, т. к. не может объяснить решение преподу. Как и рекурсия без условия выхода из нее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.04.2024, 18:08
Помогаю со студенческими работами здесь

Составить программу вывода самой большой цифры в записи заданного числа
Составить программы в Pascale 1 задача. Найти сумму всех чисел в строке. 2 задача. Составить программу вывода самой большой цифры в...

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

Выделить из массива возрастающую последовательность максимальной длины
Дано натуральное число n и массив действительных чисел а. В данном массиве выбрать возрастающую последовательность максимальной длины.

Найти ряды с самой маленькой и самой большой сумой и выводить их. Массивы
Помогите ! Задана целочисленная матрица n * m . Написать программу, которая позволяет находить ряды с самой маленькой и самой большой...

Вывести данные о квартирах с самой большой площадью и самой маленькой
Задание 5: Структуры Дана информация о пяти квартирах. Запись имеет вид: фамилия владельца, площадь, число комнат, этаж. Вывести...


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

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