Это копия, сохраненная 20 августа 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Ещё книжек? https://yadi.sk/d/tArKKuQu3Kejuq
Больше книжек Богу книжек! https://yadi.sk/d/H-00n-UG3RSQem
Предыдущий
>>1421793 (OP)
Пытаюсь в Трединг....
В общем задача задать аргументы для 4 потоков, они изменяемые и зависят от входящих данных, и чтобы каждый поток выполнялся строго друг за другом, 1(2 или 3 или 4) закончился начался снова 1 (2 или 3 или 4) соответственно, но с другими данными. Как это делается?
мы задаем в функции аргумент в который будем передавать threading.Event()
и в самой функции ставим вот ето вот
арг = агрумент уникальный для каждого из тредов
арг.wait()
арг.clear()
тело функции
арг.set()
?
вообще че то я запутался с динамическими аргументами... надо попробовать просто написать это без динамики со статическими данными.
неистово проиграл
Мое увожение
libpython2.7 : Depends: libpython2.7-stdlib (= 2.7.15-4ubuntu4~18.04) but 2.7.15~rc1-1ubuntu0.1 is to be installed
-1ubuntu0.1 is to be installed
Depends: libpython2.7-stdlib (= 2.7.15-4ubuntu4~18.04) but 2.7.15~rc1-1ubuntu0.1 is to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
Никакие комманды не работают,хелп
Почему же тогда чтоб получит значение __value класса A, то мне надо написать var._A__value?
1280x720, 0:26
if чота:не-pass else: if (чота2):не-pass else: не-пасс
?
знакомому с очень широким монитором очень нада!
'a' if 0 else 'b' if 0 else 'c'
Поправьте что-то или просто обоссыте.
https://pastebin.com/zTFzbuXe
вроде все идет нормально. размыми "тредами" чи не? как узнать то.... хер его знает
А что это? Местную инкапсуляцию ультрапросто обходить, то, что никто не ебошит приватные методы вне класса держится только на соглашении
Есть массив пользователей, поскольку обращаться к базе по средствам одного аккаунт нельзя очень часто и много, я хочу разделить массив между техническими аккаунтами.
Я не погромировал и не учился этому, все что делаю делаю на ощупь по
Собственно каждый раз запуская тред мне надо передать в него нужные параметры имя пароль и массив который он будет обрабатывать.
Понял что можно запустить тред и отдать ему только маасив // количество тех акаунтов. А разделение на количество запросов можно организовать в самой функции.
Собственно вопрос в том как организовать многопоточность с динамическим данными юсер:пас . у меня не правильно, надо задать жёсткий контроль в количестве и первым ждать исполнение последнего. Чтобы не на плодить этого говна кучу кучную.
>обращаться к базе по средствам одного аккаунт нельзя
>по средствам
На питоне все такие безграмотные мудаки, или ты один такой феномен?
Да.
Я, кажется, что-то делаю не так. Мне нужно было написать программу(в одно рыло) на мобилки + сервер для их обслуживания. К слову, опыта работы у меня было не много. Естественно я начал искать фреймворки. Начиркал, как Грэди Буч завещал, схему классов и объектов для мобилок(сразу же столкнулся с тем что не понятно на каком моменте можно прекращать придумывать абстрактные классы и писать уже код). Начал пилилить мобильное приложение. Столкнулся с тем, что объекты классов стало очень сложно с какого-то момента использовать и модифицировать. И в конечном счете, вместо красивого ООП стиля все вылилось в хз что за стиль, яля говнокод. Ок.
После этого взялся за серверную часть. Там я выбрал фреймфорк джанго(потому что немного его знал). Опять начал изучать по хожу написания кода вместе с изучением фреймворка. В результате, куча времени и я опять сталкиваюсь с тем: писать ли функцию/класс под конкретную нужду, или продумывать офигенный класс-родитель который я потом могу использовать наследованием или сменой параметров объекта под любую задачу того рода для которой этот класс готовился. Меня тянет сделать этот клутой класс-родитель. И тут я понимаю что это иногда занимает недели, когда написав быстренько под конкретную задачу займет 1-3 дня. Потом я прочитал в закрепе как кто-то написал что для нормального программиста писать 15 000 кода - это норма. Я посмотрел свой код. Ну, я написал около 2 000 питоновского кода за пол года. Я "быстрый".
Чертовы фреймворки. Говорят что должны ускорить разработку. Чертов джанго такой большой, что это утверждение у меня стоит под вопросов. Чертов ООП. Говорят что он должен ускорить разработку за счет наследования. Хрен там, все работает не так как планировалось. Не всегда удобно менять методы. Если хочешь изменить класс фреймворка, то надо изучить его код, потому что в доках не всегда дается полноценная информация.
Правильно/не правильно я работаю? Как вы проектируете и воплощаете в жизнь свой код? Можете ли кинуть примеры хорошего кода? Ведь, если смотреть первый попавшийся на гитхабе, то нет гарантии что код писал не говнокодер.
Я, кажется, что-то делаю не так. Мне нужно было написать программу(в одно рыло) на мобилки + сервер для их обслуживания. К слову, опыта работы у меня было не много. Естественно я начал искать фреймворки. Начиркал, как Грэди Буч завещал, схему классов и объектов для мобилок(сразу же столкнулся с тем что не понятно на каком моменте можно прекращать придумывать абстрактные классы и писать уже код). Начал пилилить мобильное приложение. Столкнулся с тем, что объекты классов стало очень сложно с какого-то момента использовать и модифицировать. И в конечном счете, вместо красивого ООП стиля все вылилось в хз что за стиль, яля говнокод. Ок.
После этого взялся за серверную часть. Там я выбрал фреймфорк джанго(потому что немного его знал). Опять начал изучать по хожу написания кода вместе с изучением фреймворка. В результате, куча времени и я опять сталкиваюсь с тем: писать ли функцию/класс под конкретную нужду, или продумывать офигенный класс-родитель который я потом могу использовать наследованием или сменой параметров объекта под любую задачу того рода для которой этот класс готовился. Меня тянет сделать этот клутой класс-родитель. И тут я понимаю что это иногда занимает недели, когда написав быстренько под конкретную задачу займет 1-3 дня. Потом я прочитал в закрепе как кто-то написал что для нормального программиста писать 15 000 кода - это норма. Я посмотрел свой код. Ну, я написал около 2 000 питоновского кода за пол года. Я "быстрый".
Чертовы фреймворки. Говорят что должны ускорить разработку. Чертов джанго такой большой, что это утверждение у меня стоит под вопросов. Чертов ООП. Говорят что он должен ускорить разработку за счет наследования. Хрен там, все работает не так как планировалось. Не всегда удобно менять методы. Если хочешь изменить класс фреймворка, то надо изучить его код, потому что в доках не всегда дается полноценная информация.
Правильно/не правильно я работаю? Как вы проектируете и воплощаете в жизнь свой код? Можете ли кинуть примеры хорошего кода? Ведь, если смотреть первый попавшийся на гитхабе, то нет гарантии что код писал не говнокодер.
Потому что это непонятная хуйня, где есть 2.5 книги и ролика по питону, но зато куча хуйни по жс и css редактор
Если в захламленном помещении легко найти то что нужно, то лучше оно. Ведь в чистом вообще ничего нет.
как фиксить?
https://pastebin.com/dMB448ta
Все педанты орфографии и грамоты такие желчные людишки, или только ты?
>>31701
>zip данных
>cycle аккаунтов
Не понимаю как мне это поможет.
У меня есть список ID, по каждому ID надо сделать запрос. Количество запросов ограничено во времени, чтобы сократить время обработки всех ID нужно запустить еще 3.
Или ты по оформлению кода и его заграждению примитивными циклами?
math.log
Мдя, алгоритмист из тебя
Что-то типа
exp_per_level = 1000
exp_sum = 0
lvl = 0;
while(exp_sum < target_exp):
\texp_sum += exp_per_level
\texp_per_level (star)= 1.2
\tlevel+=1
ЗЫ наверняка можно еще быстрее, учивая что next_level = log (exp_to_next_level/1000, 1.2), но я забыл как там эти ряды считаются
bump
как мне понять, сколько осталось опыта, который не потратился на уровень?
AttributeError
Ты можешь проводить эксперименты в консоли питона - набрать, например, str.foo, у класса str нет ни поля ни метода с именем foo, поэтому ты увидишь ошибку AttributeError. Можешь без исключений просто встроенной функцией проверять наличие атрибутировать у объекта: hasattr(obj, name), функция hasattr вернет True если в obj есть name, иначе False. А вообще, читай документацию
https://docs.python.org/3.7/library/exceptions.html#bltin-exceptions
проигрул. вот как я бы сделол. оно на единичку меньше експы возвращает потому что я не знаю обосрался ли ты.
def calc_lvl_m(exp):
....lvl = 0
....lvlexp = 1000
....while(lvlexp <= exp):
........exp -= lvlexp
........lvl += 1
........lvlexp = round(next_lvl_exp next_lvl_k*lvl) - 1
....print("lvl: {}\nexp: {}".format(lvl, exp))
....return lvl, exp
Там ведь вроде поиск не очень удобный
> Кажется, устарел, требуется обновление или замена на что-то другое
Да вроде не особо.
Другое дело, что гайд не окончен, но вряд-ли кто-то возьмётся доделать.
Сорри конечно, не могу читать код без __main__, если это не библиотека, переписывай.
Коллега на работе завёл себе несколько тетрадок и от руки записывает туда какие-то вещи(вплоть до новых слов на инглише) + распечатывает себе whitepaper'ы. Но он датасаентист с приветом небольшим.
Найти разницу между convexHull'ом и оригинальным изображением. Ты получишь бублик с разной толщиной краев. Там, где бублик тонкий, удали все совсем. Где толстый, оставь.
1. Уменьши его толщину https://docs.opencv.org/3.4/db/df6/tutorial_erosion_dilatation.html . Не факт что это нужно, но должно быть нужно
2. Бублик превратится в серию островков. Ищешь площадь каждого островка https://docs.opencv.org/trunk/dd/d49/tutorial_py_contour_features.html Если она достаточно большая, увеличиваешь этот островок на 1 пиксель (чтобы отменить то что было на этапе 1, если ты его делал), и копируешь на свою картинку. Если маленькая, нихуя не делаешь
спасибо
def some_function(group):
if group[group[“some_feature”] > 0.1].shape[0] > 0:
return group[group[“some_feature”] > 0.1]
else:
return group
Проблема в том, что возвращается датафрейм с индексами - “someId”, по которым разлелялись группы.
Все, разобрался
Там примеры есть работы, юзай их, не зря анон писал.
Правда насчёт актуальности хз ибо давно делали и апи могло обновиться.
Возможно, ты просто слишком сильно угорел по ООП и абстрагированию. Будь проще и код потянется.
Ты просто боишься, что твоя программа будет неидеальной. Страх ведет к стрессу, а стресс к прокрастинации.
Решение: забить хуй на код и решать задачи, оптимизируя проблемы по мере их появления.
Видение того, "как надо делать" не возникает ниоткуда. Опыт, сын ошибок трудных, как говорится, решает.
Ебаный двощ обезумел. Слово из спам листа в посте.
>Я, кажется, что-то делаю не так.
>Начиркал, как Грэди Буч завещал,
Я еще лет в 13 открыл в библио-глобусе его книгу и понял, что этот словоблуд вообще не стоит внимания.
>И в конечном счете, вместо красивого ООП стиля все вылилось в хз что за стиль, яля говнокод.
В ООП всегда так.
>Правильно/не правильно я работаю?
Нет. Набери в гугле "критика ООП" и читай, читай, читай.
>критика ООП
>ну наследование заебись
>да и всё остальное
>а вот инкапсуляция говно
>ну как бы потому что мне нужна свобода
Не набирай, она в конечном счёте сводится к этому.
Ты нигде не присваиваешь ничего списку a.
>>33540
Спасибо, почему-то думал что по итератору можно получить доступ к самому элементу. Вообще randint тут чисто филер для проверки, вообще у меня должен быть лист из массивов NumPy разной длины, где каждый элемент массива — случайное значение из словаря или совершенно новое созданное по образцу из одной из категорий, но это уже проблема другого порядка.
Читаю... и не могу понять, они ведь используют одни и те же методы надстройки над низкоуровневой библиотекой работы с сокетами.
вкатывальщик
requests - обёртка над urllib3. В остальном они немного по разному парсят урлы.
Конечно можно. Только итерируемую последовательность во время итерации менять нельзя.
for x in xs:
<делаем что-то с элементом x>
Здесь можно что-то делать с переменной x, но от присвоения переменной x какого-либо значения последовательность xs не поменяется.
Видишь, здесь >>33474 в первом примере итерируемая последовательность это range, а не список a, элементы этой последовательности используются как индексы для доступа к списку a и изменению его элементов
Открыл для себя global
for comment in stream_comments():
comm_body = comment.body
if any(list in comm_body for list in config.spam_list):
for i in comm_body:
if i != config.reply_comm:
comment.reply(config.reply_comm)
else:
continue
пытаюсь сделать такое:
бот агрица если в теле коментария(comm_body) есть слова из config.spam_list, далее отвечает на комментарий из config.reply_comm, НО если тело коментария уже содержит ответ из config.reply_comm, то он его пропускает и идет дальше. при подобном раскладе почему то не выходить(
можно. Если тебе надо передать ровно 8 элементов, а в na_data может быть больше, то код будет
foo(na_data[:8])
если список исходно из 8 элементов, то вообще
foo(na_data)
Заебись, спасибо.
тьфу, без [0]
Там еще есть grid, который, как можно догадаться, размещает элементы в ячейках таблицы, и place, который размещает элементы по очно заданным координатам.
Я сейчас с ума сойду. Надо перехватить событие закрытия окна, и я несколько дней не могу понять как это сделать. В одном источнике пишут, что надо добавить:
def closeEvent(self, e)
В класс описания окнна. Это не работает, функция не вызывается при закрытии. В другом источнике к этому добавляют в фуннкцию создания окна следующее:
quit = QAction("Quit", self)
quit.triggered.connect(self.closeEvent)
Это так же не работает, жалуется на неверное использование QAction:
QAction(parent: QObject = None): argument 1 has unexpected type 'str'
QAction(str, parent: QObject = None): argument 2 has unexpected type 'Ui_MainWindow'
QAction(QIcon, str, parent: QObject = None): argument 1 has unexpected type 'str'
Что я делаю не так? Как мне повесить событие на закрытие окна??
Не понимаю. Я использую окошко из QT-редактора, вот код:
https://pastebin.com/N33z2Ttc
Что я делаю не так? Подскажи плиз
Ты создаешь класс, наследуясь от object, а я от QMainWindow. object - базовый класс для всех.
я возможно недостаточно точно выразился. есть произвольная линуксовая система, на которой запущен скрипт командой python3 scriptname.py от имени рута, но запускал не я, хоть и есть доступ к руту. ни в / ни в ~ рута скрипта scriptname.py нет, да и через find/locate по всей системе он тоже не находится. мне нужно узнать, что именно делает скрипт, в иделае вообще получить его сорсы. как это можно сделать?
Но файл уже как бы удален же. Ему нужно как-то найти ссылку на файл, которую держит процесс скрипта.
как вообще интерпретатор питона реагирует на удаление файла, указанного при запуске?
Серьезно? Лезь в оперативу и сиди выдергивай по кусочкам результат работы.
Это я вижу. Тоесть QT-редактором вабще пользоваться нельзя, т.к. после него всё перепиливать надо?
ну т.е. питон при запуске считывает весь файл в какой нибудь постоянный буфер, который остаётся в процессе до выхода?
Не знаю, скорее всего никак не реагирует. Файл уже считан, преобразован в байткод и все необходимое держится в памяти, как я себе это представляю.
Да почему нет то? Можно. Там просто при мастере проекта нужно выбирать нужные вещи. Базовый класс, систему, целевую версию и т.д. От него и зависит, что тебе он даст в начале.
>>35314
Ну да. Никогда не видел результат работы sudo rm -rf /* в системе? Все, что осталось в оперативке - то и работает, пока не завершится. Так и работает в целом. Скрипт в оперативке.
>Да почему нет то? Можно. Там просто при мастере проекта нужно выбирать нужные вещи. Базовый класс, систему, целевую версию и т.д. От него и зависит, что тебе он даст в начале.
Есть на примете материал, который рассказывает как правильно сделать? Где там это всё выбирать.
Спасибо
Если честно, то не знаю. Я просто доки читаю и в vim пишу. qt creator только для c++ использовал. Вот тут вроде просто описывается, быстро глянул https://python-scripts.com/pyqt5
Вот тут уже подробнее, но касательно самой qt
https://www.riverbankcomputing.com/static/Docs/PyQt5/
>>35315
нашёл вот такой вот гайд https://gist.github.com/simonw/8aa492e59265c1a021f5c5618f9e6b12. пайтон шелл раскочегарил, а вот что дальше делать - пока не знаю. какими инструментами из шелла можно посмотреть какие функции/классы/модули имеются?
Наверное, постоянный вопрос в этих тредах, но сколько пройдёт времени Нормального обучения языку, прежде чем я смогу получать с этого какие-то деньги?
Ты можешь поместить скрипт в переменную а потом построчно его оттуда вытаскивать при помощи exec
>быстро глянул https://python-scripts.com/pyqt5
Ну вот тут он у них автоматом создаётся класс наследующий QMainWindow, а у меня при тех же действиях - от object.
каким образом, если я как раз и запустил этот pyrasite-shell для того, чтобы проанализировать скрипт? какие вообще у питоновского промта (который как >>> три > если вдруг разметка сожрёт выглядит) возможности к интроспекции? в том же гайде пишут, что можно если бы я знал модуль запущенного скрипта, то мог бы узнать какие там есть функции и классы через dir(my_module). а как узнать, какие в рантайме есть модули? понятно, что там будет еще куча всяких системных, но ведь наверняка должен быть и мой, нет?
Поэтому и говорят, что не надо слепо верить ide, нужно уметь делать все руками, а только потом - ide.
ладно, нашёл вроде
Да вот я ньюфаг, и не хотел особо разбираться в ide, хотел залететь на скорую руку, но что-то зациклился на этом.
Конечно. Метод resizable, пусть есть корневой виджет по имени root, тогда root.resizable(False, False) запретит изменение окна приложения по горизонтали и вертикали.
Ты такие штуки спрашиваешь, быстрее самому нагуглить, чем ждать, пока ответят на двоще, совсем простые вещи
хотя в доках написано, что он по-умолчанию работает
Попробуй просто на сокет подключиться для начала.
Потом можно сделать tcpdump и посмотреть, какой там диалог.
Попробуй через телнет подключиться, проверить соединение:
https://www.webdigi.co.uk/blog/2009/ftp-using-raw-commands-and-telnet/
Короче просто видимо порт 21 не открыт, я ебал, всем спасибо.
Внутрь try-блока ты уже не сможешь вернуться.
Что за логика у программы? Если конкретная функция выдаёт ошибку, то надо просто её в цикл обернуть с обработкой исключения или ошибочного значения, схематично
while True:
result = None
try:
result = try_do_work()
except:
yes_no = input()
if no:
break
если таких вызовов много, можно обернуть в какой-нибудь декоратор.
А что не так, не достаточно информативная строка, или надо все в одну строчку писать, типа f-string надо использовать вместо format?
А, вижу, в info может быть либо ничего, либо только одно слово, тогда не нужен ни массив не join. Ну, проебались чуть, можно же исправить
Вангую, что автор привык собирать строки таким образом, вот по привычке и сделал, хотя тут можно было бы обойтись без списка.
Я с этим языком знаком лишь по синтаксису. Ткинтер вообще не ебу, а при попытках раскидать эксель в матрицу знатно заебался с пандой и хлрд, так и ничего не сделав.
Похуй с ним с ткинтером, сам нагуглю надеюсь как сделать форму со всеми этими свистоперделками. Поделитесь кодом, чтобы прочитать эксель файл как
[
[row1 column1, row1 column2...],
[row2 column1, row2 column2...],
...
]
С меня тонны благодарностей от препода и моя сердечная любовь до гроба no homo
Ставь или модуль pandas
(pip install pandas)
или можно сохранить данные в csv и парсить их.
Панды эти какие-то замудрённые, разбираться с ними надо. Но зато много умеют.
import pandas
df = pandas.read_excel('file1.xls')
for row in df.itertuples():
___ if isinstance(row[2], str):
___ ___ print(row[2], row[3])
а что сложного с пандасом? вот например за 3 строчки в csv можешь сначала сконвертировать, потом с csv работать как обычно. мне лень питон запускать и либреофис
https://stackoverflow.com/questions/10802417/how-to-save-an-excel-worksheet-as-csv/45297469
Аноны, к сожалению, я очередной хуй, который хочет вкатиться в python. Проблема в том, что у меня очень мало времени из=за работы, но есть деньги на то, чтобы купить курс (не надо только ссать на меня). Что скажеет про яндекс практикум? Их программа для backend
https://www.codepile.net/pile/2xO3Z9x6
В даннном случае, вся база хранится в списке. Список хранится в pickle-объекте. При загрузке программы pickle-файл считывается и содержимое помещается в базу, следом обновляется Qt таблица. При любом редактированнии базы (добавленние, удаление, редактирование), происходит сохраненние базы, загрузка, таблица отрисовывается с нуля.
В общем если кому не сложо глянуть - есть в этой программе что-то, что конкретнно не так, за что меня можо пнуть?
Кто-нибудь знаком с pygame? Пытаюсь решить задачу - есть группа спрайтов-деревьев и спрайт огня. Деревья спавнятся в случайном месте по нажатию кнопки. Огонь доходит до дерева, активируется функция, которая определяет скорость, с которой оно сгорает. Но так как деревья спавнятся, нет конкретной переменной, которую можно вписать в функцию. Как можно применить функцию к экземпляру дерева?
>В общем если кому не сложо глянуть - есть в этой программе что-то, что конкретнно не так, за что меня можо пнуть?
Ты без обид, с точки зрения проектирования всё плохо.
Ну работает, и хорошо, хотя я не проверял. Но абсолютно не поддерживаемый код, всё захардкожено в усмерть. Напоминает ад в PHP, что творился в начале нулевых и за что это направление не уважали.
Не только разметка намертво вшита в QT код, то есть ты не переверстаешь ничего просто так, но и логика программы, выборка данных. В идеале, тебе надо разносить разметку, её отрисовку, и выборку данных.
То есть у тебя есть какой-то конфиг, в котором ты настраиваешь, какого размера какие окна и как они располагаются, и если координаты одного завязаны на другое, то лучше через переменные это делать. Этот конфиг ты передаёшь в функцию, которая строит интерфейс.
А за данные отвечает какой-то свой набор функций или класс, ты сначала получаешь данные, а потом уже объект с ними передаёшь в функцию рисования. Если ты действия какие-то с базой делаешь, то они тоже вызовом методов этого класса делаются.
Это идейно.
Хорошо, попробую осмыслить и учесть, хотя мне сейчас многое непонятно.
QT-код целиком из QT-редактора, я его не сам писал, потом он такой.
Попробуй спустя какое-то время переделать вёрстку, подвигать элементы и изменить их размер. Потом ещё раз. Сам придёшь к этому.
И с выбором данных, попробуй подумать, как ты будешь в другом формате их хранить, а лучше чтобы была возможность выбора. И тоже, сам придёшь к тому, что надо выделать классы и общаться с ними через методы.
Все эти теории проектирования из жизни пришли.
>Попробуй спустя какое-то время переделать вёрстку, подвигать элементы и изменить их размер.
ну, на самом деле не вижу проблемы. В функциях отрытия окна можно отредактировать любой элемент разметки окна, для дочерних оконо по крайней мере. С основным окном не уверен. В общем мне не совсем понятно о чём речь
На самом деле я только собираюсь детальнее PyQt изучить, потому особо редактировать тот код, что да редактор, не могу.
>И с выбором данных, попробуй подумать, как ты будешь в другом формате их хранить
Тоже не совсем понимаю, ты про сохранение данных в pickle? Чуть позже собирался изучить SQL и применить базу данных для сохранения
Пайгейм не трогал. Ты не можешь получить экземпляр дерева рядом с огнем? Ты ссылки на деревья куда-то записываешь? У тебя задача на коллизию огня и дерева?
Там походу только пересечением координат объектов можно что-то сделать подобное.
Как-то пытался курсач на пайгейме сделать. Больше обсёра у меня не было. Пока не начал рабоать, офк.
> Там походу только пересечением координат объектов можно что-то сделать подобное.
Коллизии так и делаются, в общем-то.
Ну вот и хорошо. Я не знал.
Лол, а там нет функции которая определяет коллизии объектов ? По моему вот так:
def is_collided_with(self, sprite):
return self.rect.colliderect(sprite.rect)
было бы странно, если бы их не было. но я подумал, раз тот анон о них не знает, то наверное нет. он же наверняка погуглил столкновения прежде чем самому писать алгоритм. не буду же я гуглить фичи пайгейма, который я ни разу не использовал и не собираюсь.
Жаба-джун заехал в тред
Поштудировал ваш Питонух и малость приохуел:
1) С хрена ли доступ к любому атрибуту и методу можно осуществлять как извне класса, так и просто из самого модуля точечной нотацией?.. Почему кладется хуй на систему геттеров-сеттеров?
2) Где вообще инкапсуляция как таковая? С хуя ли не могу адекватно задать приватные атрибуты в классе? Какие-то блять _ вместо private/public/protected . И есть ли тут вообще бля возможность сделать класс доступным ТОЛЬКО на уровне модуля, а? Че-то пока хуйня получается
Я не могу быть в этом 100% уверен. Но просмотрел несколько источников. Если у тебя есть годная книга, буду благодарен.
>геттеров-сеттеров
Нахуй ты со своей парашей лезешь и пытаешься устраивать правила?
>private/public/protected
Есть соглашение о использовании. Если додик или джун, например, то тебе ниего не мешает говнокодить и в джаве, используя везде public. Просто дандеры используй и методы соответствующие.
Тебе уроки нужны? Или документация? Если первое - иди на ютуб или https://wiki.python.org/moin/BeginnersGuide. Если второе - https://docs.python.org/3/
Ни то, ни другое. Мне нужна книга, но не сухой справочник.
>Нахуй ты со своей парашей лезешь и пытаешься устраивать правила?
Это унылая регулярная паста, не бугурти.
Система геттеров и сеттеров есть.
При желании, можно запретить и приватные методы снаружи вызывать, но это лишний код и оверхед, не нужно этого делать.
>При желании, можно запретить и приватные методы снаружи вызывать, но это лишний код и оверхед, не нужно этого делать.
Как это сделать, кстати?
В общих словах.
Если через __getattribute__(), то он и внутри класса посмотреть свойство/вызвать метод мешает.
def except_goto(func):
def wrapper(args, kwargs):
try:
result = func(args, kwargs)
except:
quest_text = (
'Тут ошибочка вышла. ' +
'Можем повторить? y/n: '
)
answer = input(quest_text)
if answer == 'y':
return wrapper(args, *kwargs)
else:
return None
return result
return wrapper
Пример работы: https://repl.it/repls/FluidImprobableSeahorse
Вот пример с приватными методами, в виде скрина, идейно
Я когда-то давно такое делал, но просто для фана, реально не использовал. Другие методы тоже есть.
Это не 100% метод, вот здесь можно обойти, если назвать объект не a, а self, никто не запрещает ведь. Но от этого можно защититься, можно контролировать, из какого файла идёт вызов и из какой строки. Тут демонстрация идеи.
Конечно, можно просто переопределить функцию is_local_call. Но ведь это защита не от хакеров, а от нежелательных прямых вызовов.
Есть другие способы, но тоже извращённые.
Как-нибудь можно достать такую приватную функцию?
Я ввожу с клавиатуры что угодно (это может быть str опвалопвао, int 43242, либо что-то смешанное типа 9t49ting_))!n3).
Мне нужно три развилки - если введено число, то а, если введена строка - то б, все остальное, в том числе смешанное - в.
В этом куске всегда срабатывает только string.
Потому что input всегда возвращает строку. Ты сам должен конвертировать в нужный тебе тип.
> The function then reads a line from input, converts it to a string (stripping a trailing newline), and returns that.
Во втором питоне input работает так, как тебе нужно.
А каким образом я могу сам конвертировать?
Допустим, у меня есть некий результат input - я ввел "312312". Как мне дальше на основе такого инпута ковертировать эту же самую информацию в другой тип?
Если у тебя там только строки и int'ы, то самое простое это
value = input()
try:
. . value = int(value)
. . # число
except ValueError:
. . # не int
Сейчас я делаю:
- пробегаю по всем ячейкам, делая скрины каждой отдельной, определяю пустые, чтобы с ними дальше совсем не работать. < 1 секунды времени
- Сначала я пытался распознавать объект пиксельхантингом, а количество распознавая цифру с левом верхнем уголке. Но отказался о этого т.к. получалось медленно и цифры распознавались нестабильно, ~98% что не устраивает.
- сейчас я навожу курсор на не пустую ячейку и распознаю уже текст тултипа. Тут текст 100% распознается хорошо и сразу 2 задачи и имя объекта и число.
Но это все равно слишком медленно. Как можно ускорить процесс? В плане алгоритма или может быть какие-то практические советы?
Например, почему
pyautogui.moveTo(x, y)
такой тормозной? Всего 10 позиций в секунду, а если еще нужно периодически ctrl зажимать, отжимать, то получается совсем уж смешная скорость. Есть способы двигать курсор и жать кнопки побыстрее?
О, PoE, клёво, давненько в него не заныривал. Много в него народу шпилит?
> пишет на скриптовом интерпретируемом пистоне с тормозной виртуальной машиной
> удивляется, что тормозит
Не еби мозги и бери C++ с OpenCV
Мне нужно отвечать на GET запрос, причем так что ответ никак не зависит от запроса, а получается в результате работы заранее запущенных асинхронных задач. (это докер контейнер который начинает тестирование удаленных сервисов сразу после запуска, отдающий результат тестирования по http и тут же умирающий)
Набросал упрощенный примерчик https://pastebin.com/CRJPrqN5, он работает. Но вот что он говорит:
>DeprecationWarning: Changing state of started or joined application is deprecated
> app['json'] = json_
Что же делать?
Глобальные переменные? 2к19?
Я не погромист, это просто баловство,мозги размять когда время есть, поэтому на плюсы я так с наскока не пересяду при всем желании. Он же, на сколько я знаю, не самый дружелюбный для новичков.
OpenCV изучаю, с питоном же он тоже хорошо интегрируется.
Вроде много, от лиги к лиге сильно скачет цифра. Я сам не играю, просто трейдбота пишу сядя в хо
>>37806
>Что же делать?
>Глобальные переменные? 2к19?
Глобальные не нужно. Ты просто делаешь класс, который за коммутацию отвечает, хранит, в том числе, json_
Создаёшь объект класса в функции main(), этот объект сохраняешь в app, и в других объектах, которые отвечают за связанные асинхронные задачи. Потом просто меняешь свойство json_, прямо или косвенно. В нём можно сделать метод вроде get_data_for_web(), можно не делать, работать напрямую.
Доки рекомендуют скорее подход, чтобы ты из app всем управлял, через какие-нибудь очереди и т.п., то есть что app такой главный и всем рулит, но это спорный подход и не для всех случаев. Может быть web-интерфейс вообще опционален?
Делаешь класс, который делает все. И будет достаточно его свойств, принципы ООП соблюдены - глобальные переменные не нужны.
Спасибо анон!
Сделал упрощенный пример и он работает без warnings.
https://pastebin.com/WTin2nVm
>>37834
>Делаешь класс, который делает все.
ИМХО этот подход примерно эквивалентен глобальным переменным.
>принципы ООП соблюдены
И разумеется не соответствует ООП и более того является известным антипатерном - "объект бога".
Я признаться честно не большой специалист в программировании, но кажется asyncio более тяготеет к процедурщине. А уж тем более в моем случае, когда выполняется много мелких задачек, слабо связанных между собой, городить для этого единый класс, чтобы потом запускать методы по отдельности, только ради namespace, такое себе.
Лучше как >>37826 анон предложил.
Но в любом случае спасибо.
>OpenCV изучаю, с питоном же он тоже хорошо интегрируется.
Тут ключ к успешному решению твоих задач.
> трейдбота пишу
Мм, прибыльно, наверное?
Сам только перекатываюсь на asyncio и aiohttp. Правда до этого и на питоне много писал, и на других платформах сетевые вещи писал.
Как спроектирован aiohttp пока не очень нравится, asyncio симпатичен и разумен. Доки рекомендуют всё хранить в app, но это грязно, видимо поэтому этот warnings и появляется.
Если делать класс, то это не глобальный объект. Ты ведь можешь сделать несколько таких классов.
Доки по aiohttp и рекомендации отчасти предполагают, что aiohttp главный объект, то есть что ты вебсервер реализуешь. Но это не всегда так. У меня может быть другой главный сервис, а aiohttp лишь один из сервесов, который там работает. Можно с ним, а можно без него. Или можно с двумя разными aiohttp, на разных портах и разного назначения.
Я сейчас вижу архитектуру так. Ты делаешь приложение my_service, инициализируешь его. В него уже передаёшь созданный, но не запущенный app (aiohttp сервис), либо даже просто соответствующий класс. Приложение my_service само пропишет ссылку на себя в app и стартует его.
web-app уже даёт интерфейс для app, вроде метода "получить данные", синхронного или асинхронного, не принципиально, и ещё нужные методы, чтобы через веб можно было управлять твоим главным сервисом. В общем всё, чтобы максимально отделить основной сервис от сервиса с веб интерфейсом.
Идея, чтобы asyncio-app отвечал за содержательный функционал мне не нравится, если задача уходит дальше, чем обычный вебсервер.
>web-app уже даёт интерфейс для app
опечатка, my_service даёт интерфейс для app, веб интерфейса
Задача: есть список сайтов, код которых надо пропарсить на наличие определенной сигнатуры html/js. То есть в идеале скрипт принимает на вход файл со списком и выдает другой файл где собраны сайты, на страницах которых есть нужный код. Проблема в том, что мои познания в питоне ограничиваются тем, что он простой и для большинства задач уже собран готовый велосипед. Мой максимум - разобраться за часик другой в чьем-то коде и попробовать докрутить под себя. Ну или за большее количество времени написать что-то криво-косо с нуля, если мне объяснят, какие основные библиотеки и фичи нужны для решения этой задачи. Помогите, антоны, с меня как всегда лучи добра.
Определять тип объекта можно попробовать при помощи построения вектора кождого из товаров(вектор основывается на гистограмме цветов). Для этого надо для начала подобрать базу скринов и по ним вычислить вектора. Дальше делаешь скрин ячейки, вычисляешь вектор и делаешь быстрое перемножение: твой вектор ячейки на кучу векторов уже в БД (матричное перемножение итт), дальше сортируешь по степени схожести(от 0 до 0.9) и берешь самый лучший вариант.
Делал подобное, но на больших фотках, анализ одной, на процессоре, занимал примерно 0.002с, у тебя же фотки меньше, можешь сделать это все ещё и мультипроцессингом - вообще огонь будет.
Эх
Куда перекатываться после пхп? И есть ли смысл перекатываться?
Я по мухосранску Краснодар hh смотрел - именно вэб вакансий чет совсем мало. Синтаксис питона знаю.
Ща ковыряюсь в Node.js. И думаю о питоне.
Короче мучаюсь выбором второй платформы для изучения.
Вообще в принципе преимущества питона в вэб-бекенде относительно пхп каковы? ( я не троллинга ради, хочу вектор для себя набить)
С node.js все понятно - там асинхронность из коробки, событийный цикл, все это интересно, но такое ощущение что noda нахрен никому не нужна в РФ.
А питон?
>Котаны, подскажите, если вэб в питоне?
Учить пользоваться поиском, по технологиями и по вакансиям.
>>38109
>Я по мухосранску
Я думаю там по всем направлениям IT мало вакансий.
>>38109
>Вообще в принципе преимущества питона в вэб-бекенде относительно пхп каковы?
Просто более внятный и стройный код, сам язык поддерживает многие конструкции элегантно и удобно. После питона писать на пхп противно. Фреймворки тоже иначе сделаны, но это уже от фреймворка зависит.
>на каком моменте можно прекращать придумывать абстрактные классы и писать уже код
С самого начала. Зачем тебе вообще классы в питоне? Напиши логику, а потом уже абстрагируй, если необходимость появится.
Ну досюда то я догуглил. Просто чёто как-то страшновато туда лезть. Там вообще сильно сложно для самовкатывальщика?
Программирование - это сложно [дот]
Почему так? Почему элита не ценится?
нигеролюб идёт на хуй вместе со своим уёбищным тормозным питоном и всеми говнопроектами на нём.
Если тебе непонятны такие пустяки, то ты выбрал неправильное занятие.
Это условие у тебя покрывается уже отработанным условием сверху.
иф выполнится при любом t
то что над ним есть другой иф - иррелевантно, чтобы стало релевантно используй elif
yatoopanool, у тебя же там И, а не ИЛИ
тогда хуй знает, не должно быть никаких варнингов. я не ебу что за иде и дефолтные условия, но дело в них
Пиздец, все питонисты такие тупые, что больше одной строчки кода прочесть не могут?
Тебе варнинг показывается не на if целиком, а только на первую его часть. Просто выделено слабо и сформулировано неочевидно, я сам долго понять не мог, пока не пригляделся, что там выделение есть.
По смыслу там должно быть не
if t >= 60 and t < 3600
а просто
if t < 3600
Спасибо.
>написал программу с бесконечным циклом которая постоянно принтует
>первый раз за всё время обучения
Надеюсь сегодня твой первый день обучения. Иначе тебе стоит поискать другую специальность.
я даже больше скажу. когда я её первый раз написал, после этого я редактировал её 3 раза, пока не довёл до того что в итоге там осталась только одна перменная. программа получилась идеально простой и понятной.
>>38798
у меня итак другая специальность. просто мне досталась ангельская книжка по питхоне ну и вооружившись гугле переводчиком решил "чего добру то пропадать" вот сижу с июня потихоньку читаю её.
>пока не довёл до того что в итоге там осталась только одна перменная
Тебе действительно стоит поискать другую вещь для вката. Для такой программы не нужно переменных вообще.
я не собираюсь вкатываться блять, я тупо читаю книгу по питону которая нахялву досталась. у меня уже давно есть вкат в другую специальность.
кстати напиши код без перменных интересно как он будет выглядеть.
покажи код программы без перменных которая будет выводить бесконечно "Ты пидор...", заинтриговал.
жду код без переменных, кукаретик ебучий? а ты, что падла думал сейчас простых упражнений поверхностно нарешаешь и погромист дохуя? ахахах соси хуй маня, это тебе сюда вкатываться не надо, ты поверхностый хуесос который хочет зазубрить синтаксис и нихуя более. давай жду цикл WHILE без перменных
import numpy as np
from matplotlib import pyplot as plt
img_rgb = cv.imread('mario.png')
img_gray = cv.cvtColor(img_rgb, cv.COLOR_BGR2GRAY)
template = cv.imread('mario_coin.png',0)
w, h = template.shape[::-1]
res = cv.matchTemplate(img_gray,template,cv.TM_CCOEFF_NORMED)
threshold = 0.8
loc = np.where( res >= threshold)
for pt in zip(*loc[::-1]):
cv.rectangle(img_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2)
cv.imwrite('res.png',img_rgb)
Чет не догоняю как вытянуть позиции(координаты) найденных темплейтов, в pt есть какие-то координаты но они не совпадают с объектами, совсем, и много повторяющихся значений.
>>38798
ЭЭЭЭЙ, задрот. АУУУУУ, где твоя программа без перменных? Что ты там говорил, бля? Что это не моё? Може это не ТВОЁ? МАНЯ ЗАЛЁТНАЯ, ПОССАЛ ТЕБЕ НА ЕБАЛО С РАЗБЕГУ. пиздеть горазд, а как обосрался в игнор. чсвшное задротище, наверное такие ублюдки как ты пишут статьи на лурочке. вид важный будто хуй бумажный, а на деле нихуя не знает и не умеет, всё поверхностно. только на двоще передеть может. ТЫ ОБОССАН
Преставь себе два вектора, т.е. две стрелки, выходящие из начала координат. Как измерить их близость? Можно измерить расстояние между кончиками. Можно измерить угол. Можно измерить скалярное произведение.
При этом нам не важно, сколько измерений в твоем векторе, может быть 2, может быть 3, может быть 1000, у каждого такого вектора можно все это посчитать, просто формулы обобщаются на все большее число измерений. Т.е. например расстояние в 2д это
sqrt((x1-x2)^2+(y1-y2)^2) по теореме Пифагора, в 3д это sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2), а в общем виде sqrt((sum(xi-yi)^2)). То же можно провернуть и с формулами скалярного произведения, угла, и так далее.
Далее, в задаче темплейт матчинга нам нужно посчитать меру близости между двумя изображениями. У нас есть два изображения, большое и маленькое. Маленькое будет "скользить" по большому от пикселя к пикселю, и мы будем сравнивать близость между маленьким изображением и куском большого, на который мы в данный момент попадаем. Отсюда появляется T'(x', y') с одной стороны (маленькое изображение - нет скольжения) и I(x+x', y+y') - большое изображение. И R(x, y) = Yoba(T'(x', y'), I(x+x', y+y') ) - где Yoba является конкретной мерой близости. Соответственно R(x, y) измеряет близость каждого пикселя x,y и его окружения большого изображения и между твоим темплейтом.
Затем мы каждое изображение представляем в виде многомерного вектора и измеряем степень близости. Первое - это обобщенная на многомерный случай расстояние между кончиками векторов по теореме пифагора, только для упрощения рассчетов остается квадрат, не вычисляем корень x^2 + y^2 + z^2. Второе - это расстояние дополнительно делится на длины векторов. Третье - скалярное произведение. Четвертое косинус угла между векторами по формуле скалярное произведение делить на длины. И так далее.
Ну и да, если ты не понял, что я написал, ты не вкатишься никогда, потому что не все люди достаточно умные, чтобы оперировать на таком уровне абстракций. Если понял - то почитай десяток книг по компьютерному зрению, по DSP, несколько научных статей, и это проблем представлять не будет.
Преставь себе два вектора, т.е. две стрелки, выходящие из начала координат. Как измерить их близость? Можно измерить расстояние между кончиками. Можно измерить угол. Можно измерить скалярное произведение.
При этом нам не важно, сколько измерений в твоем векторе, может быть 2, может быть 3, может быть 1000, у каждого такого вектора можно все это посчитать, просто формулы обобщаются на все большее число измерений. Т.е. например расстояние в 2д это
sqrt((x1-x2)^2+(y1-y2)^2) по теореме Пифагора, в 3д это sqrt((x1-x2)^2+(y1-y2)^2+(z1-z2)^2), а в общем виде sqrt((sum(xi-yi)^2)). То же можно провернуть и с формулами скалярного произведения, угла, и так далее.
Далее, в задаче темплейт матчинга нам нужно посчитать меру близости между двумя изображениями. У нас есть два изображения, большое и маленькое. Маленькое будет "скользить" по большому от пикселя к пикселю, и мы будем сравнивать близость между маленьким изображением и куском большого, на который мы в данный момент попадаем. Отсюда появляется T'(x', y') с одной стороны (маленькое изображение - нет скольжения) и I(x+x', y+y') - большое изображение. И R(x, y) = Yoba(T'(x', y'), I(x+x', y+y') ) - где Yoba является конкретной мерой близости. Соответственно R(x, y) измеряет близость каждого пикселя x,y и его окружения большого изображения и между твоим темплейтом.
Затем мы каждое изображение представляем в виде многомерного вектора и измеряем степень близости. Первое - это обобщенная на многомерный случай расстояние между кончиками векторов по теореме пифагора, только для упрощения рассчетов остается квадрат, не вычисляем корень x^2 + y^2 + z^2. Второе - это расстояние дополнительно делится на длины векторов. Третье - скалярное произведение. Четвертое косинус угла между векторами по формуле скалярное произведение делить на длины. И так далее.
Ну и да, если ты не понял, что я написал, ты не вкатишься никогда, потому что не все люди достаточно умные, чтобы оперировать на таком уровне абстракций. Если понял - то почитай десяток книг по компьютерному зрению, по DSP, несколько научных статей, и это проблем представлять не будет.
И зачем нужен питон, если есть божественный пхп?
да, точно с ебланил. ну извини, ладно. да я же читал в книге что цикл работает если заявление тру. блять мог бы сам додуматься до этого.
3.6 и даже 3.5 ещё активно используются. Например под 3.7 ещё нет PyPy.
Если асинхронщину не клепать, то может быть и всё равно.
так я проецирую
Есть датафрейм вида
1 | 1 | 1,1
1 | 2 | 1,2
1 | 1 | 0,87
1 | 3 | 0,65
1 | 4 | 3
1 | 1 | 2,3
2 | 2 | 4
2 | 1 | 0,65
2 | 3 | 11
..........
Т.е первый столбец содержит идентификатор (как видно он может повторяться для строк), второй столбец колеблется в каких-то повторяющихся пределах, а третий содержит уникальные значения.
Надо:
- разбить табличку на минитаблички по параметру "1столбец". Я правильно понимаю. что первый столбец надо сделать ключом в таком случае?
- подсчитать частоту второго параметра для каждого идентификатора из первого столбца
- на основании этого для одинаковых параметров из второго столбца суммировать значения из 3го.
Наверняка таких вопросов дохуя было, можно в факе закрепить.
Такие вопросы обычно задают в "мы вам перезвоним".
Надо в первую очередь уметь программировать. На чём именно - не важно.
Если ты уже программируешь, то питон осваивается быстро. Если ты владеешь какой-то технологией на одном языке, будь это треды/процессы/async, то и на питоне с ними разберёшься относительно быстро.
Зарплата вообще не тот вопрос. В первую очередь вопрос о том, чтобы тебя взяли на работу, чтобы ты был кому-то нужен как программист.
Чистый питон никому не нужен. Нужны сопутствующие технологии, они требуют много времени на освоение, смотри вакансии по ключевому слову python.
Размер и шрифт цифр всегда один, но количество может быть до 99. Как, кроме tesseract'а можно распознавать их стабильнее и желательно побыстрее?
А насколько там стабильный источник цифр? Это скан или что-то ещё? Одинаковые цифры выглядят очень похожими друг на друга, с точностью до пикселя.
Нельзя ли просто взять тестовую картинку, взять контрольную, посчитать разницу между ними по какой-то метрике. Может быть проверить несколько вариантов, со сдвигом на один-два пикселя. По минимальной разнице и выбрать то, что нужно. Дёшево, сердито, быстро, но ограничено, конечно.
Небольшая нестабильность заключается в том, что это цифры на всплывающем полупрозрачном тултипе в игре, но в варианте 2 по идее они должны попиксельно совпадать.
Думал примерно о том, что ты говоришь, но только как о концепции, как это реализовывать не представляю. Мне нужно будет подготовить 10 контрольных (0123456789) и каждый раз их по кругу прогонять на тесовой картинке в поисках совпадений?
Съеби нахуй дебил. Смотря в каком городе, че за контора, СУПЕР СИЛЬНО зависит от софт скилов на собесах, а не от умения кодить.
В первую очередь надо уметь программировать. Но этому и за годы можно не научиться, а сваливать всё на софт скиллы, которые да, тоже важны.
Не нужно философствовать, был конкретный вопрос от зеленого нуфага, у которого по определению не может быть харда, и на собесах будет решать именно софт.
Не знаю, как такое делать на питоне, наверное уже надо подключать пакеты numpy, чтобы быстро было.
Как у тебя эти картинки в питоне представлены? Картинка фиксированного размера в пикселях? В питон как, в виде списка кладёшь?
Вот если ты хранишь во вложенных списках
digit[y][x]
просто считаешь сумму в виде:
summ = 0
for y in range(SIZE_Y):
forn x in range(SIZE_X):
summ += (checking_number[y][x] - sample['5'][y][x])^2
summ = summ / (SIZE_X * SIZE_Y)
Только не ^2, а возведение в квадрат, две звезды которые
это среднеквадратичное отклонение. Так для всех цифр. Даже просто в питоне должно работать быстро, а если numpy, то ещё на порядок можно ускорить. Разные оптимизации можно придумать дополнительные.
В таком варианте даже если есть легкий фон, не страшно. Можно. Надо тестировать.
Смотришь, у какого образца будет минимальное отклонение.
Если ты неуверенно держишься и приходишь как на экзамен, это в минус.
Но говорить с тобой будут в первую очередь о программировании, прикидывать, насколько ты мыслишь как программист.
Тысячи примеров, народ ничего не знает, показывает это, а потом валит всё на софт скиллы и на то, что муйню ненужную спрашивают.
>был конкретный вопрос от зеленого нуфага
Не нужны.
Зелёный нюфаг спросил про "60 т.р.", а не про то, "что надо уметь, чтобы взяли на работу". Это приговор. Нюфаг просто не понимает, что это лютый пиздец.
Да,он обречен, именно поэтому я начал свой пост с
>Съеби нахуй дебил.
Ну и что бы совсем не офтопить, дополнил для других залетных.
Бамп вопросу.
Есть кусок кода в джаго работающий со связкой поста и мыл
вышибает
IndentationError: unindent does not match any outer indentation level
и указывает на строку subject
В чем проблема, не понимаю.
Кусок кода
https://ideone.com/yASeqi
помогите
Про нее могу почитать в документации в Built-in Functions
А в каком разделе можно почитать про файловые аргументы типо .write() или .close() ?
В 9-ой строке 3 таба, в 10-ой — 12 пробелов.
В какой структуре нода ищется быстрее?
Вкатывайся в Паскаль. Честно, плохого тебе тут не посоветуют.
СТОЛКНУЛСЯ С ПРОБЛЕМОЙ
Примерно сотня страниц посвящена воде, достаточно занимательной, и онан даже нового узнал, но тем не менее воде, ибо про код ни строки.
Сразу за этим РЕЗКО идут кулстори про списки/словари/пробки анальные. Не то, чтобы это прям не понятно, но аФФтар использует в объяснении вещи, которые ещё не проходили в рамках книги.
Так вот, насколько важно посимвольно понимать и прогонять примеры из книги? Если кто читал, прошу пояснить, в какой момент мне станет внезапно всё понятно.
Короче разобрался с вопросом. Как я и думал -- решение есть, надо лишь его правильно нагуглить.
метод as_matrix переводит почти в нужную мне матрицу (массив массивов-строк). Транспонировав (метод transpose, вроде из либы numpy) матрицу я получил то, что и реквестил.
Я для себя решил сначала решить задачки на питонтуторе чтобы иметь хоть какое-то представление о предмете, потом вернусь к Лутцу.
Подскажите нубу
ВВОДНАЯ
Несостоявшаяся пхп макака которая только и смогла осилить процедурный код, поверхностно коснуться баз данных и ооп стало скушно, не интересно, можно применять только в вебе хочет вкатиться в питон.
ЗАДАЧА
Помочь макаке с поиском книжки на русском, чтоб как у О'райли Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript - свежее издание, годная подача материала, чтоб совсем для бомжей типа меня, и чтоб майнкрафт змейку писать научил!
Поясните за Эрика Маттиса
Приветствую, питононы! Вопрос скорее - математический.
Есть простенький скрипт: https://rextester.com/TVNM46327
Как видно, при его исполнении, некое сгенерированное число - делится с остатком
на различные делители, являющиеся степенями двойки.
При этом, вся информация о числе - содержится в остатках.
В каждом из случаев - множитель спадает в ноль.
Пусть x - неизвестное число. Пусть стоит задача подобрать x перебором.
Пусть известно условие, которое исполняется, если число x - корректно.
Пусть также будет известна - максимальная битовая длина числа x,
и пусть она будет равна значению power = 12.
И пусть в качестве бонуса, искомое x находится в мультипликативной группе кольца вычетов
по простостому модулю (это не обязательно, но если поможет - вот).
Внимание, вопрос. Возможно ли, глядя на результат вывода предыдущего скрипта,
как-то ускорить подбор x, используя различные делители?
Существуют ли какие-либо закономерности, позволяющие, например, составить систему уравнений и решить её,
определив последовательность остатков/бит, и как следствие - составить из них искомое число x?
Ничего не понятно. У тебя есть двоичное разложение числа, то есть фактически само число.
> Пусть известно условие, которое исполняется, если число x - корректно.
В общем случае никак. Вот пусть тебе криптохеш известен. Или экспонента числа по модулю (DH, RSA). Это как крайние случаи.
Собственно ты и лезешь в DH/RSA и спрашиваешь, нет ли быстрого способа вычислить. Способы есть, существенно более быстрые, чем перебор, но всё равно экспоненциальные. Но это тебе надо в специальную литературу лезть.
Или я не понимаю. То есть я точно не понимаю, что ты спрашиваешь.
>Ничего не понятно.
Я скрипт, просто как пример скинул, чтобы было видно закономерности деления с остатком на степени двойки.
Некоторые вижу, а некоторые нет.
Может есть какие-то скрытые закономерности.
И хотелось бы их все учесть, собрать воедино и связать в алгоритм или систему уравнений, которую можно было бы взять и решить.
>У тебя есть двоичное разложение числа, то есть фактически само число.
Как видишь, в скрипте, число x - генерируется, а потом раскладывается.
Но если x неизвестно, неизвестно и его разложение, и множители, и остатки.
Известен только делитель - последовательно увеличивающаяся степень двойки.
Но, как видно по результатам работы скрипта, самый последний множитель в каждом разложении - равен нулю. Везде, при любом делителе.
И хотелось бы как-то через эти разложения, от числа, прийти к нулю кратчайшим путём (ну или от нуля к числу),
параллельно с этим - определяя (генерируя), как множители, так и главное - сами остатки.
Сдаётся мне, что использование нескольких делителей - может помочь в этом, потому что видно, что есть некие закономерности...
Но, всё это очень мутно у меня, пока что... Не могу сформулировать толком.
> Пусть известно условие, которое исполняется, если число x - корректно.
Тут имелось в виду то, что приходя от нуля к x, через генерацию множителей и остатков,
можно к нему либо прийти, либо не прийти.
Так вот, условие это такое, что оно исполняется, только если x составлено корректно.
То есть, когда подобранное из множителей и остатков число - действительно равно x.
Иначе, условие не исполняется.
>В общем случае никак. Вот пусть тебе криптохеш известен. Или экспонента числа по модулю (DH, RSA). Это как крайние случаи.
>Собственно ты и лезешь в DH/RSA и спрашиваешь, нет ли быстрого способа вычислить.
>Способы есть, существенно более быстрые, чем перебор, но всё равно экспоненциальные.
>Но это тебе надо в специальную литературу лезть.
Узко-специализированное нечто, для конкретных целей, ну там коллизии всякие (к хэшам),
или алгоритмы, атаки, бекдоры (RSA/DH) - всё это, не особо интересует...
Тут скорее, я пытаюсь - именно общий случай рассмотреть.
Но если хочешь узнать более конкретно, то вот...
На пикрелейтед - простая, циклическая и элементарная группа Zp малого порядка - 13. Z13
Как видишь, она состоит из 13-ти элементов, один из которых - нулевой (чёрная точка).
Остальные 12 элементов, имеют свой номер от 1 до 12.
Их можно складывать, вычитать, умножать и делить. А ещё, можно найти обратный элемент (-5 = 13 - 5 = 8; -6 = 7).
Операция деления тоже определена, ведь число 13 простое, поэтому кольцо это - является конечным полем, полем Галуа.
И в нём определена операция деления.
Ну, и собственно задача, есть элемент, пусть он будет седьмым. И надо найти его индекс - число 7.
Конечно же, число p может быть намного больше чем 13, и первое, что приходит в голову,
так это последовательный перебор всех значений от 0 до 7 (или до дохулиарда-семь).
Но чё-т сдаётся мне, что можно взять и поделить, а потом ещё раз, и ещё раз и ещё раз.
>Ничего не понятно.
Я скрипт, просто как пример скинул, чтобы было видно закономерности деления с остатком на степени двойки.
Некоторые вижу, а некоторые нет.
Может есть какие-то скрытые закономерности.
И хотелось бы их все учесть, собрать воедино и связать в алгоритм или систему уравнений, которую можно было бы взять и решить.
>У тебя есть двоичное разложение числа, то есть фактически само число.
Как видишь, в скрипте, число x - генерируется, а потом раскладывается.
Но если x неизвестно, неизвестно и его разложение, и множители, и остатки.
Известен только делитель - последовательно увеличивающаяся степень двойки.
Но, как видно по результатам работы скрипта, самый последний множитель в каждом разложении - равен нулю. Везде, при любом делителе.
И хотелось бы как-то через эти разложения, от числа, прийти к нулю кратчайшим путём (ну или от нуля к числу),
параллельно с этим - определяя (генерируя), как множители, так и главное - сами остатки.
Сдаётся мне, что использование нескольких делителей - может помочь в этом, потому что видно, что есть некие закономерности...
Но, всё это очень мутно у меня, пока что... Не могу сформулировать толком.
> Пусть известно условие, которое исполняется, если число x - корректно.
Тут имелось в виду то, что приходя от нуля к x, через генерацию множителей и остатков,
можно к нему либо прийти, либо не прийти.
Так вот, условие это такое, что оно исполняется, только если x составлено корректно.
То есть, когда подобранное из множителей и остатков число - действительно равно x.
Иначе, условие не исполняется.
>В общем случае никак. Вот пусть тебе криптохеш известен. Или экспонента числа по модулю (DH, RSA). Это как крайние случаи.
>Собственно ты и лезешь в DH/RSA и спрашиваешь, нет ли быстрого способа вычислить.
>Способы есть, существенно более быстрые, чем перебор, но всё равно экспоненциальные.
>Но это тебе надо в специальную литературу лезть.
Узко-специализированное нечто, для конкретных целей, ну там коллизии всякие (к хэшам),
или алгоритмы, атаки, бекдоры (RSA/DH) - всё это, не особо интересует...
Тут скорее, я пытаюсь - именно общий случай рассмотреть.
Но если хочешь узнать более конкретно, то вот...
На пикрелейтед - простая, циклическая и элементарная группа Zp малого порядка - 13. Z13
Как видишь, она состоит из 13-ти элементов, один из которых - нулевой (чёрная точка).
Остальные 12 элементов, имеют свой номер от 1 до 12.
Их можно складывать, вычитать, умножать и делить. А ещё, можно найти обратный элемент (-5 = 13 - 5 = 8; -6 = 7).
Операция деления тоже определена, ведь число 13 простое, поэтому кольцо это - является конечным полем, полем Галуа.
И в нём определена операция деления.
Ну, и собственно задача, есть элемент, пусть он будет седьмым. И надо найти его индекс - число 7.
Конечно же, число p может быть намного больше чем 13, и первое, что приходит в голову,
так это последовательный перебор всех значений от 0 до 7 (или до дохулиарда-семь).
Но чё-т сдаётся мне, что можно взять и поделить, а потом ещё раз, и ещё раз и ещё раз.
>Ну, и собственно задача, есть элемент, пусть он будет седьмым. И надо найти его индекс - число 7.
Я всё равно не понимаю. Что такое индекс?
Ты можешь породить какую-то группу по умножению, её порядок будет = 12 (p-1 для простого p).
Но эту группу ты чем-то порождаешь, каким-то элементом.
Можно двойкой:
1, 2, 4, 8, 3, 6, 12, 11, 9, 5, 10, 7, 1
можно ещё чем-нибудь. Про выбор порождающих сейчас не помню.
Найти обратный элемент несложно, это называется "расширенный алгоритм Евклида". Найти логарифм, то есть степень, в которую нужно возвести 2, чтобы получить 7, сложно. На этой сложности базируется система обмена ключей DH.
Там есть более продвинутые алгоритмы, чем просто перебор, то есть для p порядка 2^64 ты можешь быстро найти, но они умеренно быстрые. Для 1000 бит ты уже не сможешь найти. Но это уже серьёзная наука по теории чисел и криптографии. Ты, конечно, можешь пытаться сам что-нибудь придумать, но поверь, ты не первый и даже не тысячный. Очень много думали и очень серьёзные люди.
Тоесть тебе нихуя не известно про число, кроме длины его представления в двоичной системе и способа проверки этого числа на "правильность". И ты хочешь (быстро) найти это число?
а что ты ожидал?
>>40513
Потому что ты пидор Потому что в питоне нумирация массивов начинается с нуля, потому что в большом массиве элемент под индексом 2, то есть третий элемент, это другой массив, третьим элементом которого является тройка. Запись things[2][2] означает "взять третий элемент третьего элемента списка things". Серьезно, чего ты ожидал другого? Это же самые азы
>Я всё равно не понимаю. Что такое индекс?
Индекс - это порядковый номер элемента в той группе. Если элемент - седьмой, то индекс - 7.
>Ты можешь породить какую-то группу по умножению, её порядок будет = 12 (p-1 для простого p).
>Но эту группу ты чем-то порождаешь, каким-то элементом.
>Можно двойкой:
>1, 2, 4, 8, 3, 6, 12, 11, 9, 5, 10, 7, 1
>можно ещё чем-нибудь.
А это для чего?
Вообще, было бы годным - как-то породить полугруппу, например Z6,
и каким-то образом проверить принадлежность элемента к этой полугруппе,
то есть узнать содержится ли элемент в полугруппе или же нет.
Это дало бы возможность сравнивать индексы двух элементов,
отвечая на вопрос: "Больше ли индекс первого элемента - чем индекс второго или меньше?".
Так, для группы Z13:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
полугруппой являлась бы некая группа Z6:
0, 1, 2, 3, 4, 5, 6, содержащая ровно половину элементов изначальной группы.
Или, если с другой стороны, то :
7, 8, 9, 10, 11, 12, 0 - вторая половина
Тогда, разница двух элементов, скажем 3 и 7,
может быть как положительной: 7-3 = 4;
так и отрицательной: 3-7 = -4 = (-4) mod 13 = (-4+13) mod 13 = 9 mod 13 = 9;
А определяя в какой полугруппе результат вычитания - можно было бы определить,
больше ли индекс 7 у уменьшаемого элемента, нежели индекс 3 у вычитаемого, или же он меньше.
А ещё, некая полугруппа Z6, порождённая двойкой:
0, 2, 4, 6, 8, 10, 12 - она содержала бы все элементы с чётными индексами.
Однако (12 + 2) mod 13 = 1; (1+2) mod 13 = 3; и т. д.
То есть, если продолжить предыдущую Z6, продолжая прибавлять двойку,
то она просто совпадёт с изначальной группой:
0, 2, 4, 6, 8, 10, 12, 1, 3, 5, 7, 9, 11 - будучи при этом той же,
изначальной Z13, а не её полугруппой.
Если удалось бы сгенерировать именно полугруппу, и проверить принадлежность элемента ей,
то можно было бы сказать чётный ли индекс элемента, или же нечётный,
а дальше уже, чётко зная чётность - либо разделить этот индекс на два, либо отнять единицу а потом разделить на два.
И так, последовательно - прийти к нулю, извлекая биты числа x.
>Найти обратный элемент несложно, это называется "расширенный алгоритм Евклида".
Я знаю. Индексом такого элемента является мультипликативная инверсия,
индекса изначального элемента по модулю количества элементов.
>Найти логарифм, то есть степень, в которую нужно возвести 2, чтобы получить 7, сложно.
>На этой сложности базируется система обмена ключей DH.
Вообще-то, у меня, задача состояла в том,
чтобы найти индекс элемента в пиздатом кольце, а не показатель степени.
Но судя по этой таблице https://ru.wikipedia.org/wiki/Дискретное_логарифмирование#Пример
видно, что показатели степени, по порядку - тоже формируют кольцо, и результаты - замыкаются в кольцо.
>>40286
>Тоесть тебе нихуя не известно про число, кроме длины его представления
>в двоичной системе и способа проверки этого числа на "правильность".
>И ты хочешь (быстро) найти это число?
Если более конкретно, то меня тут, скорее - эллиптическая кривая в конечном поле,
и точка, как элемент абелевой группы. Ведь там множители точек тоже образуют кольцо (поле), и группу.
А так-то я в общем вопрос ускрения перебора тут рассматриваю...
Может кто и найдёт какие-либо скрытые закономерности и взаимосвяжет их в алго или систему уравнений.
>>40304
>010101
>в данном случае это 6?
Да.
>>40274
>Там есть более продвинутые алгоритмы, чем просто перебор,
>то есть для p порядка 2^64 ты можешь быстро найти, но они умеренно быстрые.
>Для 1000 бит ты уже не сможешь найти. Но это уже серьёзная наука по теории чисел и криптографии.
Я видел тот же pollard rho алгоритм, который работает до корня от числа.
>Но это уже серьёзная наука по теории чисел и криптографии.
>Ты, конечно, можешь пытаться сам что-нибудь придумать, но поверь,
>ты не первый и даже не тысячный.
>Очень много думали и очень серьёзные люди.
Вот я и думаю... И глядя на ту таблицу, то есть на результат работы скрипта https://rextester.com/TVNM46327
решил поставить задачу вот так:
Оптмальнейшим образом - попытаться прийти от нулей к числу, используя различные делители
- сделать это за ограниченное количество шагов, и возможно даже - синхронно.
Согласись, перебрать остатки - намного проще, нежели перебрать всё число.
Особенно если их перебирать не надо, и если они как-то закономерно между собой - коррелируют.
Ведь я вижу, что данные каким-то образом всё-же взаимосвязаны в той таблице:
1. Все множители различных делителей - содержатся в множителях, при делении числа, с остатком - на 2.
2. Первый множитель - сдвигается на показатель степени двойки у делителя.
3. ВСЕ множители - плавно убывают до нуля, за ограниченное битовой длиной числа - количество операций.
4. Остатки всегда меньше делителя, они содержат сдвинутые биты изначального числа, и несут всю информацию о числе.
5. Иногда, остатки повторяются, а иногда - нет. Если повторяются, то остаток меньше делителя, иначе - больше, и остаток - разница между предыдущим остатком и делителем.
6. Вижу связь между множителями различных делителей - множитель текущего делителя,
это либо (предыдущий множитель / 2), либо (предыдущий множитель - 1)/2
Может ещё есть какие-то закономерности, но я их не вижу?
>Я всё равно не понимаю. Что такое индекс?
Индекс - это порядковый номер элемента в той группе. Если элемент - седьмой, то индекс - 7.
>Ты можешь породить какую-то группу по умножению, её порядок будет = 12 (p-1 для простого p).
>Но эту группу ты чем-то порождаешь, каким-то элементом.
>Можно двойкой:
>1, 2, 4, 8, 3, 6, 12, 11, 9, 5, 10, 7, 1
>можно ещё чем-нибудь.
А это для чего?
Вообще, было бы годным - как-то породить полугруппу, например Z6,
и каким-то образом проверить принадлежность элемента к этой полугруппе,
то есть узнать содержится ли элемент в полугруппе или же нет.
Это дало бы возможность сравнивать индексы двух элементов,
отвечая на вопрос: "Больше ли индекс первого элемента - чем индекс второго или меньше?".
Так, для группы Z13:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
полугруппой являлась бы некая группа Z6:
0, 1, 2, 3, 4, 5, 6, содержащая ровно половину элементов изначальной группы.
Или, если с другой стороны, то :
7, 8, 9, 10, 11, 12, 0 - вторая половина
Тогда, разница двух элементов, скажем 3 и 7,
может быть как положительной: 7-3 = 4;
так и отрицательной: 3-7 = -4 = (-4) mod 13 = (-4+13) mod 13 = 9 mod 13 = 9;
А определяя в какой полугруппе результат вычитания - можно было бы определить,
больше ли индекс 7 у уменьшаемого элемента, нежели индекс 3 у вычитаемого, или же он меньше.
А ещё, некая полугруппа Z6, порождённая двойкой:
0, 2, 4, 6, 8, 10, 12 - она содержала бы все элементы с чётными индексами.
Однако (12 + 2) mod 13 = 1; (1+2) mod 13 = 3; и т. д.
То есть, если продолжить предыдущую Z6, продолжая прибавлять двойку,
то она просто совпадёт с изначальной группой:
0, 2, 4, 6, 8, 10, 12, 1, 3, 5, 7, 9, 11 - будучи при этом той же,
изначальной Z13, а не её полугруппой.
Если удалось бы сгенерировать именно полугруппу, и проверить принадлежность элемента ей,
то можно было бы сказать чётный ли индекс элемента, или же нечётный,
а дальше уже, чётко зная чётность - либо разделить этот индекс на два, либо отнять единицу а потом разделить на два.
И так, последовательно - прийти к нулю, извлекая биты числа x.
>Найти обратный элемент несложно, это называется "расширенный алгоритм Евклида".
Я знаю. Индексом такого элемента является мультипликативная инверсия,
индекса изначального элемента по модулю количества элементов.
>Найти логарифм, то есть степень, в которую нужно возвести 2, чтобы получить 7, сложно.
>На этой сложности базируется система обмена ключей DH.
Вообще-то, у меня, задача состояла в том,
чтобы найти индекс элемента в пиздатом кольце, а не показатель степени.
Но судя по этой таблице https://ru.wikipedia.org/wiki/Дискретное_логарифмирование#Пример
видно, что показатели степени, по порядку - тоже формируют кольцо, и результаты - замыкаются в кольцо.
>>40286
>Тоесть тебе нихуя не известно про число, кроме длины его представления
>в двоичной системе и способа проверки этого числа на "правильность".
>И ты хочешь (быстро) найти это число?
Если более конкретно, то меня тут, скорее - эллиптическая кривая в конечном поле,
и точка, как элемент абелевой группы. Ведь там множители точек тоже образуют кольцо (поле), и группу.
А так-то я в общем вопрос ускрения перебора тут рассматриваю...
Может кто и найдёт какие-либо скрытые закономерности и взаимосвяжет их в алго или систему уравнений.
>>40304
>010101
>в данном случае это 6?
Да.
>>40274
>Там есть более продвинутые алгоритмы, чем просто перебор,
>то есть для p порядка 2^64 ты можешь быстро найти, но они умеренно быстрые.
>Для 1000 бит ты уже не сможешь найти. Но это уже серьёзная наука по теории чисел и криптографии.
Я видел тот же pollard rho алгоритм, который работает до корня от числа.
>Но это уже серьёзная наука по теории чисел и криптографии.
>Ты, конечно, можешь пытаться сам что-нибудь придумать, но поверь,
>ты не первый и даже не тысячный.
>Очень много думали и очень серьёзные люди.
Вот я и думаю... И глядя на ту таблицу, то есть на результат работы скрипта https://rextester.com/TVNM46327
решил поставить задачу вот так:
Оптмальнейшим образом - попытаться прийти от нулей к числу, используя различные делители
- сделать это за ограниченное количество шагов, и возможно даже - синхронно.
Согласись, перебрать остатки - намного проще, нежели перебрать всё число.
Особенно если их перебирать не надо, и если они как-то закономерно между собой - коррелируют.
Ведь я вижу, что данные каким-то образом всё-же взаимосвязаны в той таблице:
1. Все множители различных делителей - содержатся в множителях, при делении числа, с остатком - на 2.
2. Первый множитель - сдвигается на показатель степени двойки у делителя.
3. ВСЕ множители - плавно убывают до нуля, за ограниченное битовой длиной числа - количество операций.
4. Остатки всегда меньше делителя, они содержат сдвинутые биты изначального числа, и несут всю информацию о числе.
5. Иногда, остатки повторяются, а иногда - нет. Если повторяются, то остаток меньше делителя, иначе - больше, и остаток - разница между предыдущим остатком и делителем.
6. Вижу связь между множителями различных делителей - множитель текущего делителя,
это либо (предыдущий множитель / 2), либо (предыдущий множитель - 1)/2
Может ещё есть какие-то закономерности, но я их не вижу?
>0, 1, 2, 3, 4, 5, 6, содержащая ровно половину элементов изначальной группы.
Здесь у тебя 7 элементов.
У меня такое ощущение, что ты не до конца разобрался с темой, как эти группы устроены.
Мне приходится лезть в литературу, чтобы вспомнить определения. Процитированная "полугруппа" из 7 элементов не будет полугруппой, она не замкнута относительно операции. 5+6 = 11 mod 13, это не элемент этой полугруппы.
А ещё, некая полугруппа Z6, порождённая двойкой:
0, 2, 4, 6, 8, 10, 12 - она содержала бы все элементы с чётными индексами.
Однако (12 + 2) mod 13 = 1; (1+2) mod 13 = 3; и т. д.
Вот ты и сам ответил, что это не полугруппа.
Не путай полугруппы и подгруппы.
Полугруппа отличается от группы, что там может не быть единичного (или нулевого, если мы по сложению строим) элемента, может не быть обратного. Но она замкнута относительно своей операции.
Если полугруппа порождена одним элементом, то такие полугруппы будут, порядок самой группы не является простым числом. 13 простое число, поэтому все элементы, кроме нуля, будут по сложению порождать полную группу.
Если ты смотришь мультипликативную группу по умножению, то её порядок 12, соответственно там уже будут полугруппы меньшего порядка, как то 2, 3, 4, 6.
Не очень понимаю, как ты будешь принадлежность элемента какой-то подгруппе или полугруппе определять.
Здесь простые случаи. Если ты будешь работать со сложными группами, которые представляются в виде матриц, то там, даже имея порождающие, не такая простая задача найти подргуппы.
Зачем нужно то, что ты спрашиваешь, не очень понимаю. Смотрится так, как будто ты пытаешься придумать какие-нибудь способы решения криптографических задач вроде RSA и DH. Поверь, ты не первый, тут всё очень хорошо изучено.
Есть таблица вида:
№ |Cat
1 | A
1 | B
1 | C
1 | D
2 | A
2 | D
2 | B
3 | C
Как привести её к виду одномерного массива:
№ A B C D
1 1 1 1 1
2 1 1 0 1
...
Т.е элементы второго столбца оригинальной таблицы должны стать названиями столбцов новой матрицы, а наполнения ячеек этих столбцов - булевое 1 или 0 - т.е были они в оригинальной таблице или нет?
nombers = dict(enumerate(set(yoba[:, 0]))))
names = dict(enumerate(set(yoba[:, 1]))))
vtoraya_tablica = np.zeros(len(nombers), len(names))
for i in yoba.shape[0]:
vtoraya_tablica[ nombers(yoba[i, 0]), names(yoba[i,1]) ] = 1
примерно так
Про нее могу почитать в документации в Built-in Functions
https://docs.python.org/3/library/functions.html#open
А в каком разделе можно почитать про файловые аргументы типо .write() или .close() ?
Аноны, на работе проводят курсы для желаюших вкатиться в big data, аналитику и прочее с использованием питона (нет, фирма не уровня говно параша). Сам работаю в около айти сфере. Насколько это перспективно по вашему? С математикой и погромированием ранее проблем не испытывал.
Давненько думаю про backend и беспокоит, что всякие js, java и php дышат в спину, а то и вовсе востребованее. Спасибо
>Здесь у тебя 7 элементов.
Да, включая нейтральный, нулевой элемент. Вот тут чёрную точку из картинки поста >>40270
>Процитированная "полугруппа" из 7 элементов
Ну, я просто взял то кольцо с картинки, мысленно провёл прямую от чёрной точки к верху кольца,
потом взял шестой элемент и все элементы до этого, шестого - просто загнул в такое же кольцо.
Да, это Z7, не Z6. Не знаю, что это получилось - полугруппа ли, просто группа, или подгруппа...
Но там, без нейтрального элемента - ровно половина элементов этих...
>Процитированная "полугруппа" из 7 элементов не будет полугруппой, она не замкнута относительно операции.
>5+6 = 11 mod 13, это не элемент этой полугруппы.
Действительно, 5+6 = 11 mod 13 = 11 - не является элементом {0, 1, 2, 3, 4, 5, 6},
но является элементом {7, 8, 9, 10, 11, 12, 0}.
А если 5+6 = 11 mod 7 = 4, то хотя 11 !==4, но 11 - это четвёртый элемент в {7, 8, 9, 10, 11, 12, 0}.
Если сравнить их вот так:
{00, 01, 02, 03, 04, 05, 06} - тут 04 на определённой позиции
{07, 08, 09, 10, 11, 12, 00} - а тут 11 на той же позиции
>А ещё, некая полугруппа Z6, порождённая двойкой:
>0, 2, 4, 6, 8, 10, 12 - она содержала бы все элементы с чётными индексами.
>Однако (12 + 2) mod 13 = 1; (1+2) mod 13 = 3; и т. д.
>Вот ты и сам ответил, что это не полугруппа.
Ну понятно, если её полностью догенерировать, то получится та же группа.
А я - половинку хотел бы сгенерировать, не полную.
То есть не по mod 13, а по mod (13+1)/2 = mod 14/2 = mod 7.
Но не всю, конечно же, нахрена генерировать всю, особенно если там дофига элементов?
>Не путай полугруппы и подгруппы.
Да, в представленных выше примерах, речь скорее о отдельной группе, нежели о подгруппе, или о полугруппе.
Полугруппой я её назвал не по терминологии, а просто потому что без учёта нейтрального элемента,
там ровно половина элементов из предыдущей группы.
Но, как видишь, нейтральный элемент там есть, и это элемент с индексом - ноль.
>Но она замкнута относительно своей операции.
Понятно.
>Если полугруппа порождена одним элементом, то такие полугруппы будут, порядок самой группы не является простым числом.
>13 простое число, поэтому все элементы, кроме нуля, будут по сложению порождать полную группу.
Вот тут - понятно.
А вот, выше, к простому числу прибавил единицу, сделал из него не простое,
а потом уже, разделив на два - получил его половину.
А дальше уже, по модулю этого числа - сгенерировал две разные, то ли группы, то ли полугруппы, то ли подгруппы.
Так вот, число это, 7 - оно простое же! А группы - разные. И по модулю этого простого числа 7, они и взаимосвязаны, индексами.
4 - является индексом элемента 11 во второй полугруппе, так как (5+6) mod 13 = 11; но в то же время: (5+6) mod 7 = 4;
>Если ты смотришь мультипликативную группу по умножению, то её порядок 12,
>соответственно там уже будут полугруппы меньшего порядка, как то 2, 3, 4, 6.
Вот тут я не совсем понимаю, откуда ты получил число 12,
и как группа по умножению, и её разложение может помочь подобрать индекс x...
Но я вижу, что указанная тобой группа по умножению, порождённая двойкой:
>1, 2, 4, 8, 3, 6, 12, 11, 9, 5, 10, 7, 1
действительно содержит 12 уникальных элементов, а единичка - повторяется.
При этом 2,3,4,6 - делители числа 12.
А как её разложить на полугруппы, не очень понимаю.
Но ясен пень, что если можно было бы проверить принадлежность элемента к полугруппе,
то в маленьких полугруппах, в каждой из них по отдельности, было бы проще искать элемент,
и можно было бы всё это дело распараллелить.
Это уже намного - лучше, чем перебор всех вариантов в основной группе,
с учётом того, что в пределах одной полугруппы, искать индекс элемента, если он есть,
можно алгоритмами - до корня от значения индекса элемента в полугруппе.
>Не очень понимаю, как ты будешь принадлежность элемента какой-то подгруппе или полугруппе определять.
Это пока - просто абстракция. Ну, то есть - критерий какой-нибудь. Либо элемент есть в полугруппе/подгруппе, либо его там нет.
Или если, вот, можно было бы условие какое-то сделать, например подобное условию принадлежности точки к эллиптической кривой,
то можно было бы и не генерировать всю полугруппу/подгруппу полностью, и не перебирать индексы в ней,
а просто подставить координаты точки - в уравнение, и проверить - лежит ли точка,
В ПОДГРУППЕ группы точек эллиптической кривой в конечном поле, или же - не лежит.
>Здесь простые случаи. Если ты будешь работать со сложными группами,
>которые представляются в виде матриц,
>то там, даже имея порождающие, не такая простая задача найти подгруппы.
Ну если они ведут себя как кольца, или поля (если порядок - простое число, а значит пределена операция деления),
то какими бы сложными не были все эти матрицы, для элементов такой группы,
определены же всё те же операции сложения/умножения/вычитания/деления...
Да, они сложнее будут, по структуре своей, но вцелом это те же операции...
И если решить оптимально - этот вот, общий случай, с кольцами этими ебучими, то и эти матричные группы разрулились бы
все так же полиномиально, или хотя-бы субэкспоненциально.
>Зачем нужно то, что ты спрашиваешь, не очень понимаю.
Я уже писал выше, что у меня - эллиптическая кривая в конечном поле.
Если более точно, то задача - дискретного логарифмирования на эллиптической кривой:
https://ru.wikipedia.org/wiki/Дискретное_логарифмирование#В_группе_точек_на_эллиптической_кривой
Я вижу кольцо это, в группе точек на эллиптической кривой, то есть индексы точек - замыкаются в кольцо...
Поэтому задача эта, немного переквалифицировалась на дискретное логарифмирование
в кольце вычетов по простому модулю (то есть - в поле Галуа):
https://ru.wikipedia.org/wiki/Дискретное_логарифмирование#В_кольце_вычетов_по_простому_модулю
Но после всего этого, особенно после того, как оно всё заебало нахуй,
я решил просто оптимизровать подбор самого x,
используя разные пути прихода к нему от нуля, и разные делители.
Поэтому, я написал тот скриптец, вкинул его сюда, и ржу.
И мне чё-то кажется, что можно сделать систему уравнений, или написать на базе этого -
какой-то пиздатый матричный самосинхронизирующийся мега-супер-пупер-гипер-ультра-алгоритм.
>Здесь у тебя 7 элементов.
Да, включая нейтральный, нулевой элемент. Вот тут чёрную точку из картинки поста >>40270
>Процитированная "полугруппа" из 7 элементов
Ну, я просто взял то кольцо с картинки, мысленно провёл прямую от чёрной точки к верху кольца,
потом взял шестой элемент и все элементы до этого, шестого - просто загнул в такое же кольцо.
Да, это Z7, не Z6. Не знаю, что это получилось - полугруппа ли, просто группа, или подгруппа...
Но там, без нейтрального элемента - ровно половина элементов этих...
>Процитированная "полугруппа" из 7 элементов не будет полугруппой, она не замкнута относительно операции.
>5+6 = 11 mod 13, это не элемент этой полугруппы.
Действительно, 5+6 = 11 mod 13 = 11 - не является элементом {0, 1, 2, 3, 4, 5, 6},
но является элементом {7, 8, 9, 10, 11, 12, 0}.
А если 5+6 = 11 mod 7 = 4, то хотя 11 !==4, но 11 - это четвёртый элемент в {7, 8, 9, 10, 11, 12, 0}.
Если сравнить их вот так:
{00, 01, 02, 03, 04, 05, 06} - тут 04 на определённой позиции
{07, 08, 09, 10, 11, 12, 00} - а тут 11 на той же позиции
>А ещё, некая полугруппа Z6, порождённая двойкой:
>0, 2, 4, 6, 8, 10, 12 - она содержала бы все элементы с чётными индексами.
>Однако (12 + 2) mod 13 = 1; (1+2) mod 13 = 3; и т. д.
>Вот ты и сам ответил, что это не полугруппа.
Ну понятно, если её полностью догенерировать, то получится та же группа.
А я - половинку хотел бы сгенерировать, не полную.
То есть не по mod 13, а по mod (13+1)/2 = mod 14/2 = mod 7.
Но не всю, конечно же, нахрена генерировать всю, особенно если там дофига элементов?
>Не путай полугруппы и подгруппы.
Да, в представленных выше примерах, речь скорее о отдельной группе, нежели о подгруппе, или о полугруппе.
Полугруппой я её назвал не по терминологии, а просто потому что без учёта нейтрального элемента,
там ровно половина элементов из предыдущей группы.
Но, как видишь, нейтральный элемент там есть, и это элемент с индексом - ноль.
>Но она замкнута относительно своей операции.
Понятно.
>Если полугруппа порождена одним элементом, то такие полугруппы будут, порядок самой группы не является простым числом.
>13 простое число, поэтому все элементы, кроме нуля, будут по сложению порождать полную группу.
Вот тут - понятно.
А вот, выше, к простому числу прибавил единицу, сделал из него не простое,
а потом уже, разделив на два - получил его половину.
А дальше уже, по модулю этого числа - сгенерировал две разные, то ли группы, то ли полугруппы, то ли подгруппы.
Так вот, число это, 7 - оно простое же! А группы - разные. И по модулю этого простого числа 7, они и взаимосвязаны, индексами.
4 - является индексом элемента 11 во второй полугруппе, так как (5+6) mod 13 = 11; но в то же время: (5+6) mod 7 = 4;
>Если ты смотришь мультипликативную группу по умножению, то её порядок 12,
>соответственно там уже будут полугруппы меньшего порядка, как то 2, 3, 4, 6.
Вот тут я не совсем понимаю, откуда ты получил число 12,
и как группа по умножению, и её разложение может помочь подобрать индекс x...
Но я вижу, что указанная тобой группа по умножению, порождённая двойкой:
>1, 2, 4, 8, 3, 6, 12, 11, 9, 5, 10, 7, 1
действительно содержит 12 уникальных элементов, а единичка - повторяется.
При этом 2,3,4,6 - делители числа 12.
А как её разложить на полугруппы, не очень понимаю.
Но ясен пень, что если можно было бы проверить принадлежность элемента к полугруппе,
то в маленьких полугруппах, в каждой из них по отдельности, было бы проще искать элемент,
и можно было бы всё это дело распараллелить.
Это уже намного - лучше, чем перебор всех вариантов в основной группе,
с учётом того, что в пределах одной полугруппы, искать индекс элемента, если он есть,
можно алгоритмами - до корня от значения индекса элемента в полугруппе.
>Не очень понимаю, как ты будешь принадлежность элемента какой-то подгруппе или полугруппе определять.
Это пока - просто абстракция. Ну, то есть - критерий какой-нибудь. Либо элемент есть в полугруппе/подгруппе, либо его там нет.
Или если, вот, можно было бы условие какое-то сделать, например подобное условию принадлежности точки к эллиптической кривой,
то можно было бы и не генерировать всю полугруппу/подгруппу полностью, и не перебирать индексы в ней,
а просто подставить координаты точки - в уравнение, и проверить - лежит ли точка,
В ПОДГРУППЕ группы точек эллиптической кривой в конечном поле, или же - не лежит.
>Здесь простые случаи. Если ты будешь работать со сложными группами,
>которые представляются в виде матриц,
>то там, даже имея порождающие, не такая простая задача найти подгруппы.
Ну если они ведут себя как кольца, или поля (если порядок - простое число, а значит пределена операция деления),
то какими бы сложными не были все эти матрицы, для элементов такой группы,
определены же всё те же операции сложения/умножения/вычитания/деления...
Да, они сложнее будут, по структуре своей, но вцелом это те же операции...
И если решить оптимально - этот вот, общий случай, с кольцами этими ебучими, то и эти матричные группы разрулились бы
все так же полиномиально, или хотя-бы субэкспоненциально.
>Зачем нужно то, что ты спрашиваешь, не очень понимаю.
Я уже писал выше, что у меня - эллиптическая кривая в конечном поле.
Если более точно, то задача - дискретного логарифмирования на эллиптической кривой:
https://ru.wikipedia.org/wiki/Дискретное_логарифмирование#В_группе_точек_на_эллиптической_кривой
Я вижу кольцо это, в группе точек на эллиптической кривой, то есть индексы точек - замыкаются в кольцо...
Поэтому задача эта, немного переквалифицировалась на дискретное логарифмирование
в кольце вычетов по простому модулю (то есть - в поле Галуа):
https://ru.wikipedia.org/wiki/Дискретное_логарифмирование#В_кольце_вычетов_по_простому_модулю
Но после всего этого, особенно после того, как оно всё заебало нахуй,
я решил просто оптимизровать подбор самого x,
используя разные пути прихода к нему от нуля, и разные делители.
Поэтому, я написал тот скриптец, вкинул его сюда, и ржу.
И мне чё-то кажется, что можно сделать систему уравнений, или написать на базе этого -
какой-то пиздатый матричный самосинхронизирующийся мега-супер-пупер-гипер-ультра-алгоритм.
Ну раз на работе проводят, то почему бы не попробовать? Оно вполне может быть интересным.
Мне в последовательности надо кусок вырезать, начиная с определённой строки, вот только кусок повторяется, состоит из разного содержимого и расположен в разных местах.
Никто не юзал?
>>40685
>Вот тут я не совсем понимаю, откуда ты получил число 12,
Порядок будет равен p-1. А если модуль pq, то порядок будет (p-1)(q-1), это так называемая функция Эйлера. На этом основаны алгоритмы DH и RSA.
Можно придумать аналогичные алгоритмы на этом принципе.
Но я вижу, что указанная тобой группа по умножению, порождённая двойкой:
>1, 2, 4, 8, 3, 6, 12, 11, 9, 5, 10, 7, 1
действительно содержит 12 уникальных элементов, а единичка - повторяется. При этом 2,3,4,6 - делители числа 12.
2 - порождающий элемент мультипликативной группы.
Он имеет порядок 12. Если ты возьмёшь 22 = 4, то его порядок будет = 6. Если вы возьмёшь 222 = 8, то его порядок будет 4. Если ты возьмёшь 2222 = 16 => 3, то его порядок будет 3, а вот 2^5 = 32 => 6, поскольку 5 взаимопросто к 12, то порядок будет 12.
Тут всё просто.
>>40685
>Я вижу кольцо это, в группе точек на эллиптической кривой, то есть индексы точек - замыкаются в кольцо...
>Поэтому задача эта, немного переквалифицировалась на дискретное логарифмирование
Я так и подумал. Ты пытаешься как-то просто решить серьёзные криптографические задачи, на которых сейчас всё строится. Поверь, тут очень серьёзная наука. Поверь, над этими вопросами думали многие десятки тысяч очень серьёзных математиков. Ну флаг в руки.
Если ты возьмёшь 22 = 4, то его порядок будет = 6. Если вы возьмёшь 222 = 8,
Тут знаки умножения пропали, которые стояли между двойками.
Продолжать не буду, вряд ли кому интересно. Думаю, тебе стоит пойти в math. К питону это никакого отношения не имеет, к программирования почти никакого.
Нет, но стандартная библиотека содержит много полезных функций, ещё и регулярки есть.
Я тормоз, применяется. Но с этим надо аккуратнее. Если тебе надо резать, то смотри доки.
Например?
Спасибо!
Скинь код полностью
пиздец. какие же вы блять ну просто... трассировку программы делай если что-то не работает, а не спрашивай об этом. бери и разбирай почастям всё тобою написанное.
Мань, извини, но мне надо разобраться и сделать, и чем быстрее, тем лучше.
Наставников и коллег у меня нет, а сраный стаковерфлоу и учебники не на всё дают ответы.
если ты учишься то это
>быстрее сделать
не канает. делай трассировку программы, отслеживай каждое действие в ручную и на одном из этапов ты поймёшь на какой ступени твои ожидания расходятся с результатом программы. это полезный навык.
Ссылки не открываются.
Биться над задачей можно очень долго. И есть возможность можно и срезать пусть обучения. Это не наука, где без усилий неизведанное не станет открытым, и надо непременно страдать и рвать жопу.
Сделать трассировку будет гораздо быстрее, чем дождаться ответа здесь. Или ты совсем обленился?
>и надо непременно страдать и рвать жопу.
Почти в любой деятельности нужно пройти через цикл порванная жопа - оргазм от успеха. Эти американские горки эмоций и делают программирование таким притягательным. А ты вместо этого прокачиваешь навык попрошайничества на бордах
>Или ты совсем обленился?
Отчасти.
Отчасти там столько проблем, что не знаешь что и ка решать.
Есть ту Ыксперты панды? Или нампая хотя бы?
Во1) код не мой во2) ты мог неправильно датасет даже задать
>ты мог неправильно датасет даже задать
В jupyter показывается хотя бы
data = pd.read_csv("X://123123123.csv")
set = data['Колонка 1', Колонка 2', Колонка 3', Колонка 4']
Как-то так + ещё 0,5 обработки.
Пишу, но лишние колонки можно убрать.
Как пофиксить? Так и должно быть? Неприемлимо бляд.
я новенький, лучше обоссыте
И почему нельзя писать title(рандомная_переменная), а в функции str(рандомная_переменная) можно?
Потому что у функции print есть аргументы по умолчанию, а среди них есть аргумент по имени end, который по умолчаниж равен "\n", значение этого аргумента автоматически добавляется в конец строки, можешь его изменять, например print("qwerty", end="") напечатает qwerty без перехода на новую строку. А еще ты можешь задавать функции print сразу несколько аргументов, и они будут напечатаны в одной строке, разделенные пробелами, какой именно символ для разделения использовать определяет значение аргумента sep, сокращение от "separator", то есть "разделитель", по умолчанию sep равен пробелу. Так print("dog", "cat", "frog") напечатает строку "dog cat frog", а print("dog", "cat", "frog", sep="@@") напечатает строку "dog@@cat@@frog"
Начинай поиски с встроенной функйии help, например, help(print), и документации
https://docs.python.org/3/library/functions.html#print
>Так print("dog", "cat", "frog") напечатает строку "dog cat frog"
Вывело ('dog', 'cat', 'frog')
print() почти? всегда переносит строку. Ты бы хоть уточнил, что вообще хочешь получить в результате.
Если "Govno Govno Govno", то используй, к примеру, print((example2 + ' ') * 2 + example2).
мимонуб
Я просто не хотел чтоб оно само переносилось, АТО в дальньейшем возникли бы некоторые проблемы
А чем тебе end не подходит?
На практмке почти всегда надо, чтобы принт печатал с новой строки. Это удобное поведение по умолчанию. Наверно, у тебя книга про второй питон. Раздобудь версию про третий питон, это настоящее и будущее питона.
Эрик Мэттиз, год издания 2017.
>На практмке почти всегда надо, чтобы принт печатал с новой строки
Понял, принял
Наверное, Эрик просто старый пердун
>Скоро аноны скажут "пиздуйте в math" и будут правы
он уже попиздовал, но там нихуя не сказали, нахуй он там нужен со своим програмином да ещё и на питоне
Ну ты хотя бы в пятерочке экспедитором не работаешь
Ну тут два стула:
1. Отпуск
2. Смена работы и поиск проекта посвежее.
Если отработал более 6 месяцев - можешь спокойно менять работу, в резюме это выглядит ок.
Да вот хочу сменить проект, но пока чет нет откликов на вакансии, летом чет мало как-то
Потому что реверс перезаписывает все твои переменные - оно у тебя в самом конце.
Попробуй засунуть реверс в переменную
мимо нуб
Так я тоже делал, этом случае выдаёт пустой список. Наверное это особенность этого реверса, с ним не получается сделать два разных списка, если конечно изначально не создать два разных списка.
Задачу та я эту решил, хотел код короче сделать и нагуглил этот реверс
Потому что у тебя l и l2 - два имени для реально одного объекта. Это не два разных списка, а один список.
Сделай, например
l[0] = 10000000
print(l2)
Это mutable типы. Аналогичная история со словарями, объектами и т.п.
Сделай копию списка. Как l.copy() или как
l2 = l[:]
i = ["1", "2", "3", "4", "5"]
i2 = i.reverse()
print (i, i2)
А почему во втором списке выдает ноне?
другой нуб
>Так я тоже делал, этом случае выдаёт пустой список. Наверное это особенность этого реверса
Это немного особенность питона.
lst.reverse()
ничего не возвращает. Это метод, который применяется к самому списку.
lst = [*range(10)] # сделать список из 10 элементов от 0 до 9
print(lst) # [0, 1, .. , 9]
lst.reverse()
print(lst) # [9, 8, ..., 0]
Если есть другой простой способ сделать перевернутую копию списка, то я с радостью выслушаю
Джанго тебе не нужен, а фласк подойдет
Есть такой мини-фрэймворк bottle, его исходный кодтвообще помещается в один файл. Вроде, не сложный. Может, подойлет тебе
Зависит от целей и требуемого функционала.
Если не нужна работа с базой, Джанго заведомо не нужен. Там на базу всё завязано, и вся суть фреймворка в этом.
Тебе нужно быстрее разобраться, либо легковесное что-нибудь? Многие легковесные фреймворки требуют понимания продвинутых технологий питона, вроде asyncio. Боюсь, тебе или надо обвязку всякий uwsgi осваивать, как это работает, либо asyncio и аналоги.
Может быть тебе проще будет сделать на node.js, что ты хочешь. Для несложных сетевых вещей самое то.
Разница не столь велика. Для начала лучше изучи, 1.9 какой, а разницу со второй проще по докам нагнать.
Советую Antonio Mele(вроде так) с Яндекса брать и читать.
Обычное окно не подойдёт, я так понимаю.
У джанго очень хорошие доки. Там и пример учебного приложения хороший, шаг за шагом, и отдельно первичный разбор функционала джанго, и детальная информация.
Всё есть. Если тебе хочется именно русскую документацию, то может там и старая версия. Но там совсем не такая большая разница. Из заметного работа с url, смотри лучше английский вариант.
Вовсе не только, очень много вакансий без джанго. Но правда там торнадо какой-нибудь или asyncio, это более серьёзные вещи и более сложные.
Окей, тогда попробую и старые туториалы тоже охватить
Вот это не поможет совсем, это просто перпендикулярные вещи.
Но джанго в любом случае очень полезная вещь.
Не в качестве помощи, а именно в качестве полезной штуки, изучая которую, можно будет прокачаться
На русском книга недавно вышла "Django 2 в примерах". Хуй знает можно ли скачать, я не нашел пару месяцев назад и купил. Там тебе и про асинхронность расскажут, и про редис, и про рестфул апи. Годнота короче. Советую не пожалеть 1200 рублей и купить.
Два чаю этому господину, книгу не покупал, так как в моих пердях ее точно нет, но вот скачать я ее скачал, подтверждаю книга огонь, сейчас пилю по ней магазин, в целом все разжежывают и рассказывают, думаю после любой сможет вкатится сильным таким джуном как минимум.
Имел ввиду ключи, но похуй уже - не актуально
>>>>>>>>>>>Платиновый вопрос
Смотря куда идёшь, я вкатывался через Django, смострячил магазин за пару вечеров и показал на собесе. Вообще требуют знания ООП, если там какой то скрапинг сайтов то естественно знать регулярные выражения, плюс аддоны типа beautiful soup и т.д.
Пардон за тупой вопрос, но "сделать магазин"-речь и про django и про разработку frontenda?
Задача создать и суммировать список чисел с помощью функции sum()
Ты во втором примере принтуешь исходный список, а не сумму чисел в нём. Напишешь print(sum(numbers)) - всё будет нормально.
Пиздец я дебил, это получается такие вот функции не конвертируют переменные если я без переменной их использую?
Если ты не присваиваешь какой-либо переменной значение этой функции, то грубо говоря да.
А вот если я возьму за привычку мне так проще для каждой подобной ситуации создавать переменную заместо того чтоб сразу выводить нужный результат, это будет говнокодом?
Мои нубские соображения: если тебе нужно вывести результат без того, чтобы его в дальнейшем каким-либо образом использовать, то лучше лишние переменные не создавать.
Я тя выцеплю блядь, сука
По правде говоря, твоя исходная задача может быть решена вообще в одну строчку:
print(sum([i for i in range(1, 10)]))
Там продолжение задачки есть, так что не подходит.
>>41524
Кек. Сука, яж так нихуя не пойму. Ну выучу я этот ваш синтаксис хуинтаксис, функции хуюнкции, но понимания того как всё это работает не придет жеж. Или дроча питон можно таки добраться до самой сути камплюктера?
Не хочу быть таким, советуйте что почитать после того как я освою основы питончика!
А что непонятного? Там же прямо так и написано, что делается. Вывести сумму чисел из диапазона от 1 до 10
Пока правописание непонятно, например. Вот принт эт функция, например, в этой функции может быть аргументом функия в которой аргументом будет еще одна функция.
Так можно?
Дрочи задачи на сайтах всяких, потом со временем поймешь, почитаешь объяснения, запомнишь примеры хорошего кода и будешь фибоначи с закрытыми глазами считать.
Еще одна функция в которой будет цикл с кучей других функция которые я напишу сам!
У него всё же задача создать список и суммировать его элементы, так что не очень подходит.
> Вот принт эт функция
да
> в этой функции может быть аргументом функия
Принт берет результат работы функции sum и делает свое дело.
> которой аргументом будет еще одна функция.
пока ты передаешь функции то, что она принимает проблем не будет, можешь городить хоть 100 функций подряд
>[i for i in range(1, 10)]
Вот эту конструкцию можно записать как
[*range(1, 10)]
и любую аналогичную с генератором
Магазин был согласно пепу оформлен? На гите показывал все это? Можешь показать что показывал на собесе
Мне кажется анон подпизживает.
Джанго не ЦМС, в комплекте только для бэка идёт. Рисовать фронт или придётся с нуля, или брать чужой макет. Макет ещё надо прикрутить к бэку, наладить взаимодействие. Короче тут не так просто.
Да поебать мне какие он там кнопки наугад нажал и получил верный результат. Нахуя с такими вопросами вообще идти сюда ебаный в рот.
>Магазин был согласно пепу оформлен?
А на оформление по ПЕП похуй, это вообще ни о чём. Система в первую очередь должна работать и спроектирована хорошо по use case, по моделям внутри и пр.
Это не так просто, если ты делаешь реальное приложение, а не примитивный набросок-демонстрацию.
Мне кажется, анон говорил про бек только, или какую-то говеную морду, учитывая джунность позиции, о чем указано в моем посте, делать полностью работающий магазин, с прикрученными платёжками за вечер, он мог бы претендовать на что-то гораздо выше чем джуниор. Я думаю просто логика записывания в базу покупок, корзины и прочего.
Ты чего такой неочень? Велосипеда нет?
Спасибо, без иронии. Сам почему-то не допёр до этого.
>Только питон, базы и ооп? Тоесть даже фуллстек не нужен?
А зачем? Сеньёру отличается не размером списка, а опытом работы и глубиной понимания технологий.
Вот первое обязательное требование:
1) Опыт разработки системы, которая работает под высокой нагрузкой и с большими объёмами данных.
Всё, уже это требование очень серьёзное. Это только реальный коммерческий опыт, и не каких-то небольших сайтов, а чего-то реально нагруженного. Здесь масса проблем будет, и надо хорошо понимать, откуда эти проблемы берутся, как они проявляются, как диагностировать и решать.
3) Работа с разными видами баз данных, оптимизация запросов, настройка самих баз. Это требует опыта и квалификации.
С п.2, многопоточностью, проще, но это не про джунов всё-таки.
В желательно тоже много чего серьёзного. Подразумевается обычно, что чего-то из этого есть.
Ну когда в пхп пытался вкатитьсяпонятно, программирование хтмл и верстка на ксс кокок еще, этим я лет в 15 увлекался, так там везде фуллстек только.
Правда, в пхп далеко я не продвинулся - ни одного фреймворка не выучил, ООП не освоил толком, зато задачки на процедурном коде у того самого ОПа вполне себе решал, кек, держу в курсе.
А чем вообще питон от пыхи в вебе отличается? За исключением того что в питоне одну задачку можно решить двумя строчками, в отличии от и анальным ограждением разметки кода пгобеламикокок угнетение гулаг швабодка
>Правда, в пхп далеко я не продвинулся - ни одного фреймворка не выучил
>>41676
>А чем вообще питон от пыхи в вебе отличается?
В твоём случае всем. Если ты работал без фреймворков, то ты или создал свой фреймворк но это точно не так, или у тебя была типичная php-лапша, где скрипт получает запрос, сразу обращается к БД и генерит код в промежутках.
На питоне такой xCGI подход не работает. Там другой принцип построения сайтов. Тебе надо изучать и сам питон, и технологии построения сайтов через фреймворки. Это уже другой уровень.
>типичная php-лапша, где скрипт получает запрос, сразу обращается к БД и генерит код в промежутках.
Это. Даже доставляо удовольствие, до тех пор пока не понял что я ограничен ссаным браузером.
>На питоне такой xCGI подход не работает. Там другой принцип построения сайтов. Тебе надо изучать и сам питон, и технологии построения сайтов через фреймворки. Это уже другой уровень.
Заебись, прямо мотивировал
Ты очень сведущ, скажи пожалуйста, основной пласт работы для питониста это веб или что то другое?
Работаю щас на лесопилке 2 через два в мухосрани, игры заебли в свое время, сериалов нормальных не завозят, жены нет, накатывать под ютьюб каждый вечер здоровье уже не позволяет.
Вот сижу, хунёй всякой страдаю тут, на должность в уютненьком коллективе зуммерков-разработчиков даже и не рассчитываю - дрочу просто для того чтоб все охуели как я могу.
Ага, сегодня первый день выходных, накатываю охоту крепкую и мрию о том что рано или позно освою основы погромирования и начну пилить пет проекты фор фан, такссать.
продолжаю держать в курсе
Еще сисадминам пригождается, вроде. Не зря жеж в большинстве дистрибутивах линукса питон дефолтно изкаробки поставляется
Да там даже не полноценный магазин, верстка минимальная, корзина, вывод товаров и т.д. Сделал чтобы просто было что показать на собесе.
Именно так, накидал бэк магазина, из функционала каталог товаров, персональная страница товара и корзина все. Просто чтобы показать что я умею в в Джанго. Верстка минимальная была, JS не было вообще.
А мне кажется ты долбаёб, я сделал просто бек простенького магазина, с примитивной вёрсткой, основная задача была показать, что я умею работать с Джанго, знаю структуру проекта, и т.д. этого были вполне достаточно чтобы вкатится.
Не ссы никто не ждёт от джуна проект уровня Инстаграм или Авито. Достаточно показать что ты умеешь хоть что-то . Выше были посты про книгу Django 2 в примерах, там есть пример навороченного магазина в сто раз круче чем у меня, так что качай книгу и делай все по ней и в конце будешь готов к работе джуна если не больше.
Тоесть задача говнякакть код максимально быстро, хоть на джумле - главное чтоб заказы фирме были?
Рыночек решает, однако
Потому что title() - это метод класса str, а str() - конструктор объекта соответствующего класса. str.title() не принимает никаких аргументов, кроме объекта своего класса (поэтому и в скобки записывать нечего), а применение метода в Python оформляется через точку, а не с помощью записи в скобки.
мимонуб
Что-то мне подсказывает, что различия и соотношения между терминами "функция", "метод", "класс", "объект класса", "конструктор класса" etc стоит прояснить для себя чуть ли не в первую очередь, если желаешь вкатиться в Питон.
Был один тип что видеоуроки для пыхи преподавал, так он гордился тем что преподает основы языка сразу начиная с ООП, и похуй что в первом же уроке он говорил, мол пока не думайте что значит for в конкретном примере, просто делайте что я говорю - главное понять суть того что я вам сейчас скажу
Меня такой подход вообще не устраивает, например, особенно если я бомж в погромировании и вообще впервые пытаюсь вкатиться.
Во втором случае сделай numbers = sum(numbers)
Тем самым переопределишь старую переменную массива на сумму его значений
> Короче, есть годные книги по сортировкам на питоне
В этом твоя проблема
Ты изучаешь способы написания алгоритмов на N языке, а не сами алгоритмы
Возьми язык Shema, он прост как два пальца, за 1.5 часа освоишь. На нём реализовывай алгоритмы в отрыве от языка.
Глянь еще Грокаем Алгоритмы, там на пальцах и картинках поясняется. Годная книжка
в обще если тебе нужно понимание алгоритмов, а не просто реализации алгоритмов, то без матана никуда. Тебе в /math
Алгоритмы сами по себе, питон сам по себе.
Тебе надо разобраться с алгоритмом, почему и как он работает. Это первая задача. А вторая задача в том, как грамотно реализовать алгоритм на нужном языке программирования. Два разных скилла, оба нужные для развития. Хотя в жизни ты будешь пользоваться библиотечными реализациями, конечно же.
Конкретно про radix, она же "числовая сортировка", попробуй на бумажке просто с конкретными примерами её осмыслить. Она простая в плане алгоритмов. Вот как грамотно реализовать? Это думать уже надо.
Но ведь любой язык высокого уровня не подразумевает креатива в алгоритмах жеж, нет?
Самое удобное и понятное - читать в процессе. Заходишь на chekio или codingame и начинаешь решать все подряд. Будешь сталкиваться с проблемой или слишком сложным исполнением задумки - ищи на Стаке и в документации.
Чтобы научиться программировать, надо программировать
Подразумевает, и много. Не не в сортировках, которые просто вынесены в отдельные функции. Вот работу с деревьями ты уже так просто в отдельные функции не вынесешь. И много чего ещё не вынесешь.
>>41757
Спасибо аноны, сами эти сортировки я уже давно на бумажке расписал по нескольку раз, но проблемы с реализацией. Бывало загуглю реализацию и ахуеваю от того, как люди додумали написать для сортировки код, причем так кратко и лаконично.
Причем мне очень трудно даётся написание алгоритма с рекурсией, прям хоть ты убей, ни как не получается.
Ну а с МатАном у меня вроде норм. Диффуры там, интегралы. Об этом речь идёт ?
Многое зависит от компании, где то да похуй как ты это делаешь, главное чтобы сделал, меня например просят вёрстку на работе подправить или кнопочку там добавить или убрать и похуй что я бекенд, главное есть возможность получать опыт. Я сейчас уже работаю третью неделю за все время на питоне написал строчек 5-6, основная работа это писать запросы в БД и из БД в soap сервисы других компаний (платежные системы) да первые дни хотелось все бросить и съебать, даже было предложение о знакомого на другое место где больше по деньгам но туманные перспективы, в итоге пересилил себя и остался, вроде втягиваюсь потихоньку, скоро обещал дать допилить пару модулей уже на питоне. В целом жить можно, основная цель стать мидлом и съебать на большую ЗП и лучшие условия
Далеко не всегда.
Если фирма крупная, то с кодом можешь работать не ты один и важна читаемость и тд.
class Demo(Frame):
def __init__(self, parent=None, options):
Frame.__init__(self, parent, options)
Что такое "options" и логика parent и вообще вот эти две строчки.
Зачем нужна 3-ья строчка? Сорян за тупость.
Ты делаешь класс Demo, который наследуется от Frame
Ты реализуешь конструктор. То если ты сделал свой конструктор, то конструктор родителя вызван не будет. Впрочем, это для всех методов класса так, которые ты переопределяешь.
Для этого ты и вызываешь явно конструктор класса-родителя.
options, с двумя звёздами - это такой способ для получения словаря со всеми элементами "ключ-значение". Аналогично, когда ты передаёшь словарь с двумя звёздыми в функцию, происходит его раскрытие.
Если она звезда, то это уже список позиционных аргументов.
>>41896
Про звезды всё понял.
Не совсем понял про переопределение конструктора.
Это пример из Лутца.
Есть фрэйм. Он делает подкласс Демо с кнопками. Нахуя он переопределяет конструтктор фрейма, чем он его не устраивает в этом конкретном примере?
И не понимаю, зачем вызывать конструктор родителя явно? И это касается любых методов?
На первом пике - да. И ответ тебе - 45. На втором ты суммируешь и все, список остается списком, его ты на печать и выводишь.
А мне функциональщина нравится в хаскеле, а не питоне. Но ведь это не важно.
Если ты чётко знаешь, что конструктор родителя тебе не нужен, то не надо его вызывать. Но в реальности часто конструктор делает какую-то полезную работу, проводит инициализацию внутренних переменных, может подгружает что, и т.п. Ты ведь наследуешь ради того, чтобы получить какой-то функционал родительского класса. А без вызова конструктора этого функционала может не быть.
Может и есть, только чем тебе магазины не угодили, лучше пилить какой нибудь магазин, чем сидеть без работы или работать дворником
В вакансиях онли Джанго. А когда и для чего используется Фласк? Ну и что лучше учить для каких целей? Вообще немного не понимаю, что для чего и зачем.
Объясни пожалуйста, анон.
Я про заработок не спрашивал, но если на то пошло, то я лучше на завод пойду, или мебель собирать, чем буду магазины дрочить. для меня парень который собирает магазины это профессия уровня переустановщика винды, но никак программиста
Хорош, если не читер.
мимо заебал завод, спина болит, фильтры воздуха проебали и теперь меня ещё там и травят
Спасибо, Анон.
Чувак, я сам работяга с лесопилки, и считаю что кодинг должен доставлять в первую очередь, а заработок с этого он рано или поздно придет. По сему, просто дрочи ЯП как хобби заместо игор/сериалов в свободное время и смотри как оно тебе заходит - АТО можешь вложить во вкат огромные ресурсы и обосраться на пол пути.
Лишь 5 процентов людей имеют страсть с которой можно навариться, у больнишства же страсть это привычные игры, секс, путешествия и т.п.
Ну бля, здесь все уприается в процесс обучения - главное максимально легко и интересно его преодолеть, после чего писать говнокод и наслаждаться результатом.
Именно наслаждаться, томущо когда напишешь кнопки регистрации и авторизации которые будут работать, пусть даже на адском говнокоде - ты получишь такое моральное удовлетворение, такое, что ни одна катка в доте тебе не даст.
Что-то типа анимации загрузки для моего скрипта.
На каждой итерации звёздочка "*" проходит по ячейкам в виде квадратных скобок "[]", в конце цикла возвращается на исходную позицию и начинается двигаться по-новому кругу.
Проще запустить и посмотреть как оно работает, чем объяснять на словах.
Так вот, как сделать так, чтобы в конце цикла звёздочка не возвращалась на исходную позицию, а шла в обратном направлении?
Вот ещё такой вариант. Он чуть более большой, тут просто другая идея архитектурная
https://pastebin.com/shmrgiTY
а именно, чтобы генератор для этого использовать. В этом случае код немного больше, но так ты можешь более сложное поведение программировать.
Можно сделать компактнее и использованием itertools, создать список
l = [1, 3, 5, ..., 17, 19, 17, 15, ..., 3] и дальше идти циклом по нему.
for i in itertools.cycle(l):
print(...)
https://docs.python.org/3/library/itertools.html#itertools.cycle
Конструкцию
index=[x for x in range(len(s)) if x%2] # 1,3,5...19
можно записать как
index = list(range(1, len(s), 2))
К примеру есть такой словарь:
https://pastebin.com/VU4CwsfB
Как можно достать значение 1, не используя этот дебильный метод?:
json.get("fun").get("j").get("f").get("1")
Можно так записать:
try:
json['fun']['j']['f'][1']
except:
...
Что более читаемо. Штатных инструментов вроде нет, но можно слепить что-нибудь колхозное в стиле xpath, чтобы была функция вроде
xget(json, 'fun/j/f/1', default = 555)
это иногда довольно удобно. Реализация строчек 10 максимум.
Спасибо!
Я только начал его изучать и решил задать вопрос,раз уж в книжке пишется что не надо заботиться об памяти используемой программой
Надо будет но не сейчас, пока не забивай голову такими вещами, изучай основы и дальше по своему усмотрению Django/Flask/Data science и т.д . Оптимизацией приложения обычно занимаются дяди сеньоры помидоры, вот они и думают о памяти, скорости и т.д.
ты не указывай, что мне делать, хуйло. я сам без тебя разберусь, лучше на первый вопрос ответь
Можешь специальный класс создать, чтобы было удобно серелиозтвать/десерилизоать его в json, и было удобно работать в своем коде. Есть библиотеки для этого, например, marshmallow
https://marshmallow.readthedocs.io/en/3.0/
О памяти заботиться не надо, нет в питоне с этим проблем. Там есть сборка мусора, точнее контроль через подсчёт числа ссылок.
Про профилирование много в официальных доках
https://docs.python.org/3/library/debug.html
есть модуль tracemalloc, по идее для таких задач, но лично я его никогда не использовал. Актуально более-менее думать о производительности, соответствующие инструменты полезно представлять. В память почти без шансов упереться, а в производительность легко.
Я бы тоже советовал на другие вещи посмотреть, разобраться с базой языка, со всякими генераторами, метаклассами, с мультипоточностью и мультипроцессностью, с асинхронностью и всякого разного ещё. Это вот полезно и сложно.
Да какие тут шахматы, просто было бы интересно послушать про оптимизацию приложения
>>42546
Спасибо за ответ, но я думал ты что-нибудь конкретное расскажешь. Например инстагрум (а он написан на джанге, ну или как минимум его часть) вообще отключили сборщик мусора и получили прирост в производительности. Пишут ли вообще C-экстеншины в продакшене? Как обстаят дела с Cython, PyPy, Numba? Есть ли среди этих инструментов что-то готовое к использованию или действительно легче написать c-extension или вообще вынести в отдельный сервис на каком-нибудь более производительном языке (Go, например).
Какой план у разработчиков питона, планируют ли они улучшать производительность языка, ведь уже всем понятно, что это главный недостаток языка. Вроде слышал, что в версии 3.8 внесли изменение в multiprocessing, и теперь по идее, процессы должны стать более легковесными.
И как обстаят дела с асинхронностью в Python, про asyncio знаю, но слишком мало стандартных либ, поддерживающих асинхронность. Да и что использовать в продакшене: aiohttp, sanic или что-то вообще другое? Слышал, что джанга 3 пилиться с заделом под асинхронность.
P.S. извини, что назвал хуйлом
* обстоят
>>42546
Ну и по поводу твоего поста: разве метаклассы вообще применяются в продакшене, это же довольно сильно бьет по читаемости кода? На мой взгляд эти штуки могут быть полезны только при разработке собственной либы/фреймворка. Вообще, заметил такой интересный факт, что в 90% случаев, там где люди используют метаклассы, можно было бы обойтись обычным декоратором для класса
Вообще задам более абстрактный вопрос: Какова в принципе область примения Python в вебе? Есть ли ему место в хайлоаде?
Есть тут такие разработчики, которые использует Python в высоконагруженных приложениях, и при этом не пожалели об этом после нескольких лет эксплуатации? Было бы очень интересно послушать ваши стори.
Ну помимо этого, хочу поднять такую тему как архитектура веб-приложений в Python. Даже в таком популярном фреймворке, как Django до сих пор не сложилось строгой архитектуры проекта. Понятно, конечно, что есть апликайшины и базовая структура, но это всё равно не то. Фрейморку уже 10 лет и по сути до сих пор нет конвенционального мнения где хранить бизнес-логику (бля, некоторые вообще во вьюхах до сих пор всё хуячат). Опытные разработчики, какой подход используете вы при организации структуры проекта? Можно не только про джангу, но и про другие веб-фреймворки/либы. Буду рад если накидаете годных источников по этой теме.
Ты спрашиваешь слишком специализированные вопросы.
У меня нет опыта реального хайлоада. Я думаю, тебе надо идти на специализированные ресурсы по питону или хайлоаду. Я правда не знаю, у тебя просто праздное пионерское любопытство, либо же серьёзный интерес и приличная квалификация.
>>42572
>не пожалели об этом после нескольких лет эксплуатации
Правда жизни в том, что до хайлоада проект надо довести и не сдохнуть на полпути. Фейсбук писали на PHP, потом придумывали техники, чтобы его радикально ускорить, компилятор PHP сделали и ещё что-то. Если бы сразу писали на C++, может такой проблемы не было бы. Но скорее всего потому, что они просто не написали бы логику за разумное время и с разумными ресурсами, и вместо фейса взлетел бы другой проект. На таком же PHP или чём-нибудь подобном.
На питоне хорошо логику реализовывать. Сейчас платформа активно развивается, перспективы есть. С тредами печаль, но нынче главный упор на асинхронность, её недавно поддержали, но прилично.
>Слышал, что джанга 3 пилиться с заделом под асинхронность
Вот что они сами пишут:
> Django 3.0 begins our journey to making Django fully async-capable by providing support for running as an ASGI application.
> Note that as a side-effect of this change, Django is now aware of asynchronous event loops and will block you calling code marked as “async unsafe” - such as ORM operations - from an asynchronous context
То есть ORM пока поддерживаться не будет.
Но Джанго это в первую очередь ORM, там реально очень крутая система моделей, прямо энтерпрайз. В Джанго на моделях надо логику делать, а не на вьюхах. Надо как-то извращённо скрещивать. Может быть проще просто систему моделей из Джанго подключить к асинхронным фреймворкам, пусть они там в каких-нибудь процессах отдельных крутятся. Не пробовал пока, но может скоро придётся.
cкинь курс
Спасибо, буду разбираться
Влез в Channels, и блядь статьи даже на русском хуй понятны. Новая терминология. Я до этого ни с асинхронщиной, ни с сокетами не работал. Ну хуй с ним накатил на проект, сделал уведомления через сокеты, но то что я использовал это 2% от всех возможностей Channels'ов.
Полез дальше в Celery, пока только накатил на проект ещё не разбирался, но ебать их страничка настроек в доках занимает наверное листов 20 А4 формата.
В общем посоветуйте статей\книжек на русском и английском языках чтобы прям по пальцам и терминология и основные концепции. Буду премного благодарен.
1) на входе у меня есть csv табличка
2) с табличкой нужно провести кое-какие манипуляции, поменять местами столбцы
3) измененную таблицу нужно залить в гугл документы, которые располагаются в корпоративном пространстве и провести там еще манипуляции - удалить повторы, вот все такое
4) измененную таблицу нужно скачать обратно на комп в cvs
Вопрос - насколько сложно реализовать заливку данных в гугл доки? Оно же там требует авторизации, вот этого вот всего. С самим парсингом и изменениями файла у меня проблем нет - в курсе это все расписано, а вот как получить доступ к гуглодокам = тут, боюсь, не знаю.
Я тоже для себя подобную муть делаю. Гугли апи гугла.
Первый скрин - функция.
Второй, то что она возвращает.
Принимает она матрицу.
Смотри, у тебя есть список списков вида
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Выражение можно переписать условно так, чтобы понятнее было
def genTextLine(l):
return '\t'.join(map(str, l))
def xui(arr):
return '\n'.join([genTextLine(l) for l in arr])
genTextLine принимает список с данными строки таблицы, например [4, 5, 6]
функция map(str, l) делает из этого списка список вида ['4', '5', '6']? со стоками, а не числами
'\t'.join(['4', ''5', '6'] сшивает список в строку, получается "4 \t 5 \t 6 " (пробелы я добавил тут для наглядности, без пробелов будет, конечно)
И аналогично со внешней функцией, ты сшиваешь в одну строку полученные в genTextLine текстовые строки, это уже совсем просто.
>[genTextLine(l) for l in arr]
Как раз то что и надо было. Что то постоянно сбивало и не мог понять, что '\t'.join(map(str, l)) просто функция в генераторе. Спасибо!
Уже всерьёз задумаваюсь уйти в жабу
Логика в моделях - тоже не лучший вариант
Все работает. Но меня смущает эта ошибка. Нагуглить что-то внятное не могу.
Кто знает, что это такое?
Сижу над задачей час, посмотрел решение, оно там в одну строчку.
Как? Можно ли как то повысить уровень знания построения алгоритмов?
http://pythoshka.ru/p82.html
>>45919
Всё настолько плохо с олимпиадным программированием, что подобное можно назвать вкатыванием?
По поводу данной задачи. Давай пройдем длину шнурка от левого конца к правому. Сначала у нас идет свободный конце длиной l, потом поворот направо длиной а, спуск вниз длиной b. Последние два действия должны повториться три раза (осталось еще два), после чего мы делаем один поворот влево длиной a и начинаем подъем, который аналогичен нашим повторяемым действиям, а значит и выполниться должен тоже 3 раза, после чего мы окажемся с правой стороны и останется лишь пройти свободный конец l.
Теперь запишем эти расстояния уравнением: l + (a + b) \ 3 + a + (a + b) \ 3. Приведя подобные получим: 2 \ l + 6 \ (a + b) + a.
имо такая запись проще, чем на том сайте. Насчет понимания алгоритмов не могу ничего посоветовать, кроме прочтения книг по алгоритмам, в факе доски есть рекомендации. К слову -- я ни одну не читал
\ это умножение если что. Думал звездочка эскепнется.
Это копия, сохраненная 20 августа 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.