Учим питон (или пайтон)

Автор _Swetlana, 08 января 2024, 21:30

« назад - далее »

Hellerick

Знать базу, конечно, полезно, но, по-моему, последние лет двадцать странички так не делают.

_Swetlana

#51
Цитата: Vesle Anne от 10 марта 2024, 13:22Ну что ж так?
Негодяи. Теперь до конца мая будут html и css учить. Так и тому учить нормально не могут. Дети вроде загорелись, все хотят сайты делать, и уже после второго занятия стало непонятно, что к чему. Щас на степике читаю - все понятно.

Другое дело, насколько это все актуально для сайтостроения  :donno:

P.S. седни мне со степика пришло письмо-увещевание: что же вы записались на ООП и не заходите? Не надо отчаиваться! Занимайтесь, и у вас все получится!
Извините, вам запрещён просмотр содержимого спойлеров.

_Swetlana


Vesle Anne

Не, меня html интересует максимум в контексте парсинга сайтов. Не мое.

_Swetlana

Цитата: Vesle Anne от 15 марта 2024, 21:40Не, меня html интересует максимум в контексте парсинга сайтов. Не мое.
Хочу сделать свой пет-проект,
онлайн- сервис для оптимального размещения обслуживающих центров (центров и медиан) с ограничениями (стандартные алгоритмы размещают без ограничений). М.б., и html пригодится  :)

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

Hellerick

Цитата: _Swetlana от 16 марта 2024, 10:11онлайн- сервис для оптимального размещения обслуживающих центров (центров и медиан) с ограничениями (стандартные алгоритмы размещают без ограничений). М.б., и html пригодится  :)

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

_Swetlana

Цитата: Hellerick от 16 марта 2024, 10:37
Цитата: _Swetlana от 16 марта 2024, 10:11онлайн- сервис для оптимального размещения обслуживающих центров (центров и медиан) с ограничениями (стандартные алгоритмы размещают без ограничений). М.б., и html пригодится  :)

Меня всегда интересовала эта задача с учетом возможности расширения сети центров.
Как размещать центры так, чтобы всегда имелось хорошее место для следующего центра.
Любопытно. Никогда не думала об этой задаче в таком ключе. А как вы сформулирует критерий оптимизации?

_Swetlana

На степике 23 марта в 12.00 будет конкурс: питон + задачи на логику. Я записалась ;D

https://habr.com/ru/articles/799511/

Hellerick

#58
Цитата: _Swetlana от 16 марта 2024, 10:39
Цитата: Hellerick от 16 марта 2024, 10:37
Цитата: _Swetlana от 16 марта 2024, 10:11онлайн- сервис для оптимального размещения обслуживающих центров (центров и медиан) с ограничениями (стандартные алгоритмы размещают без ограничений). М.б., и html пригодится  :)

Меня всегда интересовала эта задача с учетом возможности расширения сети центров.
Как размещать центры так, чтобы всегда имелось хорошее место для следующего центра.
Любопытно. Никогда не думала об этой задаче в таком ключе. А как вы сформулирует критерий оптимизации?

Необходимо придумать алгоритм постепенного заполнения заданной области центрами в количестве от 1 до N.
Критерий: составляем таблицу, в которой для числа центров от 2 до N указывается соответствующее отношение нагрузки наиболее загруженного центра к наименее загруженному. Идеальным алгоритмом является тот, при котором максимальное значение в этой таблице минимально.

Для начала можно потренироваться на одномерном пространстве. Условно говоря, мы разрабатываем однотипную продукцию в разных ценовых категориях. На какие именно ценовые категории нам надо ориентироваться, если мы каждый год выпускаем по новой модели и хотим избежать того, чтобы в каком-то ценовом диапазоне наши продукты слишком толпились, а в другом были мало представлены.

_Swetlana

Цитата: Hellerick от 16 марта 2024, 10:57
Цитата: _Swetlana от 16 марта 2024, 10:39
Цитата: Hellerick от 16 марта 2024, 10:37
Цитата: _Swetlana от 16 марта 2024, 10:11онлайн- сервис для оптимального размещения обслуживающих центров (центров и медиан) с ограничениями (стандартные алгоритмы размещают без ограничений). М.б., и html пригодится  :)

Меня всегда интересовала эта задача с учетом возможности расширения сети центров.
Как размещать центры так, чтобы всегда имелось хорошее место для следующего центра.
Любопытно. Никогда не думала об этой задаче в таком ключе. А как вы сформулирует критерий оптимизации?

Необходимо придумать алгоритм постепенного заполнения заданной области центрами в количестве от 1 до N.
Критерий: составляем таблицу, в которой для числа центров от 2 до N указывается соответствующее отношение нагрузки наиболее загруженного центра к наименее загруженному. Идеальным алгоритмом является тот, при котором максимальное значение в этой таблице минимально.

Для начала можно потренироваться на одномерном пространстве. Условно говоря, мы разрабатываем однотипную продукцию в разных ценовых категориях. На какие именно ценовые категории нам ориентироваться, если мы каждый год выпускаем по новую модель и хотим избежать того, чтобы в каком-то ценовом диапазоне наши продукты слишком толпились, а в другом были мало прставлены.
Интересно, подумаю.

