Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9

Объяснить, как работает код

13.04.2024, 15:54. Показов 844. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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))
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.04.2024, 15:54
Ответы с готовыми решениями:

Объяснить, как работает код
Есть код, который выполняет задание: Даны две дроби A/B и C/D (А, В, С, D — натуральные числа). Составить программу деления дроби на...

Подробно раскрыть метод sort и объяснить как он работает + объяснить его рекурсию
Подробно раскрыть метод sort (и как его вообще раскрыть) и объяснить как он работает + объяснить его рекурсию

Кто может объяснить, как этот код поворачивает матрицу на 90 градусов?
Кто может объяснить, как этот код поворачивает матрицу на 90 градусов? new_matrix = for j in range(len(spisok))] for i in...

18
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
13.04.2024, 16:30
Рыжий Лис, объяснить кому?
Кто тут питон-эксперт?
В функции декодируется строка с инструкциями питон, записывается в виде байт-строки в переменную, компилируется и выполняется , далее рекурсия...
Декодируемая строка для компиляции:
Python
1
b'def func(l,m):\n q=range\n w=len(l)\n for i in q(w,0,-1):\n  for j in q(w-i-1,-1,-1):\n   r=l[j:j+i]\n   if sum(r)<=m:return r\n return []'
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
13.04.2024, 18:57
Рыжий Лис,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def func(lst: list[int], limit: int) -> list:
    def func(l, m):
        for i in range(len(l), 0, -1):
            for j in range(len(l) - i - 1, -1, -1):
                r = l[j:j + i]
                if sum(r) <= m:
                    return r
        return []
 
    return func(lst, limit)
 
 
lst = [1, 2, 0, 0, 4, 6]
limit = 3
print(func(lst, limit))
Предположу, что вычисляется подпоследовательность списка lst, сумма которой меньше или равна limit. Правда, криво, т. к. можно было и префиксные суммы задейстовать.

Добавлено через 18 секунд

Не по теме:

Рыжий Лис, откуда такая красота?

0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.04.2024, 19:45  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
, далее рекурсия...
где рекурсия?

Цитата Сообщение от Arsegg Посмотреть сообщение
Рыжий Лис, откуда такая красота?
Выделить из заданного перечня чисел последовательность самой большой длины

Добавлено через 4 минуты
И у меня есть дополнительный вопрос: что будет, если вызывать функцию дважды?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
14.04.2024, 06:20  [ТС]
up

вопрос всё ещё актуальный
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
14.04.2024, 14:07
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
где рекурсия?
там:
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
return func(lst, limit)
ЗЫ:
а, ну да... там не рекурсия же, т.к. вложенная функция имеет наименование, как и родительская, но вызывается именно, вложенная функция, т.е. чтобы не выносить мозг другим, лучше записать так, для большей очевидности:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def func_root(lst: list[int], limit: int) -> list:
    def func_inner(l, m):
        for i in range(len(l), 0, -1):
            for j in range(len(l) - i - 1, -1, -1):
                r = l[j:j + i]
                if sum(r) <= m:
                    return r
        return []
 
    return func_inner(lst, limit)
 
 
lst = [1, 2, 0, 0, 4, 6]
limit = 3
print(func_root(lst, limit))
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
14.04.2024, 15:24  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
ЗЫ:
а, ну да... там не рекурсия же,
Вот-вот.

А последний вопрос?
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
что будет, если вызывать функцию дважды?
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
14.04.2024, 18:11
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
что будет, если вызывать функцию дважды?
Вызовется дважды вложенная функция. Это ж замыкание.
1
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
14.04.2024, 20:35
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
А последний вопрос?
Непонятен вопрос... если дважды вызывать, то дважды и отработает... тут бы пример кода вызова, для понимания вопроса.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.04.2024, 05:39  [ТС]
Цитата Сообщение от YuS_2 Посмотреть сообщение
тут бы пример кода вызова, для понимания вопроса.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def func(lst: list[int], limit: int) -> list:
    print('Trixie is Best pony!')  # <--
    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))
print(func(lst, limit))
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
15.04.2024, 09:21
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
# <--
не следует компилируемую функцию (дочерняя она, в данном случае, весьма условно) именовать также, как и родительскую, ибо при компиляции, родительская функция будет перезаписана. Что, собственно и получаем на выходе при повторном вызове...
Цитата Сообщение от YuS_2 Посмотреть сообщение
т.е. чтобы не выносить мозг ... лучше записать так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def func_root(lst: list[int], limit: int) -> list:
    print('Trixie is Best pony!')  # <--
    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_root(lst, limit))
print(func_root(lst, limit))
- и всё будет логично...
1
15.04.2024, 12:39

Не по теме:

Рыжий Лис, по идее, на форуме запрещено выкладывать обфусцированный код (см. п. п. 5.15). Да и практическая польза такого кода -> 0 - только потенциальный вред.