_Swetlana

Суммируем числа от 1 до 7 восходящей и нисходящей рекурсией. Для определённости в обоих случаях идёт перебор слагаемых от 7 до 1. Можно было, конечно, наоборот.
 
# Задача о нахождении суммы первых n натуральных чисел

def ascending_recursion(n: int, partial_sum) -> int:
    # восходящая или хвостовая рекурсия
    # 1) Главный признак - нет отложенного действия, т.к. рекурсивный вызов является последней операцией перед возвратом из функции.
    # 2) В рекурсию в качестве параметра передается текущая частичная сумма, поэтому частичная сумма известна на каждом уровне рекурсии.
    # 3) Обнуление суммы происходит при вызове.
    # 4) Оптимизация хвостовой рекурсии (в некоторых языках программирования) снимает ограничения на глубину рекурсии.
   
    if n == 0: return partial_sum # граничное условие рекурсии
    return ascending_recursion(n - 1, partial_sum + n) # рекурсивный вызов

def descending_recursion(n: int) -> int:
    # нисходящая рекурсия
    # 1) Главный признак - есть отложенное действие: пока вызов рекурсивный вызов не вернул результат, слагаемое уходит в стек.
    # 2) При выполнении граничного условия рекурсии происходит обнуление суммы. К этому времени все члены последовательности находятся в стеке.
    # 3) В рекурсию передается только граничное значение члена последовательности, частичные суммы до останова рекурсии не известны.

    if n == 0: return 0 # граничное условие рекурсии
    return n + descending_recursion(n - 1) # рекурсивный вызов
 
print(f"восходящая рекурсия: S(7) = {ascending_recursion(7, 0)}")
print(f"нисходящая рекурсия: S(7) = {descending_recursion(7)}")

Vesle Anne

Цитата: _Swetlana от 16 марта 2024, 10:11
Цитата: Vesle Anne от 15 марта 2024, 21:40Не, меня html интересует максимум в контексте парсинга сайтов. Не мое.
Хочу сделать свой пет-проект,
онлайн- сервис для оптимального размещения обслуживающих центров (центров и медиан) с ограничениями (стандартные алгоритмы размещают без ограничений). М.б., и html пригодится  :)
я в качестве пет-проекта своего бота буду допиливать. В следующем месяце, в этом все ресурсы колаба закончились уже  :D

_Swetlana

Цитата: Vesle Anne от 16 марта 2024, 11:42
Цитата: _Swetlana от 16 марта 2024, 10:11
Цитата: Vesle Anne от 15 марта 2024, 21:40Не, меня html интересует максимум в контексте парсинга сайтов. Не мое.
Хочу сделать свой пет-проект,
онлайн- сервис для оптимального размещения обслуживающих центров (центров и медиан) с ограничениями (стандартные алгоритмы размещают без ограничений). М.б., и html пригодится  :)
я в качестве пет-проекта своего бота буду допиливать. В следующем месяце, в этом все ресурсы колаба закончились уже  :D
А у колаба какие-то ограничения есть?

Vesle Anne

Цитата: _Swetlana от 16 марта 2024, 16:38А у колаба какие-то ограничения есть?
Есть  :)   Но с простыми программами вы их не увидите.
Я только на диффузионках сдалась и купила платный  :) ну и llm гонять тоже не просто.

_Swetlana

Цитата: Hellerick от 16 марта 2024, 10:57
Цитата: _Swetlana от 16 марта 2024, 10:39
Цитата: Hellerick от 16 марта 2024, 10:37
Цитата: _Swetlana от 16 марта 2024, 10:11онлайн- сервис для оптимального размещения обслуживающих центров (центров и медиан) с ограничениями (стандартные алгоритмы размещают без ограничений). М.б., и html пригодится  :)

Меня всегда интересовала эта задача с учетом возможности расширения сети центров.
Как размещать центры так, чтобы всегда имелось хорошее место для следующего центра.
Любопытно. Никогда не думала об этой задаче в таком ключе. А как вы сформулирует критерий оптимизации?

Необходимо придумать алгоритм постепенного заполнения заданной области центрами в количестве от 1 до N.
Критерий: составляем таблицу, в которой для числа центров от 2 до N указывается соответствующее отношение нагрузки наиболее загруженного центра к наименее загруженному. Идеальным алгоритмом является тот, при котором максимальное значение в этой таблице минимально.
Не поняла с критерием. Нагрузку делим равномерно на любое количество центров. Отношение всегда равно 1.

Hellerick

Цитата: _Swetlana от 16 марта 2024, 21:49Не поняла с критерием. Нагрузку делим равномерно на любое количество центров. Отношение всегда равно 1.

По моей логике, каждый центр обслуживает ту область, к которой он ближайший.

_Swetlana

Цитата: Hellerick от 16 марта 2024, 21:52
Цитата: _Swetlana от 16 марта 2024, 21:49Не поняла с критерием. Нагрузку делим равномерно на любое количество центров. Отношение всегда равно 1.

По моей логике, каждый центр обслуживает ту область, к которой он ближайший.
Давайте тогда в терминах одномерной упаковки. Имеется n камней с целым положительным весом. Имеется m куч, вместимость кучи не ограничена. Для каждого камня известно множество допустимых куч (то есть в далёкие кучи камни не кладутся, только в соседние).
Вопрос. Разложить камни по кучам таким образом, чтобы вес максимальной кучи был минимален.

Такая у вас задача?

_Swetlana


_Swetlana

Но это не задача о расположении центров, т.к. принадлежность камней кучам закреплена.
А если у нас есть карта, к примеру, мы любым образом размещаем обсл. центры, и ставим условие, что клиент обслуживается ближайшим к нему центром и минимизируем загрузку самого загруженного центра, то это другая задача.
Вообще, если у вас какая-то реальная производственная задача, то расскажите, в чем она заключается, а я сделаю для нее математическую постановку. Вдруг за счёт каких-то ограничений удастся уйти от NP-hard  :)

Vesle Anne

Эту задачу можно описать через марковский процесс и скормить RL-алгоритму. Кажется

_Swetlana

В первую очередь нужно разобраться с принадлежностью задачи или к классу P (решается эффективными алгоритмами, т.е. за полиномиальное время, отсюда название P), либо доказать, что она NP-полная (трудная), а дальше разбираться, к какому типу она относится, что для неё имеется. Пока это не сделали, и говорить не о чем.
Я еще не поняла, с какой именно задачей мы имеем дело, поэтому не тороплюсь что-то доказывать.

Вот, например, задача для эвклидовой плоскости. В русском переводе её назвали "Скопления", а на самом деле вот:
MINIMUM GEOMETRIC DISK COVER
https://www.csc.kth.se/~viggo/wwwcompendium/node150.html

Если нам нужно разместить заданное число p центров (минимизируем расстояние от центра до самого удалённого клиента) или p медиан (минимизируем суммарное расстояние, проходимое клиентами до центров), то они обе NP-hard. 

_Swetlana

Участвовала в конкурсе от "Поколения Пайтон" на образовательной платформе степик, где я уже больше трёх месяцев учусь, не менее чем на двух курсах одновременно ;D
Задачка оказалась совсем не тем, что я думала математически корректной, интересной и с простым решением.
Попробуйте свои силы в решении этой задачи. Формулировку привожу в том виде, в каком она была на конкурсе.

Задача.
Имеется функция magic(), принимающая три целочисленных аргумента, в теле которой определены константы a, b, c, являющиеся натуральными числами. Требуется определить значения констант a, b и c не более, чем за два вызова данной функции.


Автор задачи Тимур Гуев опубликовал на хабре решение
ссылка

Hellerick

Готов определить вообще без вызова этой функции.
Я как-то писал программу, которая читала код самой себя.
(А потом в свой же код сваливала результаты вычислений.)

_Swetlana

Цитата: Hellerick от 04 апреля 2024, 04:52Готов определить вообще без вызова этой функции.
Я как-то писал программу, которая читала код самой себя.
(А потом в свой же код сваливала результаты вычислений.)
Конкурс сейчас закрыт, когда откроют, я сообщу, можете попробовать.
Только имейте в виду, что функция а) откомпилирована; б) видимо, авторы задачи запретили использование некоторых функций, что проверяется при запуске теста.
 

_Swetlana

Цитата: Hellerick от 04 апреля 2024, 04:52Готов определить вообще без вызова этой функции.
Я как-то писал программу, которая читала код самой себя.
(А потом в свой же код сваливала результаты вычислений.)
Задачу открыли. Вот она
https://stepik.org/lesson/1264319/step/15?unit=1278444
Покажите мне, как можно было её хакнуть.

А то весь день читаешь про всякие методы, пишешь что-то вроде
import dis
s = dis.Bytecode(magic).dis()
new_s = s.split('\n')
lst = []
for a in new_s:
    if 'LOAD_CONST' in a:
        ind1 = a.find('(')
        ind2 = a.find(')')
        lst.append(int(a[ind1+1:ind2]))
print(lst, sum(i*i for i in lst)) 

а в ответ:
В голосе Гвидо слышится разочарование:
—  А я почти в тебя поверил... Ладно уж, у тебя есть еще попытка.

Failed test #1 of 7. Runtime error

Error:
Traceback (most recent call last):
  File "/sandbox/main.py", line 5, in <module>
    s = dis.Bytecode(magic).dis()
  File "/usr/local/lib/python3.10/dis.py", line 475, in __init__
    self.codeobj = co = _get_code_object(x)
  File "/usr/local/lib/python3.10/dis.py", line 148, in _get_code_object
    raise TypeError("don't know how to disassemble %s objects" %
TypeError: don't know how to disassemble magic objects

Быстрый ответ

Предупреждение: в этой теме не было сообщений более 120 дней.
Возможно, будет лучше создать новую тему.

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
ALT+S — отправить
ALT+P — предварительный просмотр