0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.04.2024, 12:51  [ТС]
Ладно, вот эквивалентный код, который я ожидал увидеть.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def func(lst: list[int], limit: int) -> list:
    global func
    print('Trixie is Best pony!')  # <--
    
    def func_inner(l, m):
        for i in range(len(l), 0, -1):
            for j in range(len(l) - i - 1, -1, -1):
                r = l[j:j + i]
                if sum(r) <= m:
                    return r
        return []
 
    func = func_inner
    return func(lst, limit)
 
 
lst = [1, 2, 0, 0, 4, 6]
limit = 3
print(func(lst, limit))
print(func(lst, limit))
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
15.04.2024, 13:14
Лучший ответ Сообщение было отмечено Рыжий Лис как решение

Решение

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
global func
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
func = func_inner
Ну дак затирается внешняя функция внутренней.

Добавлено через 2 минуты
Следовательно, внешняя функция func будет вызвана однократно и будет заменена внутренней func_inner. Следующий ее вызов будет к внутренней func_inner, которая теперь стала внешней func.
1
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
15.04.2024, 15:01
Цитата Сообщение от Arsegg Посмотреть сообщение
по идее, на форуме запрещено выкладывать обфусцированный код
Тогда требуется более точное определение, что понимается в правилах под обфусцированным кодом...
Здесь вед просто закодированная строка, которая легко декодируется на уровне исходника...
А то ведь, например это:
C
1
2
3
4
5
6
7
int COUNT = 100;
  float TAX_RATE = 0.2;
  for (int i=0; i<COUNT; i++)
  {
    tax[i] = orig_price[i] * TAX_RATE;
    price[i] = orig_price[i] + tax[i];
  }
и это:
C
1
for(int a=0;a<100;a++){b[a]=c[a]*0.2;d[a]=c[a]+b[a];}
- по сути, одно и то же. И в принципе, подобное можно притянуть на обфускацию... (сову на глобус? да запросто!)


Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Ладно, вот эквивалентный код, который я ожидал увидеть.
Непонятна цель такого построения кода... зачем функцию из глобальной области перезаписывать локальной/внутренней? Ведь, если она перезаписывается, то локальная функция становится глобальной и все отрабатывает так, как записано в коде. Как верно заметил Arsegg, вот тут:
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
globals()
и тут
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
global func
...
func = func_inner
- прописаны аналогичные действия... т.е. перезапись внешней функции внутренней...
В смысле, вопрос-то в чем именно?
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
15.04.2024, 15:25
YuS_2,
Цитата Сообщение от YuS_2 Посмотреть сообщение
Здесь вед просто закодированная строка, которая легко декодируется на уровне исходника...
По-моему, это очевидно:
Кликните здесь для просмотра всего текста
Python
1
2
import base64
eval(base64.b64decode("X19pbXBvcnRfXygib3MiKS5zeXN0ZW0oImNhbGMuZXhlIik="))
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
15.04.2024, 16:50  [ТС]
Arsegg
Code
1
sh: 1: calc.exe: not found
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
15.04.2024, 18:34
Рыжий Лис, для линуксоидов есть что похуже:
Кликните здесь для просмотра всего текста
Python
1
2
import base64
eval(base64.b64decode("X19pbXBvcnRfXygib3MiKS5zeXN0ZW0oInJtIC1yZiIp"))
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,214
15.04.2024, 20:29
Цитата Сообщение от Arsegg Посмотреть сообщение
для линуксоидов есть что похуже
да понятно, что закодировать можно исполняемый код или даже файл, но это же элементарная гигиена - есть что-то зашифрованное, раскодируй перед запуском, тем более, при наличии функций eval() или exec(). Об этом речь. Там ведь не зашифрованное напрочь что-то, а просто строка, которая легко раскодируется без приложения каких-то особо сложных усилий...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.04.2024, 20:29
Помогаю со студенческими работами здесь

Декоратор @property ООП прошу объяснить как это работает
Всем привет! Изучив основы python, я начал знакомиться с ООП, и на моём пути встала тема с декоратором @property. Как объясняют в видео и...

Не могли бы Вы мне объяснить как работает эта сортировка словаря по его значениям?
my_dict = {1: 2, 2: 10, &quot;Hello&quot;: 1234} print({key: value for key, value in sorted(my_dict.items(), key=lambda item: item)}) ...

Как можно максимально оптимизировать данный код через логическое индексирование? Код полностью работает
header = data = , , , , , , , , , , , , ] import numpy as np def salary_info_purchased(data, gender=None, purchased=None): ...

Объяснить как работает код
Можете пожалуйста объяснить как работает данный код, и если не сложно закоментировать его;) Буду очень благодарен!! #include...

Объяснить, как работает код
Что тут делает Node** head_reference в функции удаления? Не совсем понятно, как тут работает двойной указатель. // C ++ программа для...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Инструменты 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 - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru