Это копия, сохраненная 25 апреля 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>2590923 (OP)
Литература:
https://ln2.sync.com/dl/cf2c1d070#xq4s328t-xbbjys2z-9r6j7ss7-gf4e9dv6 <-- Книжки, новое собрание
Ещё книжки: https://yadi.sk/d/HQhhsBsq3TVRUq
Тоже книжки: https://yadi.sk/d/tArKKuQu3Kejuq
Анон, вместо того, чтобы без разметки постить код, лучше шарь его через специальные ресурсы:
https://ideone.com/ - возможность постить листинги кода и онлайн-запуска, не требует регистрации
https://dumpz.org/ - можно постить листинги, не требует регистрации
https://pastebin.com/ - для листингов, регистрация не обязательна
https://goonlinetools.com/snapshot/share/ - для листингов, без регистрации, но с капчей
#######################################
Вопросы-ответы:
— С чего начать изучать питон?
У питона намного лучше официальная документация, чем у большинства других языков. Есть там и учебное пособие для начинающих: https://docs.python.org/3/tutorial/introduction.html , неофициальный перевод на русский язык: https://digitology.tech/docs/python_3/tutorial/introduction.html (для питона версии 3.8, но разницы почти нет)
— Какие книги считаются лучшими?
На слуху чаще всего Лутц, но там очень много воды. Ещё на слуху Марк Саммерфильд, Эл Свейгарт "Автоматизация рутинных задач с помощью python". Эти книги рекомендуют чаще всего, но книги довольно старые, а питон развивается.
— Есть у кого на примете годный курс лекций по алгоритмам? Формат лекций мне как-то ближе, нежели просто чтение книги.
МФТИшный курс, например, https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
— А как учить джангу? Нахожу только книги по джанге 1.х
У джанги отличные доки (одни из лучших для пистоновских либ, имхо), почитай их для начала. Книгу по джанге можно читать даже для версий 1.x, т.к. принципы остаются теми же. Но лучше хотя бы с версии 2.0, слишком много мелких изменений в базе.
— Какие веб-фреймворки стоит учить в начале двадцатых?
Что бы не говорили, Джанго живее всех живых и умирать не собирается (и Django REST Framework), очень перспективный асинхронный FastAPI, асинхронный AioHTTP. Flask ещё где-то используется, но уже legacy. Прочие фреймворки или у нас экзотика, или это вымирающее легаси как Торнадо.
— В ньюфаг-треде написано, что нужно начинать с SICP, чтобы научиться программировать
Вот, пожалуйста, та же самая программа, но частично переработанная под язык Python: http://composingprograms.com/ (нужно знать ангельский или уметь пользоваться переводчиком)
— Что можно почитать/посмотреть по многопоточности/параллелизации в питоне, да и вообще в целом?
Ролик на американском языке про многопоточность и асинхронность, построение своего event loop с нуля, помогает понять, как устроена асинхронность внутри: https://www.youtube.com/watch?v=MCs5OvhV9S4
— Можно ли на питоне делать мобильные приложения?
Да, смотри на фреймворк Kivy https://en.wikipedia.org/wiki/Kivy_(framework) https://kivy.readthedocs.io но народ на него жалуется
— Как можно без лишней возни ускорить программу на питоне
1) проверь сначала свой код, алгоритмы и структуры данных. Чаще проблема здесь.
2) код можно иногда феерично ускорить, используя JIT (Just-in-Time) компиляцию. Почитай обязательно про модуль numba, он ставится через pip, и альтернативный интерпретатор PyPy.
— Дайте нормальные книжки на русском! Мы, блядь, не в пиндосии живём
Брат, смотри книжки по ссылкам в шапке, там есть и русские. Но помни, без языка ангелов твоя жизнь проходит мимо и ты обречён быть на обочине знаний и технологий.
старая версия шапки, треды 90-148 и ранее: https://dumpz.org/bASGKD8cCFDf
ps: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
че такой токсик?
Например, есть список (кортеж, множество, не важно), создаём итератор, функцией next перебираем элементы и в конце нужно перейти снова на 1й элемент. Нигде в руководствах пока не нашёл способ сделать это проще, чем перехватывать StopIteration траем и вручную его назначать на первый элемент.
>Народ, а есть какой-нибудь встроенный способ перекидывать итератор на начало списка?
Например, есть список (кортеж, множество, не важно), создаём итератор, функцией next перебираем элементы и в конце нужно перейти снова на 1й элемент
Почитай про связанные списки
>>03820
>а есть какой-нибудь встроенный способ
Свой класс связанных списков я могу написать со всеми методами и пр. Вопрос был про возможное изобретение колеса.
>>03824
Предложи другой способ, кроме написания отдельного класса
>>03826
Я так-то не фанат подгружать модули ради одной-двух функций.
Видимо, проще и быстрее самому написать такой класс
Захожу на сайт с измененным user agent - всё нормально, CloudFlare пропускает.
Захожу на сайт с прокси и измененным user agent - CloudFlare считает меня за бота и не пропускает.
Почему? Как так, что по отдельности он не триггерится, а если и прокси и фейковый юзер агент, то стопорит. Айпи же вроде вообще никак связан с юзерагентом.
Ты напиши кейс в котором тебе такое может понадобиться?
Если это список ты просто можешь счетчик с range использовать скинуть в 0 когда надо.
next подразумевает что у тебя и генератор там может быть из которого ты элемент не получишь второй раз.
>Я так-то не фанат подгружать модули ради одной-двух функций.
Ну забудь об этом и подгружай. Целку тут строить из себя не нужно
>>03881
>Предложи другой способ, кроме написания отдельного класса
i = i % len(list)
Как индекс доходит до длины списка, то снова становится равным 1. Хотя если ноль нужно, то if i % len(list) == 1: i = 0
А если не хочешь подгружать весь модуль, то никто не мешает тебе просто скопипастить от туда функцию.
Кейс простой: у меня в игре задействовано время вообще и месяцы в частности, а также перемещение во времени. Месяцы в списке и смысл в том, чтобы когда в ноябре вызывалась функция МесяцевСпустя(3), то был февраль, а если в марте МесяцевНазад(6), то был сентябрь.
>>03915
>>03924
>i = i % len(list)
о, спасибо за изящное решение!
Хотя над копипастой функции из модуля тоже подумаю)
Как забанить всех чсв хуеплётов, чтоб они съебали в свой закрытый чатек в телеге надрачивать друг другу с тишкой, которые строят из себя дохуя интеллектуалов, которые также спрашивали когда-то, условно, чем отличаются футуры от тасок в асинкайо, а теперь преисполнились, но по факту продолжают на работе перекладывать жысоны и пилят кабанчиковые проектики копируя код из гугла/чатгопоты. Рака яиц тебе, желчный профессиоанал.
Подскажите дон где у меня дон тут неправильно дон ? Тесты же изначальные проходит же, но вот на списке [9,9] не получается пройти еже
или я задание не так понял епта? Нужно всего лишь прибавить единицу к последнему элементу списка и вернуть измененный список:
[1,2,3] + 1 = [1,2,4]
[9] + 1 = [1,0]
[9,9] + 1 = [9,1,0]
Так должно быть?
аааа я задание снова неправильно понял, если 99 то это типа 100 должно быть
Этих петухов надо на завод гайки крутить или на судно или в тайгу и тундру, лопату им в руки, кирку и молоток...пусть попробуют тяжелый труд, глядишь и успокоятса. Поймут может чего через облагораживающй тяжелый физический труд и в скором времени говнится перестанут
Как вообще работает литкод? Какой-то он мудренный в сравнении с кодварс. Как возможно передать в функцию тип ИНТ с лидирующими нулями и потом его еще обрабатывать? Как они это делают? Откуда они знают как решають эту задачу? Я вот учился и везде читал что нельзя чтобы нули были перед интежер, а тут литкод дает задачу где интежер представлен с лидирующими нулями.
>Как возможно передать в функцию тип ИНТ с лидирующими нулями
>The input must be a binary string of length 32
ЧИТАЙ УСЛОВИЯ ЗАДАЧИ СУКА ДУРАК
Ничего не понял. Я взял их инпут и запустил в иде. И иде выдает ошибку. Говорит откуда тут нули говорит. И рабочий код уже в моей иде не рабочий. Как это объяснишь, сученышь? На завод тебе надо, к мужикам, вежливее стал бы
Вот у меня простыня. Там в середине ошибка из за того что список не того формата в переменной оказался.
Решил что пойчарм поможет разобраться со своим хваленым дебагом.
Ставлю карсную точку. До места ошибки, запускаю нажатием на пиктограмму жука. Скрипт тормозится всё равно на месте ошибки, а не на месте красной точки.
Гуглинг не помогает. Во первых потому что в пайчарме походу слишком часто интерфейс меняли половина того что находится не актуально. как будто про другую прогу. В официальных гайдах какая-то мммммаксимально общая и пресная инфа типо нажмите на поле - появится красная точка - наслаждайтесь.
Двач помоги, жопа горит.
ЧЯДНТ?
Макака увидела string и сломала мозг?
Для тупых - 32bit binary string - НЕ значит что на вход подаётся строка. String в данном случае переводится как "последовательность". Это значит лишь то, что инты будут меньше или равны 32 бит.
Алсо только что правильно решил за 2 минуты
>Говорит откуда тут нули говорит
На вход подаётся интовое представление этой последовательности. Тебе нужно перевести её в двоичную, перевернуть и перевести обратно в инт
Ну то есть подаётся именно десятичное число. Я через вот разделение на 2 получил двоичное представление в видео строки. Оно уже перевёрнуто потому что записывал остатки как от деления в столбик
Я перевожу его в инт(s,10)
Но почему-то не срабатывает у меня теряются нули которые спереди и часть из переносится на правую сторону и в итоге число становится другим не таким как я получил в строке
>Я перевожу его в инт(s,10)
Тебе нужно вернуть нормальный инт
int('101', 10) == 101
int('101', 2) == 5 # ты должен вернуть
>теряются нули
Добавь их в строку сам. В твоём случае сразу в конец.
>>04149
У тебя длина бинарной строки известна заранее - 32 символа.
Во-вторых - зачем ты пишешь так на питоне? С тем же успехом ты бы мог решать на c, go, rust, или любом другом языке.
В питоне эта задача решается в одну строку и решать её иначе нет смысла, так как это будет менее эффективно, менее читаемо и займёт больше времени.
Я просто хочу скипнуть один шаг в середине zip,не хочу чтобы он вообще выполнялся.
Я по возможности стараюсь писать как надо, просто когда я учился у нас был си и там вот так писали и я видимо привык и поэтому когда я не знаю как на питоне использовать нужный инструмент я делаю такие циклы
В этой задаче циклы вообще не нужны
bin = '{0:b}'.format(n)[::-1].ljust(32, "0")
return int(bin, 2) - изначально написал так, потом отрефакторил
Если сдашься
А можно как-то "скипнуть" итерацию только встроенными функциями? В интернете везде пишут что надо itertools подключать, а не хотелось бы из за одного единственного действия во всей программе это делать.
Континуе?
У итератора только один метод - __next__(), который возвращает значение или кидает StopIteration.
В этом его смысл.
Нужно больше вводных, но если тебе нужно скипать шаг итератора без вывода __next__() - ты делаешь что-то не так.
>Нужно больше вводных
Вот есть такой массив.
_input = [('1-1','1-2','1-3'),('2-1','2-2','2-3'),('3-1','3-2','3-3')]
Я из него делаю
_out = [('1-1','2-1','3-1'),('1-3','2-3','3-3')]
Т.е. zip(\*_input) и нужно пропустить в нем второй элемент, чтобы он вообще не делался. ('1-2','2-2','3-3')
(x for i, x in enumerate(zip(*_input)) if i != 2)
[n for i, n in enumerate(zip(('1-1','1-2','1-3'),('2-1','2-2','2-3'),('3-1','3-2','3-3'))) if i != 1]
Конечно 1 вместо 2 должно быть лол
Тебе же объяснили что НЕЛЬЗЯ ПРОПУСТИТЬ ИТЕРАЦИЮ ИТЕРАТОРА блять.
Что у тебя там такого происходит что ты не хочешь выполнять? Пока ты не объяснишь своих задач тебе никто не поможет.
>НЕЛЬЗЯ
Так можно же пропустить с помощью itertools.
>Что у тебя там
Там строка размером 80 гигобайт, не хочу её трогать.
Нет, делай тогда итератор из слайсов и делай от него зип:
[n for n in zip(\*(i[::2] for i in _input))]
>Так можно же
Боже.
>Там строка размером 80 гигобайт
Ничего не говорит
Короче наберёшь когда реализуешь. Я ебал из тебя инфу вытягивать
Зачем тебе моя инфа. Я вроде нормально задачу описал. Что на вход что на выход. Мне нужно что то с этим вводными сделать, а ты видимо хочешь применить СМЕКАЛОЧКУ и что-то изменить на участке ранее т.е. изменить вводные.
В его кастрированном примере, который не отражает реальной задачи сработает, но он скипает не вторую строку, а каждую вторую. Это во-первых.
Во-вторых слайсы работают с последовательностями, но не с итераторами. Хуесос изначально сказал что у него итератор на входе.
Кнопкодав не в состоянии разобраться как работают итераторы и боится проимпортировать стандартную библиотеку.
На лицо диагноз - клинический кретинизм. Программирование противопоказано.
Ты чего порвался то, братишка? Ты извини если что, не хотел тебя до визга доводить, но ты как-то сам без причины на него сорвался.
Послекурсовый, ты?
Ну либо явно указывать элементы, которые должны попасть в итератор, по идее это должно быть экономнее по памяти чем слайсы, т.к. не создаётся список:
[n for n in zip(\*((i[0], i[2]) for i in _input))]
на вид синтаксис плюсы напоминает и из-за этого страх появляется из-за работы с этой вонючей памятью (боже храни garbage collection)
наверное кто-то в меня камни будет кидать, что я не в тот тред пишу, но просто гляньте на хабре сколько вакансий с go и сколько вакансий с django (да, я сам в шоке) (да, чаще вакансии включает и python и go, но все же, отношение 1 к 5)
Как же я орнул с пикчи.
>В интернете везде пишут что надо itertools подключать, а не хотелось бы из за одного единственного действия во всей программе это делать.
чел, это норма, любого, кто пилит велосипеды будут бить по яйцам.
твой говнокод с костылями будет в сотни раз хуже обычного импорта from
python только из-за библиотек и цениться, нативный питон это уровня паскаля, чисто для школоты
Чел, у питона в половине этих замечательных библиотек под капотом обычные алгоритмы из встроенных функций и циклов. А ничего не импортировать наоборот признак элитарности, сразу все понимаю какой крутой кодер писал, тимлид, не меньше.
Многие встроенные библиотеки написаны на C. Поэтому использовать их обязательно.
Видишь эти пассы? Но функции то работают, а это значит, что они используют C. Твои решения будут просто в сотни раз медленнее. Буквально
1280x720, 2:12
Ну и это видео как раз о тебе, лол.
я так жоска обосрался один раз, думая, что одна пупи либа йоба сишно наоптимизирована. месяцами писал убогие байпассы-костыли между своей архитектурой и этой либой, потому что у нас был принципиально разный подход к дизайну. и всё ради скорости исполнения, ведь эта либа наверняка сишная... так, падажжите, что тут у нас.. ёп макарёк, да там же дубовые лупы на питоне, сука! это пуре путхон модуле! выкинул эту рухлядь и навелосипедил свой велосипед
проверять надо
Все встроенные модули это вся та же часть питона, которую просто разделили дабы не слишком сильно захламлять область видимости кучей ссылок. То есть тут даже не стоит вопрос о том, что бы какой-то модуль с гитхаба грузить, где точно неизвестно, что навертели.
Не использовать именно их это значит говнокодить на уровне 9го класса, где тебе двойку поставят за попытку что-либо импортировать, ибо учителя знают только ванильный питон на самом примитивном уровне.
Всё верно. Стоит вопрос только о том чтобы
>не слишком сильно захламлять область видимости кучей ссылок
Если разработчики питона так сделали, значит и элитный синьор тим лид так делать должен. Ему не нужно захламлять область видимости ссылками. ведь он может зделат всё на одних встроенных функциях.
Хоспаде и чего ты такой душный уже с самого утра. Расслабь булки.
А понял, питон это ксяоми от мира программирования так сказать топ за свои деньги
> s += '0' * (32 - len(s))
s = s.rjust(32, "0")
>питоник вей
Вполне. Я бы еще заменил bin(n) и удаление крайних символов на
format(n, 'b')
> Я так-то не фанат подгружать модули ради одной-двух функций.
Ты тупой что ли?
from itertools import cycle
А ещё говорит велосипедить не хочет, но именно этим и занимается
Можешь попробовать, и где увидишь, что тупишь и ломаешься, то лучше не стоит тратить время на костыли, а дальше учиться в этом направлении
Когда речь идёт о любви/хейте в программировании, то просто игнорь. Это всё уровня споров, кто лучшая вайфу или что лучше, тсундере или яндеру. Дело вкуса, вопрос задачи и просто писькомерство, что я крутой и пиши серьёзные проекты, а ты лах.
Во первых, небольшие проекты крайне востребованы. И всякие инстаграммы написаны на питоне во вторых.
И из-за того, что Java для больших проектов обычно и используется, то и найти работу с ней тебе будет сложнее, потому что тебе придётся устраивать и в крупные компании со всеми их анальными десятью стадиями собеседования, фриланса так же куда меньше.
А так даже c php лучше начать вкатываться в беке, чем с джава. Как раз потому, что с джавой сложнее устраиваться намного на работу в бек
В таких случаях лучше подобные вопросы задавать утверждающему, а не мимокрокам. Мало ли, вдруг у него на жаве есть какая-то готовая библиотека на случай NN, который ему где-то пригодился, а под джангу этого не было. На жаве любой софт писать сложнее и дольше, хоть оно в итоге и быстрее потом выполняется.
> Я так-то не фанат подгружать модули ради одной-двух функций
Стандартная библиотека обычно вшита в сам exe питона, и по умолчанию уже загружена в оперативку, импортировать оттуда модули почти бесплатно. Не говоря уже о том, что там много оптимизированного кода на си.
В общем случае нет способа перекидывать итератор. Сама суть итератора это один раз пройти по каким-то данных, хоть они с магнитной ленты читаются или из радиоэфира приходят. Перемещения и случайный доступ работают только на структурах данных, где все данные под рукой.
Все эти склейки разных апи это очень непросто, там тысячи возможных состояний и их комбинаций. Тг не подключился, а дискорд подключился, или наоборот. Куда-то нужно складывать промежуточные результаты чтобы не потерялись, нужна база данных. Сами апи далеко не всегда очевидно как использовать, особенно чаты реального времени. Парсить проще всего википедию, а не чаты.
надо просто добрее друг к другу быть
Допустим есть массив
000
010
000
И посчитать сколько раз такой массив попадается в массиве
000000
001010
000000
010000
000000
Что непонятно? Сколько раз
000
010
000
встречается в большем массиве.
Я не хочу рекурентно это решать. лол. Но боюсь придётся. Хотя я уже это задание отложил минимум на завтра, если ещё время после основного курса останется.
Ты не можешь в chatgpt спросить подробнее ?
# Write code in python which uses numpy library to find occurences one linear numpy array into another bigger linear numpy array
import numpy as np
# Define the two arrays
arr1 = np.array([1, 2, 3, 4, 5])
arr2 = np.array([3, 4, 5, 6, 7, 8])
# Use the np.in1d() function to find the occurences
occurrences = np.in1d(arr1, arr2)
# Print the result
print(occurrences)
The result of this code should be [ True True True True True] , which indicates that all elements in arr1 are present in arr2 .
Спасибо, что в очередной раз показал мне какая это бесполезная хуита.
В целом, я уже придумал как решить без рекурсивного поиска всех соседних элементов. Такое решение требует больше кода, но и выполняться будет куда быстрее, динамическое программирование as is.
Но столько сейчас прочитать ещё нужно, на весь февраль делов, что тратить время на 3куи задания много совершенно не охота, зря взялся. Вот можно было бы просто искать массив в массиве то было бы очень просто. Но достаточно просто найти первую однушку, понять расположение, вертикально-горизонтально, прописать, что бы больше эти однушки не брать и посмотреть что бы всё было правильно и ровно
Вот у меня есть типа товары, пользователи и отзывы к товарам. Я бы сделал по приложению для каждой из этих сущностей и было бы удобнее, как мне кажется. Или херня? Ну типа отзыв относится к товару и у него есть автор. Не надо так связывать приложения?
А так уже работает, остальное дело техники, лучше разбить на несколько функций проверки только для каждого корабля отдельно
Ну а в зависимости от горизонтально-вертикально и размера корабля добавить координаты в словарь и пропускать их, если снова попадутся.
Ну я понимаю, что работать будет, но типа как лучше? Если я этот проект буду показывать где-то, это не будет показателем того, что я не понимаю, как правильно делать?
Лучше что бы каждое приложение было автономным. А если что то импортируешь из другого приложения, то лучше скопировать это, а не импортировать
Ты о питоне?
Если насчёт вакансий да. У меня знакомый программист пошел работать на стройку. Говорит из-за конкуренции зп маленькие
Тебя никто не заставляет учиться и вкатываться уж тем-более. Этот тред не о работе, в принципе.
Приложение - это я имею в виду app в джанго, а не проект. Че я там модели копировать буду?
Такое впечатление что целое поколение сорвенуется в том как бы написать портянку с максимальным количеством абстракций и чтобы без 10 чесов пердолинга никто в ней разобраться не мог.
Вместо того чтобы просто взять твердую хорошую функцию обобщить несколько асбтракций и запихнуть в неё. Чтобы можно было на одном экране монитора нагляно видеть конкретный участок ПОЛНОСТЬЮ.
Пидоры блядь оопэшные! Аряяя!
Питон же изобрели как раз для того чтобы всё было супер просто до тупого просто. Нет не хотим просто хотим, хотим миллион абстракций, а потом будет с умным видом ходить и делать вид что это самый простой и читаемый вариант.
>Че я там модели копировать буду
Если у тебя возникает такая необходимость, ты изначально неправильно разделил зоны ответственности между аппками.
Ну вот у меня есть отзыв у товара, если у меня будет отдельное приложение для отзывов, то надо же будет указывать связь отзыва с товаром и импортировать модель товара. Например. Я прост тогда даже не могу особо представить чтоб в одном проекте были реально вообще независимые приложения.
А то я прост запутываюсь, у меня куча вьюх и сериализаторов для всего говна получается. Вот бы они как-то были распределены поудобнее по разным файлам.
Берёшь и вкатываешься, кто тебе мешает.
Просто ты не стараешься искать
Дл джунов мало, и в выборке по Python Junior попадается много нерелевантных, с датасаенс, аналитикой, тестировщиками и вообще какой-то левой хуйнёй.
a = [1, 2, 3, 4, 5]
for i in range(0, int(len(a)/2)):
...a, a[len(a) - i - 1] = a[len(a) - i - 1], a
...
a
[5, 4, 3, 2, 1]
Проблемы соевых джунов. Я не был питон джуном, а был мидл дата аналитиком, потом ради бабла решил перейти в фулл питон и прошел собес на питон мидла-фуллкека, пришлось потом ещё фронт учить.
по range подразумевалось, да
Например, какой-нибудь модуль, который делал бы массив фиксированной длинный и потом заставал и засовывал бы в него всё что угодно со скоростью света O(1) и вообще все операции по индексам делал бы за O(1). Можно и самому написать, но вдруг есть уже на C ?
>массив фиксированной длинный и потом заставал и засовывал бы в него всё что угодно со скоростью света O(1) и вообще все операции по индексам делал бы за O(1)
Это только через хэшмапу можно сделать, можешь использовать ordered dict.
не прочитал про фиксированную длину.
https://docs.python.org/3/library/array.html
Уже есть, но сам понимаешь - жертвовать будешь тем что засунуть туда можно не всё что угодно
array наверное
ну и numpy очевидно
>хуямпи
хуямпай же. numpy это нампАй, а не нАмпи/нампИ
По принципу отделяемости/отключаемости. Но это сложнее, чем писать монолит.
Обычный dynamic array. Вставка в конец будет O(1) только если хватает capacity, иначе весь массив реаллоцируется в новом месте с удвоенным размером.
> в начало вставляет за О(n)
Нахера тебе вставлять в начало? Есть конечно deque, но она редко нужна.
> более экономные структуры
Куда ещё экономнее?
> все операции по индексам делал бы за O(1)
Так в списке и так O(1) для доступа по индексам. Именно поэтому вставка в начало O(n).
Угу, сначала они просят не велосипедить и пользоваться готовыми модулями со встроенкой, а потом спрашивают вот такую хуйню на собесе.
Как называется эта болезнь?
Потому что это как умножать в столбик.
Ты не будешь использовать это на работе, но строить ракеты тебя тоже не подпустят, если ты не можешь это делать
А где я должен умножать в столбик, во внерабочее время? И толку мне от навыка умножения в столбик, если я последний раз делал это 30 лет назад и хуй без гугла повторю снова?
нужно же как-то отфильтровать 1200 человек...
в конце останется доктор математических наук, чемпион ММА и полиглот ростом 195 и хуем 25 сантиметров
Добить фрейморвки и начать вкатываться постепенно. Думаю к лету управлюсь
И оказывается можно было проверить вхождение массива в больший, только через scipy
Твоя болезнь называется тупость. Это задача на рассуждение, на ход твоих мыслей/действий, от тебя не просят написать какой-то хитровыебанный алгоритм экономный по памяти/времени. И если тебе мало вводных данных, то ты задаёшь вопросы.
Меня в яндекс на собесе просили написать свой контекстный менеджер. Я его до собеса никогда сам не писал, помнил только про методы энтер/экзит, и с первого раза без ошибки не написал, т.к. всегда пользовался встроенным контекстлибом.
codewars
>твоя болезнь тупость
грубий ты
>меня в яндекс
еще и хвастунишка
на завод тебя надо на завод или на стройку раствор лопатой мешать, глядишь уму разуму поучишься у мужиков
Что у тебя анусай-то так на атомы распался, мелкобуквенный? На заводе мизинец отпилил, не соблюдая ТБ? Никакого хвастовства, в яндекс не прошел, чему рад, а на стройке успел в детстве поработать, и на даче заливал цементом крыльцо, поэтому взялся за голову в 20 лет, чтобы там не работать.
Убрать галку "указан доход" и вместо 300 получить 2000+ было тяжело.
На примере списка это когда не создаешь новый список как вспомогательный, а на исходном сопоставляешь элементы жонглируя из позициями?
Т.е. когда чел называет интервьюера больным, который просит маслёнка перевернуть список, это норм. Когда его в ответ называют больным это невежливо. Хорошо, буду знать какие у нас заводчяне-строители двуличные.
"Даже справедливо пролитая кровь лишь продлевает кровопролитие"
синий человекокошка из аватар 2
"C волками жить по волчьи выть" (c) пыня, 25 лет попытов
Подскажите сейчас реально вкатиться на джуна? Если да то на каких сайтах можно найти работу?
18 лвл учу программирование несколько месяцев
Но циклы с элементами перестановками труднее чем готовые функции
Там уметь надо отсортировать. А нажать к примеру сорт(про) любой дурак может.
Так что индус скорее ты
>Но циклы с элементами перестановками труднее чем готовые функции
>Там уметь надо отсортировать
Пример в студию
А что надо спрашивать? Какие типы в питоне есть? Или что такое гил? Или что такое арены, сколько весит инт, что такое опкоды и фрейм обжект?
>на собесах и прям всё плохо
Без тебя вообще пиздец, никто собес провести и код написать не может. Зато на дваче в /pr/ в питон-треде целая кузница непризнанных гениев, которые не достойны всей этой локальной чушни, сразу фаанг подавай.
Ты на работу берёшь человека, который в 4 из 5 случаев будет общаться с командой, ревью проходить или кого-то ревьюить, не бояться писать код в живую на камеру, и самое главное, брать за щеку него ответственность и отстаивать, почему он так написал. И важно не то, как он весь код на однострочники перепишет, а как он аргументирует, что это надо сделать.
Я лучше с дотошливой ебанашкой-индусом буду работать, чем с молчаливым закрытым себе_на_уме-прогером, который потом ещё через 3 месяца уйдёт, и за которым придётся всё переписывать.
Ебать, а что за арены? В стдлтбу впилили квейк3?
Задача буквально решается слайсом и максами. Причём, я более чем уверен, что есть модуль, реализующий этот алгоритм. А ещё, по-моему, подобная задача проходится в курсе дискретной математики, но не уверен.
Чего тут уметь-то надо?
>А что надо спрашивать?
То, что нужно компании, а не тупые задачи из учебника по информатике. Например, если компания игровая, то пусть напишет простенькие крестики-нолики, морской бой или пятнашки в консоли (графику и самотесты прикручивать не нужно, просто голый код). Если компания разработчик ПО, то пусть хотя бы небольшой скрипт-парсер напишет или простенькую приложуху-преобразователь.
Хули вы как дети, а?
>Без тебя вообще пиздец, никто собес провести и код написать не может
У тебя задача отсеять индусов-макак на входе, а не перебирать каждого из 1200 внутри тела функции. Ты прогер или HR тупой?
> и отстаивать, почему он так написал
Потому что он индус, что тут ещё отстаивать?
>Я лучше с дотошливой ебанашкой-индусом буду работать
Если ты работаешь с ебанашками, то что это говорит о тебе, как прогере? Ладно бы, если учил, но ты именно работаешь. За язык никто не тянул.
>который потом ещё через 3 месяца уйдёт, и за которым придётся всё переписывать.
Ну да, хули он с ебанашками не хочет работать и тупеть до их уровня. Лучше перепишем его однострочки в многостраничные функции, а то у индусов мозг взорвется, если они лишний раз мануал откроют
Покажи как ты решишь ее без срезов и максов. Просто жонглируя элементами списка
Сделал бухой за 10 минут, не понял как, но я такое на литкоде решал, там что-то про локальный максимум было
читай всё, со временем картина сложится. тупли и дикты это база питона, мимо них в любом случае не пройдешь
Вот сейчас читаю про функции. Автор пишет о каких-то символьных таблицах, которые как я понял влияют на область видимости переменных, но я это (вроде бы) понял только потому что я другие языки раньше изучал. Автор объясняя функции вводит еще много разной терминологии которую объяснить не удосуживается. Меня это раздражает и хочется вообще дропнуть туториал
Потому что по питону у меня нет хороших альтернатив. Например у жсников есть облюбленный гайд от Кантора, тогда как даже в шапке треда никаких особенных рекомендаций нет, есть только ссылка на кучу книг и большинство из них по старым стандартам. Приходится есть говно, но хотя бы свежее.
>нет альтернатив
задай вопрос: почему? и сразу второй: зачем ты пытаешься выучить заведомо мертвое говно?
>То, что нужно компании
Так компании нужен чел, который умеет думать, а не копипастить стандартную библиотеку.
>скрипт-парсер напишет или простенькую приложуху-преобразователь
Как компании поможет понять, что он за погромизд, если он импортнёт реквестс и сделает гет-запрос? Это и без кода можно понять, послушав его ход мыслей.
Я так в одно жирное место не прошел, хотя тестовое сделал и всё работало. Мне надо было написать парсер литкода с выгрузкой в файл и с минимумом зависимостей. До меня доебались, что не использовал стандартный csv (в требованиях не было), и что в хэдеры засунул много лишнего, типа достаточно было юзер-агента (у меня только с юзер-агентом не работало).
>У тебя задача отсеять индусов-макак
У меня задача взять человека в команду. Приходят в течение недели 3 человека, ещё 5 зарезервированы на следущую. Кто из первых 3 подходит проекту, его берут, остальные отлетают, даже если из остальных 5 были более умные или опытные.
>Если ты работаешь с ебанашками, то что это говорит о тебе, как прогере
У меня был опыт работы и с ебанашками и с такими же чсв-хуйланами как выше по треду, которые строят из себя оракулов программирования. Я с ними работаю, и параллельно других менторю, и учу их быть чуть менее ебанашками и не чсв-хуйланами.
>Ну да, хули он с ебанашками не хочет работать и тупеть до их уровня
Нормальные высказывают тебе/лиду/скрам-мастеру, что им не нравится, и все под всех подстраиваются или выстраивают новую систему. И потом уходят нормально, если по их мнению ничего не поменялось, или поменялось в худшую сторону. Но такие будут терпеть, начнут срываться, делать вид, что всё норм, перестанут эффективно работать и резко захотят уйти.
Я в начале пути сам был в такой ситуации, и с многими знакомыми тоже самое было. И виноваты в этом не ебанашки рядом, а они сами. На работу их никто не гнал. Про уровень коллектива, куда они идут, узнают на собесе и за первые 2-3 недели, и никто их не принуждает работать. Никто их не заставляет писать и поддерживать существующий говнокод. Любые предложения по рефакторингу функций/зависимостей/проекта/архитектуры только поддерживаются.
Но они считают себя по определению умнее. Им похуй на то, что они работают в команде над всем этим вместе, и что до них кто-то раньше это делал и потом свалил. Они ждут что за ними говно будут подчищать только ультрапомидоры-лиды, а остальные индусы-неофиты недостойны их.
И ваще какого хуя на проекте питон 3.8, везде уже 3.11. И хуле у нас фласк, когда везде уже фаспапи.
А потом в пулл-реквестях код с проверкой пустого списка через is not None, а не not, в именованных параметрах params, а не kwargs, в дто новое поле добавил, а в миграции нет. Зато с селери работал, а я нет, значит я анскильная ебанашка, а он будущий гвидо.
>То, что нужно компании
Так компании нужен чел, который умеет думать, а не копипастить стандартную библиотеку.
>скрипт-парсер напишет или простенькую приложуху-преобразователь
Как компании поможет понять, что он за погромизд, если он импортнёт реквестс и сделает гет-запрос? Это и без кода можно понять, послушав его ход мыслей.
Я так в одно жирное место не прошел, хотя тестовое сделал и всё работало. Мне надо было написать парсер литкода с выгрузкой в файл и с минимумом зависимостей. До меня доебались, что не использовал стандартный csv (в требованиях не было), и что в хэдеры засунул много лишнего, типа достаточно было юзер-агента (у меня только с юзер-агентом не работало).
>У тебя задача отсеять индусов-макак
У меня задача взять человека в команду. Приходят в течение недели 3 человека, ещё 5 зарезервированы на следущую. Кто из первых 3 подходит проекту, его берут, остальные отлетают, даже если из остальных 5 были более умные или опытные.
>Если ты работаешь с ебанашками, то что это говорит о тебе, как прогере
У меня был опыт работы и с ебанашками и с такими же чсв-хуйланами как выше по треду, которые строят из себя оракулов программирования. Я с ними работаю, и параллельно других менторю, и учу их быть чуть менее ебанашками и не чсв-хуйланами.
>Ну да, хули он с ебанашками не хочет работать и тупеть до их уровня
Нормальные высказывают тебе/лиду/скрам-мастеру, что им не нравится, и все под всех подстраиваются или выстраивают новую систему. И потом уходят нормально, если по их мнению ничего не поменялось, или поменялось в худшую сторону. Но такие будут терпеть, начнут срываться, делать вид, что всё норм, перестанут эффективно работать и резко захотят уйти.
Я в начале пути сам был в такой ситуации, и с многими знакомыми тоже самое было. И виноваты в этом не ебанашки рядом, а они сами. На работу их никто не гнал. Про уровень коллектива, куда они идут, узнают на собесе и за первые 2-3 недели, и никто их не принуждает работать. Никто их не заставляет писать и поддерживать существующий говнокод. Любые предложения по рефакторингу функций/зависимостей/проекта/архитектуры только поддерживаются.
Но они считают себя по определению умнее. Им похуй на то, что они работают в команде над всем этим вместе, и что до них кто-то раньше это делал и потом свалил. Они ждут что за ними говно будут подчищать только ультрапомидоры-лиды, а остальные индусы-неофиты недостойны их.
И ваще какого хуя на проекте питон 3.8, везде уже 3.11. И хуле у нас фласк, когда везде уже фаспапи.
А потом в пулл-реквестях код с проверкой пустого списка через is not None, а не not, в именованных параметрах params, а не kwargs, в дто новое поле добавил, а в миграции нет. Зато с селери работал, а я нет, значит я анскильная ебанашка, а он будущий гвидо.
у меня на работе зп 150к
но работа тяжелая типа заводчанина петровича
поэтому хочу вкатиться
но глядя на такие вот вакансии хочется вздернуться от безысходности особенно после утомления от учебы и решения задач
>Я с ними работаю, и параллельно других менторю
Вот я конечно гандон, написал и не проверил. На текущем месте в команде, с кем работаю, ебанашек нет, 1 чсв есть. Параллельно кого менторю, 2 ебанашки были, 1 отвалилась, 2 эволюционировала.
Ааааааа, я думал он по дефолту добавляет к текущему значению. То есть нужно вот так. Всё, допёр.
>Потому что по питону у меня нет хороших альтернатив. Например у жсников есть облюбленный гайд от Кантора, тогда как даже в шапке треда никаких особенных рекомендаций нет, есть только ссылка на кучу книг и большинство из них по старым стандартам. Приходится есть говно, но хотя бы свежее.
такая проблема, что шарящие ребята не сидят и не мониторят вводные туториалы для нубов, где объясняется что такое переменная. каким образом в шапку должно попадать что-то годное - загадка для меня
я, например, годно прокачался, пройдя "An Introduction to Interactive Programming in Python" на курсере. мне очень понравился этот курс, и я выучил на нём тонну всего. но никогда не слышал, чтобы кто-то рекомендовал этот курс. сам рекомендовал его многократно, пока мне не надоело
зато в шапке указан лутц. я ни разу в жизни не слышал ни одного хорошего отзыва про книжки лутца (сам ни разу не читал) но лутц всегда стабильно в шапке всю историю двача, а годнота, которая мне нравится, нет. поэтому шапка на дваче это такой себе источник знаний
https://practicum.yandex.ru/backend-developer/
попробуй этот курс от яндуха (хотя я не пробовал). есичо, это я нашел в гугле, на верхней строчке по запросу "курс python"
>>06723
Потому что курсы-двухнедельки сильно обесценили профессию, клепая необходимые отрасли «кадры» огромными миллионными масштабами. При таких скоростях качество «кадров» едет к плинтусу. На нормального программера же надо учиться лет 9–10 (два–три класса школы, пять института, потом два-три года рабочей практики на производстве).
А выпускают таких долбоёбов, которые кроме гугла с индусокодом и метода пузырька нихуя не знают. Ни методов программирования, ни алгоритмов, ни шаблонов проектирования, ни паттернов. Услышали про зарплаты, заучили курс на степике — готов программист-помидор.
Много кто тут в двух словах объяснит абстрактную фабрику, паттерн моста или цепочку обязанностей? А чем функтор от монады отличается? А перечислить топологические алгебры?
А зарплату 300ккнаносек все хотят. Но предложить таким кадрам что-то больше зарплаты кассира на начальном этапе невозможно. Бизнес не поймёт. Кадр не окупает себя, его ещё много лет учить. Тратить на него ресурсы.
То есть, рост зависит только от интеллекта. А его у 80% населения планеты всегда будет не хватать.
нормальными программистами рождаются. остальные 95% просто пользуются их наработками, пусть то рак с двухнедельного курса или сеньёр-помидор с 20летним опытом
>курсы-двухнедельки сильно обесценили профессию, клепая необходимые отрасли «кадры» огромными миллионными масштабами
кадры клепают на айти кафедрах в некоторых институтах. а на курсах зашибают бабло на долбоебах. к обучению это никакого отношения не имеет.
это распил бюджетного бабла, гугли госуслуги цифровые профессии
Кокой ужос! Люди называют переменные самыми очевидными и понятными для чтения названиями!
Двачую, все переменные у меня это последовательность Il знаков
типа
Il = [23,45,85]
l = 'hello'
lIlllIllI = func(llIIl)
вкатунов десятки тысяч, вкатившихся лишь сотни
на англюсике тож оч мало
Одна программа требует Пайтон 3.10 а у меня Вин 7 официально дальше 3.8 двинуться не могу
Нашел какой то то форк, https://github.com/NulAsh/cpython не знаю что это.
Вопрос как это устанавливается?, запускаю setup.py ничего не происходит
Вот я максимум решал задачи 5 кю, если они легкие конечно. Но иногда жестко туплю даже на 7 кю. Понимаю тут просто проблемы с формированием рейтинга сложности. Но я думал что все это начинающие до 1 кю, а даны это типа профи прогеры. Сегодня узнал что один чел, который работает прогером максимум 4 кю решал, а дальше говорит ума не хватило. И говорит чтоб я там особо не зацикливался на подобных сайтах. А где тогда мне практиковать программирование? И чем определять свой уровень навыков?
Кодварсы и прочие литкоды это дроч алгоритмов, программирование помимо этого состоит из грамотной компановки кода, структуры классов, паттернов и т.д. Причем очень часто случается так, что на реальной работе ты за год максимум пару раз применишь парочку хипов. И это только вершина айсберга, есть ещё архитектура, настройка развертывания, правильная организация хранения данных и ещё кучу всего.
Как это попрактиковать? А никак кроме реальной работы. Сначала читаешь книжку или статью, а потом делаешь и желательно, что бы кто то более опытный тебя проверил.
Я бы сказал 4киу достаточно для среднего программиста.
1-2 это уже олимпийский уровень.
3 где-то посредине и зависит от задачи. То есть просто без знаний матана возможно не стоит даже лезть в некоторые задачи или просто тратить на это время.
Ну и когда начинаешь решать задачи 3+киу уровня, то даже не думай начинать велосипедить и пытаться решать костылями. Сразу же гугли алгоритмы, которые подходят для решения этих задач.
Это, конечно, стоит делать и для задач попроще, но на 4-5 ещё можно справиться костылями, на третьем уровне уже жопу себе ими порвёшь
У нас вакансия – ебать твою мать. Вопросы?
Пытаюсь выкатиться из врача участкового терапевта ебал рот лечить людей. Поэтому учу питон
Вопрос снят. Ебучие словари переменных переписывали форму в дефолтное состояние. Пойду посру.
я ее вывожу, он мне пишет True вместо 1
я потом увеличиваю ее на 1, и он мне пишет 2
че с этим делать? как его заставить сделать ее числовой всегда?
не, значение у неё не 1 (int), а именно boolean
выводи или int(peremennaya) или при назначении переменной, где на неё поступает буль, конвертируй в инт
ну скинь свой код, что бы понять, что у тебя за фигня. И bool это тот же инт - 0 и 1.
Без sorted(), только используя for loop.
Профи бы заебашил квиксорт вместо вставки, а чатик нужно специально об этом попросить, и то он в половине случаев пишет квиксорт с модификациями неправильно.
Неосилятор ты?
Именно на таких примерах можно понять умеет человек алгоритмически мыслить или он тупая макака кнопкодавка
придумал непрактичный проект -> не получаешь эмоционального одобрения от общества -> выгорание -> пот -> моча -> говно
_мимо_захожу_на_гитхаб_подрочить_на_свои_лайки_
Сейчас есть единственная причина писать свою собственную ОС и ее уже пишет Google - https://github.com/google/gvisor/
Большая.
Король обезьян, ты?
Именно на таких примерах можно понять, стоит ли брать чела в команду или придётся тратить время на его обучение.
Но вы можете и дальше устраивать конкурсы на самый странный велосипед, а ты лично ездить на нём без сиденья. Ну а хули эти кнопкодавы сиденьями пользуются, верно? Ведь только без сиденья можно понять зачем оно нужно и как им пользоваться.
Руль-то, я надеюсь, уже изобрели? Или поворачиваете наклоном центра тяжести, пока еблом асфальт не рихтанёте? Ну чтоб алгоритм езды на велосипеде лучше понимать.
В первом случае ты перебираешь элемента списка s
Во втором случае ты просто идёшь по счетчику range, а не по списку s
Кстати, если нужно что-то сделать с несколькими элементами массива (например, сравнить с соседями), я предпочту использовать range(len). Потому что do_smth(s[i - 1], s, s[i + 1]) лучше выглядит, чем do_smth(s[i - 1], elem, s[i + 1]).
2) Это не отнимает время интерпретатора на выполнение и обработку?
А то совершенно логично некоторые функции внутри других функций держать по смыслу, но как-то некарсиво.
Если надо - делай. Если не надо - не делай.
нормально. время отнимает, ведь функция определяется с нуля каждый вызов. поэтому реальных юзкейсов мало
использую, когда нужно внутри функции многократно обработать какую-то локальную же переменную. и если при этом нет упора в производительность
Если говорить про перфоманс, то имеет смысл только в замыканиях
hui, pizda, jigurda, karasik, pook, pok, foo, bar
Когда этот пул будет исчерпан добавляешь номер pizda_2, karasik_10
я спросил правильно, а не как мы на работе сейчас их называем
нет, он хотел сказать функции внутри функции
кратко и по делу
лучше всего когда в имени переменной два слова
но иногда имеет смысл назвать покороче
тебя это ебать не должно
pravilnaya_peremennaya_dlya_znacheniya_pook
Так рекомендуют, но в реальности пишут pook_1, srioyonk_2
Я за две недели в питоне так понимаю, что второе используется, когда нужно че-то сделать с первым и последующим элементом. Типа array = array[i+1] и если это условие будет в цикле for i in array, то цикл будет выходить за пределы и не будет компилироваться. А в цикле for i in range(len(array)) нет. Также можно вместо range(len(array)) юзать for i in enumerate(array).
Если это все хуйня, поправьте, пожалуйста, сам хочу разобраться уже наконец-то
Фор это обертка итератора, если итерировать итерируемые обьекты они возвращают итерируемый элемент. А функция рэндж просто создает "пустой" иетратор из чисел, если нужно просто итерировать определенное кол-во раз. а сам итерируемый о-кт не нужен.
Правильно я понимаю, что в цикле:
for x, i in enumerate(array)
если мне надо работать только с индексами элементов массива, то я юзаю i, а если с самим элементом, то юзаю x?
если тебе надо работать только с тем или другим, то ты не юзаешь enumerate, а используешь for x in arr или for i in range(len(arr))
enumerate если тебе нужно и то и другое:
for i, x in enumerate(reasons_to_die):
print(f'{i}. {x}')
Где почитать и посмотреть примеры использования лямбды? Чтобы не простые типа а<10 или а + б. А что-то посложнее, чтобы почувствовать нормально чо это такое
Всё понял, разобрался.
пример отвратный, на таких только запутываться. хороший пример функция sorted, где можно уточнить, что именно сортировать в каждом элементе, передав свою функцию в аргумент key
допустим, есть несколько дат в формате (день, месяц, год)
> (1, 5, 1970), (10, 5, 1980), (5, 6, 1985)
> sorted(dates)
даст [(1, 5, 1970), (5, 6, 1985), (10, 5, 1980)]
а мы хотим отсортировать по году. поэтому:
> sorted(dates, key=lambda d: d[2])
даст [(1, 5, 1970), (10, 5, 1980), (5, 6, 1985)]
лямбда это тот же def, просто экономит строчку и не создает переменную с именем функции. можно и так сделать:
> def get_year(date):
> ____return date[2]
>
> sorted(dates, key=get_year)
php, html, css
C или C++ или Rust. Для низкоуровневых интерфейсов короч, где питоны, жсы и прочие голанги не могут ничего.
аноны, я тупенький мб
посмотрите, пожалуйста, я не могу понять:
делал упражнение, типа, ввод и поиск наибольшего и наименьшего
я долго не мог понять, чойта не фурычит, сдался, посмотрел подсказку
оказалось, моё решение отличалась лишь одним: я сначала искал наименьшее, а после наибольшее
если же сначала искать наибольшее, а после наименьшее, то всё фиксится
почему если поменять пикрил if'ы местами, то результат тотчас меняется?
скинул код и пример ввода-вывода
https://pastebin.com/9tjuR5mg
пробовал рисовать цикл на бумаге, всё равно не понял
при условии, что цикл скушал число 100 после 5, он всё равно считает 5 наибольшим
мне просто хочется понять, почему, если я меняю циклы местами, то всё фиксится, какая тут логика
Потому что int(i) возвращает целое число, преобразуя строку i, не меняя при этом самой переменной i. input() по умолчанию возвращает тип str, поэтому в i и в smallest/largest В твоем коде сравниваются строки, строки сравниваются лексикографически, поэтому 5 больше 100.
Как узнавать "айди страницы"? то есть допустим, на странице есть id = 'media-{НОМЕР АЙДИ}'. я не понимаю куда мне нужно впихнуть еще один цикл for (или даже не через него) чтобы тупо получить числа от нуля до (допустим) 30. КАК????
да не, по сути, я бы мог и page для id юзать.. но я пишу скрипт, который парсит комикс. Через selenium. Загвостка в том, что я ищу по ID в классе. (точнее, просто по id = 'image-0') . так как там структура такая - /page/1 и page/0 это одна и та же страница... Тот пикрил показывает мой код, типо ссылки генерируются с помощью for цикла. Но я не могу использовать значение page для id, так как на первой странице используется image-0 а не image-1 (соответственно на 2 странице используется image-1) поэтому я и попросил помочь впихнуть еще куда нибудь цикл.
php проще питона осваивать в целом, потому что он более узконаправленный изначально.
А если освоил более-менее один язык, то другие ещё быстрее пойдут, потому что многие концепции одинаковые или крайне похожи.
for page in range генерирует значения для page от 0 до значения в range. просто убери page += 1, который прибавляет для всех значений 1, и будет у тебя начинаться с 0
визуализирует код по шагам, можно ползунок перемещать и стрелочки показывают что конкретно сейчас происходит в программе
https://pythontutor.com/cp/composingprograms.html#mode=edit
у меня вопрос, а такое, но только в IDE имеется? пробовал дебаг в Visual Studio Code жать, но чёта он сразу [начало->финиш] делает, без возможности по шагам идти
мимо >>10277
Как он сделал дебаг а странице из хтмл? Это сложно? Как достичь такого уровня?
Рейлвей попробуй.
Да ето так
В unittest в ините setUp выполняется некие sql вещи, которые тестовую бд заполняют. В tearDown откатывается. Естественно это занимает дохуя времени. Хочется хотя бы как-то на уровне старта класса сделать инициализацию. А после завершения работы класса - удалять все. Но вот как обновлять таблицы, которые в ходе теста были изменены? Есть идеи какэто иначе можно сделать?
Либо делаешь всё в транзакции и ролбекаешь.
Либо мигрируешь базу, потом делаешь темплейт из нее и перед каждым тестом создаёшь чистую из темплейта и в конце теста дропаешь.
>тестировать методы сервиса апи-гейтвей, если они на той стороне обращаются к другим сервисам?
Платина это поднять заглушки вместо других сервисов и генерировать их ответы, не обращаясь к оригинальным тестам.
>Тесты должны запускаться после того, как сервис задеплоился или до?
Если коротко, то по ситуации и в зависимости от архитектуры и соглашений на конкретной галере. По-хорошему до деплоя надо хотя бы убедиться, что оно тебе ничего не ломает, но, скажем, GitHub Flow какого-то Staging не подразумевает вовсе, они катают всё на живую (не представляю, как! Но ведь катают).
А если у тебя банковское приложение, то у тебя только контуры тестирования считать устанешь.
>в транзакции
Не получится. Транзакции уже юзаются внутри некоторых тестов. Если только можно теггировать транзакцию и откатывать к ней, но я про такоей в постресе не слышал
>мигрируешь базу
Примерно так и выполняется сейчас. И это много времени, почти половину времени тестов занимает
По такому описанию вангую, что он заподозорил тебя быстро, но дал ещё несколько попыток. Это логично: никакой бот не страшен, пока он делает что-то 1-5 раз.
Во-первых охлади своё трахание.
Глубокий вдох, глубокий выдох...
Итак, когда мы прозреваем дзен, видим два наиболее вероятных варианта: либо авторы пайчарма обосрались. Либо (и это более вероятно) обосрался ты и, например, ошибка происходит до стоп-точки.
В обоих случаях спасёт запуск пошагово. Возможно, поможет стоп на первой значимой строке.
Последнее время использую VS-Code, запустил пичарм, посмотреть ,как оно там работает, но эта сука не нашла системного питона и не смогла создать venv сама. Разбираться влом.
взято
значит у тебя ошибка до красной точки.
На вкатившихся сложнее делать бабло, они знают, чего хотят и не будут жрать, что дали. Потом, как уже было сказано: вкатавшихся меньше, но, что ещё существеннее, вкатившиеся либо никуда дальше не катятся и сидят формоклёпами на одном освоенном фреймворке, либо раскатываются в таком количестве направлений, что не перечислишь. Смотри, ты сам сказал:
> мультипроцессинг
> мро
> инит_субкласс
> прочие абстракции
Теперь скажи, сколько народу потенциально возьмёт курс по мультипроцессингу? А сколько возьмёт его на конкретной площадке?..
Вот и выходит, что всё не слава яйцам.
Меня более-менее спасает ютуб с разборами интересных кусков и официальная документация. Но я тоже не лезу слишком глубоко, у меня другой профиль.
Впрочем, прямо сейчас попался баннер с этим:
https://practicum.yandex.ru/async-python/
Так что не сказать, что прям вообще ничего нет.
ну на яндексе курсы норм. но они и рассчитаны не для заводчан и домохозяек, что захотели вкатиться, а для студентов или тех, кто уже вкатился, но и дальше хочет изучать
line = 'hello'
....with open('file.txt', 'w', encoding="utf-8") as file:
........file.write(line)
Если открыть этот файл в блокноте там кодировка ANSI будет, если line = 'привет' то кодировку нормально сохраняет в "utf-8", но мне нужно чтобы в любом случае было "utf-8"
Пробовал line.encode("utf-8") и потом сохранять файл в бинарном режиме 'wb' - всё равно ANSI
encoding="utf-8-sig" решает проблему, но меня это сраный символ в начале файла бесит, костыль какой-то.
Как заставить эту сраную ОС не решать за юзера в какой кодировке что сохраняеть, если это ЯВНЫМ ОБРАЗОМ УКАЗАНО?
Жопа горит.
чел. это блокнот кодировку автоматически определяет и обсирается. просто смени руками на utf-8 и убедись, что всё работает
Бля точно. Придется сраный BOM в начале файла оставлять. Потому что технология такая
1 Скрипт сохраняет файл.
2 Иногда пользователь из виндуса вносит туда дополнения через блокнот
3 Скрипт опять открывает файл и читает.
Из за того что блокнот, как оказалось, не может понять что перед ним файл в кодировке utf-8 (если в файле нет особых символов) то после того как пользователь внес туда строку с кирилицей и сохранил он и сохранится не в той кодировке - и когда программа опять пытается открыть в utf-8 получается обсер.
import requests
proxies = {
"http": "http://47.243.86.12:443",
"https": "https://47.243.86.12:443",
}
url = 'https://www.youtube.com'
try:
response = requests.get(url, proxies=proxies)
print(response.text)
except:
print("Proxy does not work")
>Бля, ну ты посмотри сначала, какой эксепшн тебе кидает.
[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:997)
Глянул здесь:
https://qna.habr.com/q/1166628
С виндой что-то связанно. Попробовал вот так и на линухе работает:
proxies = {"http": "http://47.243.86.12:443"}
url = 'https://www.youtube.com'
Пришлось выкинуть https из проксей, хотя урл запрашивает ютаб именно по хттпс. Под виндой один хер не работает. Не понятно почему, хотя сейчас нет времени сильнее вникать.
Да тебе похуй протокол исходного сайта, можешь хттпс через хттп проксировать. Важно, как настроеная сама прокся.
мимо питухон вкатун 1.5 месяца стажа
математика макакам не нужна, асяким дата саентистам примитивных знаний на уровне матриц хватит, матан вообще мимо (матан в смысле матанализа)
data-science это такая хуйня типа мерчендайзера.
Просто красивое название за которой любоая хуйня может скрываться. Маматика уровня матана там обычно не нужна
Найди вакансию для вкатуна на пихоне в своей мухосрани.
А где можно найти задачки до циклов? Мне казалось if while for проходят в первую неделю вката, разве существуют какие-то задачки где даже это знать не надо?
сначала решаешь задачки на циклы, а потом во всех задачках за циклы будут бить по рукам
курс на степике прохожу, там простенькие на работу со строками, if
Получил вот такой скрин от чувака на вопрос о том, как часто для каждого файла исполняется cron. Чувак куда-то съебал и больше не отвечает. Как понять по этим цифрам слева периодичность cron-а?
> # m h dom mon dow command
Попробую так пояснить:
каждую минуту крон проходит по всем тапскам и смотрит, не нужно ли запустить что-то сейчас. Если у кого-то совпадает время по маске с текущим, он выполняет команду.
Т.о.
Первая команда выполнится, когда: dom=13, h=10, m=0, т.е. 13-го числа в 10:00, раз в месяц (в любой месяц и в любой день недели), вторая и третья, аналогично, 13-го числа в 10:15 и 13-го числа в 10:30;
Четвёртая - когда dow=1, h=10, m = 45, то есть в любое число любого месяца, по понедельникам в 10:45, пятая - по понедельникам в 11:00.
Добавлю, что если у тебя там в поде окажется какой-нибудь инит-контейнер, который ебошит миграции, то только, блджад, попробуй его нормально не проверь в контролируемой среде, ждёт тебя клизма трёхведёрная с патефонными иголками.
>>04125
я так с вскод ебался, со сторонним пакетом, а оказывается нужна была настройка "justMyCode": false
может и в пичарме надо такое?
>>04508
что такое серьезный проект?
в свое время инстаграм был написан на джанге кажись
>>06891
что за петик? а теперь подключи туда авторизацию, аккаунты, кеширование вьюшек, csrf, локализацию...
а ведь это во всех проектах есть. и на джанге делается в два счета, без своих костылей
>>07704
я тоже в свое время остановился на 5кю, звезд с неба не хватаю, но и код пишу кажется приемлемый
>>07845 (Del)
вакансии есть, но не для вкатунцов. я пару лет назад искал джуна, людей без вышки даже не смотрел. отсобесил 3 крутых челов, взяли очень умную тяночку, делает сложные задачи, быстро научилась. зачем мне рисковать и брать вкатунца - кота в мешке.
5 лет 4к евро джангист
>И это правильно. Ящитаю.
обычные курсы реально страдают в плане заданий. даже если они есть, то их мало.
Поэтмоу после прохождения первых курсов, советую заглянуть именно на leetcode и порешать там хотя бы все задания на easy.
И решайте не костылями, а сразу же ищите видео индусов с решениями, потому что именно там вы найдете куча простых алгоритмов и техник, которые упустили при прохождения просто курса. Но понятно дело, не просто копируйте, а разбирайтесь, что они там вообще делали и зачем.
>инстаграм был написан на джанге кажись
На этапе стартапа. Потом они джангу перелопатили до состояния, что уже не похожа на джангу.
Тебе для начала достаточно знать, как их юзать.
Как писать и зачем это уже довольно специфические задачи не для всех.
почему один ставит собачку то ретерна, а другой после? ничего не понял
Оно и не должно печатать, там нет конкретной ошибки, это ошибка assert.
Можешь делать assert 1 == 2, "hui"
Возьми да напиши.
Хочу чтобы функция через декоратор выводила список экспонент произвольного количества переданных аргументов
Полустаночки, ёпта.
Вот не пойму как сделать
А ещё дальше переехали на Фласк. На чём сейчас - ХЗ.
Ты, кажется, неправильно понимаешь, что в этих случаях декорируется.
Декорируется то, что объявляется на следующей за декоратором строке.
А ретурны вообще от других функций могут быть.
У тебя обертка закоментирована # а обертки wraps в коде нет, и даже если бы была она бы не обернулась по первой причине.
Так я же выше обернул её. Чтобы описание через фанктул вывести. Но не могу понять почему время не показывает
Пиздец, тебе дауну конкретно указали где у тебя ошибка, а ты вместо того чтобы подумать над этим ещё и огрызаешься. Ну ты блядь и свинья. Помогай после такого вкатунам бывшим баристам и поварам.
Вы наверное это мне? Новичку, который учит декоратор? Или все же помогатору? Кому верить? На ютубе все так я делаю как на ютубе
Профит пухлого, что он напрямую работает с хмл файлами, но фичи ограничены.
Есть ещё xlwings без ограничений, но он использует com объекткы экселя, нужна шинда и эксель для его работы.
Так что можно выбирать, но в большинстве случаев первый, если тебе не нужны какие-то йоба формулы или что-то в этом духе.
Это какое-то забивание гвоздей микроскопом, он совсем для другого.
Я потому и спрашивал что в этих хитросплетениях хочу не обосраться. Сейчас один модуль подключу а там окажется что есть подводные камни и переделывай.
Мне нужно читать таблицы из файла .xlsx с разных страниц этого файла, потом писать в ячейки и надо чтобы в ячейках с формулами читался финальный результат а не сами формулы.
Всё больше ничего не нужно.
Ну пробуй, хули. Я там знаю, насколько сложные у тебя таблицы.
Про привязку к экселю у одной из либ я уже предупредил.
Хлебушек, ты нахера строковое представление времени пытаешься вычесть? Убери } у первого времени и { у второго.
я так спецом сделал, чтобы посмотреть значения времени в начале и в конце. Потому что не мог понять почему берется ноль милисекунд. Но я сделал ща огроооооооооооооомный список, и тогда время стало показываться. Видимо на моем примере она выполняет все 0 милисекунд
спасибо. с перфкаунтером работает!!!!
Чел, вот есть не округлено число. Оно само по себе не округлится над ним нужно провести операцию явно или не явно. Понимаешь? Грамотно составленный вопрос это уже половина ответа. Если тебе не нравится функция раунд можешь свою написать с блэкджеком и шлюхами и без мерзкого банковского округления, а с чотким поцанским школьным арифметическим.
>без помоше раунд() ыле нампы?
Магчыма зрабіць int(num), але акругляецца заўсёды ў меньшы бок.
Разве что в Румынии
Дано
1) json файл типа { путь_к_фаелу : [зависимости] }
пикрил
2) путь к одному из таких файлов
Нада
Скопировать все файлы из папки где лежит основной файл,
скажем если это
assets/content/weapons/rpk16/weapon_izhmash_rpk16_545x39_container.bundle
то надо скопировать все его зависимости которые тоже лежат в папке
assets/content/weapons/rpk16/
И прописать новые зависимости, уже к той папке, куда файлы скопированы.
Помимо этого зависимости скопированных файлов надо тоже отыскать в json файле, и прописать новые зависимости.
Скажем решение уже собсна готово, но занимает очень много строк кода, я такое не люблю, я люблю чтоб просто, может есть тут гении которые опишут простейший способ сделать все это ?
которые лежат в одной папке, то есть для пикрила это будут
"assets/content/weapons/rpk16/client_assets.bundle"
"assets/content/weapons/rpk16/textures/client_assets.bundle"
Восемь строк заняло решение. Но поддерживаю предыдущего анона, показывай свое, а то как-то ты слишком без уважения помощи попросил.
Вот у меня есть функция
def func(x, key='None')
В таком состоянии её можно передать в мап map(func, iter)
А меня интересует как-то так: map(func(key='foo'), iter) но так разумеется нельзя может есть какие-то премудрости синтаксиса чтобы так можно было?
Ну это то же самое что и через лямбду. Мне просто интересно было есть ли такой синтаксический прием для конкретно таких случаев, без прокси функции (и без хитрости вроде второго списка в map).
Ну партиал более внятное решение.
А так можешь выкинуть нахуй устаревший мап и использовать генераторное выражение, оно тоже ленивое как мап.
res = (func(x, key='foo') for x in iter)
Охуеть, по-моему всё в питоне можно заменить генераторными выражениями. разница с пам только в паре длиннее на пару символов больше, а по скорости наверное даже быстрее т.к. компрахеншены скорее всего на Си.
Ну тут есть разница. Лист компрехеншен сразу генерирует и создает новый список. На выброс, если тебе не для каких-то последующих действий.
А это генератор, который выдает on-demand, как мап. Из них можно собирать пайплайны, в которых даже скобки опциональны.
sum(x for x in range(10))
Спасибо анон, ты всегда мне столько интересного рассказываешь.
Тут ес че, 3 пукции манифест потому что я пока думаю как лучше, городить замену сразу когда прохожу по зависимостям, или сперва все их занести в массив, а потом уже по нему пройтись, попутно добавляя то что нужно в массив для последующего переноса файлов в другого папку
544x672, 0:04
Кстати ща сижу пукаю с утра и думаю каково хуя я просто не сдампил json файл в строку и не сделал .replace(), так было бы проще, но мне все-же нужны оригинальные ссылки для того чтобы файлы скачать, поэтому пройтись циклом по зависимостям все-равно придется
Хуя ты говна понаписал, портянка километровая для такой плевой хуйни, даже читать не буду - состарюсь пока до середины дойду.
Замени это всё говно вот этой функцией, за 2 минуты накалялкал когда ебалом по клаве прокатился.
def copy_key(key, dst):
....shutil2.copyfile(key, dst)
....root = os.path.dirname(key) + os.sep
....for i, d in enumerate(dict[key][Dependencies]):
........if d.startswith(root):
............shutil2.copyfile(d, dst)
............dict[key][Dependencies] = dst + d[len(root):]
Так, ну выглядит работоспособно, запускать я ее конечно буду дома вечером, потому что на работе нету фаелов игры, а вот вопрос, где тут отбираются файлы которые лежат в одной папке с нужным и к ним новые пути зависимостей прописываются ?
Еще тут вопросик от братвы к тебе, в dst передается путь к уже созданной директории ? или copyfile умеет создавать директории ?
в некоторых случаях, например в главном примере, один из нужных файлов лежит в директории /textures/ в нужной папке, и структуру файлов надо сохранить, => если копифаелс не умеет создавать папки их надо заранее создать, а я не знаю заранее какие надо папки создавать, в одном случае это /textures/ в другом /zalupures/
>>14045
>def copy_key(key, dst):
key это ключ словаря, dst - папка куда копируем
assets/content/weapons/rpk16/weapon_izhmash_rpk16_545x39_container.bundle
>os.makedirs(dst, exist_ok=True)
UPD - делаем путь без ошибок, даже если этот путь уже есть
>....shutil2.copy(key, dst)
UPD - заменил copyfile на copy - чтобы копировалось в новую директорию со старым именем файла
>....root = os.path.dirname(key) + os.sep
Отрезаем от ключа долька директорию где он лежит и добавляем сепаратор системы чтобы не было ошибок дальше при сравнении
>....for i, d in enumerate(dict[key][Dependencies]):
крутим список зависимостей
>........if d.startswith(root):
если зависимость лежит в той же папке что и ключ - берем её. тут можно ещё lowercase добавить. я забыл
............shutil2.copyfile(d, dst)
>копируем эту зависимоть туда же куда и ключ
............dict[key][Dependencies] = dst + d[len(root):]
>меняем путь в зависимости на новый
лан, дома затестим, по-крайней мере выглядит меньше чем то что я насрал, спасибо, грамотей
на вот заслужил фотокарточку с титьками
ну кстати, решение сдампить json с зависимостями и зареплейсить строки еще меньше по сути то, конечно все-равно придется пройтись циклом по зависимостям, но не лишнего дроча, вернее он скрыт
в чем данный код не прав ?
Ты так свою задачу сформулировал, что я так и не понял что тебе вообще нужно было, просто насрал функцию не глядя и не проверяя, прямо в текстовом поле двачика. Так что без понятия чем лучше. Могу просто по своему опыту сказать что всегда есть подводные камни, и всегда лучше работать с адресными объектами словарей и списков, где всё под контролем, чем с текстом.
так-то да, так надежнее
ну ты что совсем тупой изи каточка же.
from functools import reduce
print(reduce(lambda a,b:int(a)*int(b),str(821)))
Лол, ну и иди на хуй тогда даун, сам решай свои задачки для детей с задержкой в развитии.
причина подрыва
Это же классическая задачка.
Делишь на десять, чтобы отрезать разряды с конца, пока нихуя не останется.
Как она преобразует бинарный файл в текстовый? Ну в целом какие принципы там работают вкратце? Вкратце!
Там описано что она ПРОСТО преобразует. по ВОЛШЕБСТВУ. как на ютубе. А я думал будет типа математика как она понимает что этот байт это такая буква или цифра и т.д.
Вот типа такого
Почитал и простыми словами это операция меняет 1 на 0, и наоборот.
То есть есть у нас цифра 5 в десятичной системе, в двоичной она будет выглядеть 101. Применив инверсию мы получаем 010, что в десятичной равняется 2.
Но у меня почему-то так не работает. Я записываю какое-нибудь число, и оно просто уменьшается на единицу по модулю и меняет свой знак на противоположный. То есть 5 становится не 2, а -6. Пикрил как пример. Что я делаю не так? Или может в питоне биты какие-то другие? Помогите пожалуйста, будьте добры
Твое объяснение мне не понятно
она работает ровно как ты написал. биты берут и инвертируются. побитно.
Ты наблюдаешь отрицательное число, потому что такова форма записи отрицательных чисел.
Везде одинаковое, просто есть signed , есть unsigned.
Под этот самый знак отрезается старший бит.
Т.е. unsigned 8bit int это от 0 до 255, signed это от -128 до 127.
В питоне есть только signed, поэтому своим нотом ты этот знаковый бит тоже хуяришь.
Можешь поиграться тут с репрезентациями https://calc.penjee.com/
Добавлю, что пикрил не предлагать. Работает конечно, но это же костыль ебаный.
Спасибо
Я просто думал что здесь как в списках запись будет по типу *= [::], а так хз не додумался бы даже с %
Ну можно конвертнуть в список и попать элементы или дополнительный счетчик ввести, но с вайлом скорее подразумевается математическое решение.
А может это такой тест, кто как решит.
> Пихать logout с логикой POST запроса в представление каждой страницы кажется порочной практикой
А что такого?
А вообще можешь делать редирект на страницу логаута и сразу отправлять пост запрос на логаут, который тебя ещё раз редиректит.
Ненавижу повторяющийся код.
>редирект
Так видимо и придётся делать, но костыль жи. Что интересно, при function-based представлении выход происходит около секунды, а при class-based мгновенно, даже промежуточного редиректа не видно.
Отсосать у питониста!
чтобы отправить объект и распаковать его прямо в аргументах, достав только нужное свойство
Какие ещё нахуй уровни байтов? На питоне просто нет инструментов для работы с железом. Это скриптовый язык для всяких задач уровня: если хочу какоть, покакою, а иначе не покакою.
Питон это виртуальная машина, молотящая байткод. Хуяришь к ней обвязочку драйверную, пробрасываешь внутрь свое железо и еби свои байты.
Я бы посмотрел на такой цирк.
Да ты ебанутый. Вот из-за таких идей и появился Electron.
Так не работает.
Вот я прочитал уйму книжек, чуток покодил и хочу тоже вкатиться во фриланс по питону. Так вот. Может поделитесь списком типовых заданий, которые обычно нужны заказчику, ну чтобы уже дрочить не абстрактные какие-то надуманные задания а реальные, то есть вопрос, что именно нужно на биржах заказчику, с каких заданий лучше начинать.
Описание приложения: приложение разрабатывается с помощью фреймворка flask, работает с базой данных SQLite, имеет API и веб интерфейсы. Цель приложения: каталогизация и структурирование информации по различным веб-ресурсам.
1. API-интерфейс. Приложение принимает GET и POST запросы:
a. POST запрос №1 должен содержать в теле ссылку на какой-либо веб-ресурс. Приложение должно обработать полученную ссылку, разложить ее на протокол, домен, доменную зону и путь. Если в ссылке присутствуют параметры - преобразовать их в словарь. Полученные данные нужно сохранить в таблице базы данных, присвоив уникальный идентификационный номер (uuid). Возвращать пользователю ответ в формате json с разложенными данными и статусом обработки. Если пользователь прислал не ссылку - сообщать ему об этом в ответе.
b. POST запрос №2 должен содержать в себе csv файл с перечнем ссылок (формат файла - каждая новая строка одна ссылка). Все ссылки нужно обрабатывать по образцу POST запроса №1, а также обработка должна выполняться в фоновом режиме. В ответ добавить общий статус обработки файла (количество обрабатываемых ссылок, количество ошибок, количество ссылок, направленных на сохранение в БД).
c. GET запрос №1 должен выводить все сохраненные ссылки из БД (добавить возможность выборки по доменной зоне, id, uuid).
d. GET запрос №2 возвращает последние 20 строчек лога (см. п.2).
2. Логирование. Приложение должно проводить логирование своей работы с ротацией лог-файлов при достижении определенного размера файла (1 мегабайт). Необходимо логировать все полученные запросы и ответы приложения, а также информацию о добавлении в БД новой записи.
3. Веб-интерфейс. Требуется реализовать 3 веб-страницы для приложения. При вёрстке страниц требуется использовать фреймворк Bootstrap5. Постараться выдержать единый концепт оформления страниц.
a. Страница 1. Реализовать веб-страницу, содержащую формы для добавления в приложение новых веб-ресурсов. Формы должны добавлять веб-ресурсы как поштучно, так и загрузкой CSV файла. Формат CSV файла тот же, что и для API интерфейса.
b. Страница 2. Реализовать веб-страницу с таблицей, отображающую все ссылки из базы данных с разбивкой на страницы (пагинация, по 10 элементов на страницу). Также веб-страница должна содержать элементы управления - поиск по доменному имени, возможность фильтрования по доменной зоне, а также удаление конкретного элемента из таблицы и базы данных соответственно.
c. Страница 3. Реализовать веб-страницу, отображающую строки из лог-файла. Отображение должно быть динамическим (при обновлении файла - обновляется и содержимое веб-страницы).
Если вы владеете знаниями JavaScript - добавьте интерактивные уведомления на веб-страницах по результату выполнения каких-либо действий. Иначе используйте для коротких уведомлений функционал flask flash.
4. Авторизация (Необязательное, бонусное задание). Добавить в приложение авторизацию пользователей по токенам, дописать необходимые эндпойнты и шаблоны для авторизации и завершения сессии, функционал, описанный в пунктах 1-3 сделать доступны только для авторизованных пользователей. Логировать авторизацию, завершение сессии и попытки несанкционированного доступа.
5. Дистрибуция и контейнеризация. Код приложения должен упаковываться в docker-контейнер и автоматически запускаться при старте контейнера. Приложение должно быть залито на github. В проекте должен быть файл README с описанием проекта, эндпойтами и пошаговой инструкцией по разворачиванию и запуску проекта.
Описание приложения: приложение разрабатывается с помощью фреймворка flask, работает с базой данных SQLite, имеет API и веб интерфейсы. Цель приложения: каталогизация и структурирование информации по различным веб-ресурсам.
1. API-интерфейс. Приложение принимает GET и POST запросы:
a. POST запрос №1 должен содержать в теле ссылку на какой-либо веб-ресурс. Приложение должно обработать полученную ссылку, разложить ее на протокол, домен, доменную зону и путь. Если в ссылке присутствуют параметры - преобразовать их в словарь. Полученные данные нужно сохранить в таблице базы данных, присвоив уникальный идентификационный номер (uuid). Возвращать пользователю ответ в формате json с разложенными данными и статусом обработки. Если пользователь прислал не ссылку - сообщать ему об этом в ответе.
b. POST запрос №2 должен содержать в себе csv файл с перечнем ссылок (формат файла - каждая новая строка одна ссылка). Все ссылки нужно обрабатывать по образцу POST запроса №1, а также обработка должна выполняться в фоновом режиме. В ответ добавить общий статус обработки файла (количество обрабатываемых ссылок, количество ошибок, количество ссылок, направленных на сохранение в БД).
c. GET запрос №1 должен выводить все сохраненные ссылки из БД (добавить возможность выборки по доменной зоне, id, uuid).
d. GET запрос №2 возвращает последние 20 строчек лога (см. п.2).
2. Логирование. Приложение должно проводить логирование своей работы с ротацией лог-файлов при достижении определенного размера файла (1 мегабайт). Необходимо логировать все полученные запросы и ответы приложения, а также информацию о добавлении в БД новой записи.
3. Веб-интерфейс. Требуется реализовать 3 веб-страницы для приложения. При вёрстке страниц требуется использовать фреймворк Bootstrap5. Постараться выдержать единый концепт оформления страниц.
a. Страница 1. Реализовать веб-страницу, содержащую формы для добавления в приложение новых веб-ресурсов. Формы должны добавлять веб-ресурсы как поштучно, так и загрузкой CSV файла. Формат CSV файла тот же, что и для API интерфейса.
b. Страница 2. Реализовать веб-страницу с таблицей, отображающую все ссылки из базы данных с разбивкой на страницы (пагинация, по 10 элементов на страницу). Также веб-страница должна содержать элементы управления - поиск по доменному имени, возможность фильтрования по доменной зоне, а также удаление конкретного элемента из таблицы и базы данных соответственно.
c. Страница 3. Реализовать веб-страницу, отображающую строки из лог-файла. Отображение должно быть динамическим (при обновлении файла - обновляется и содержимое веб-страницы).
Если вы владеете знаниями JavaScript - добавьте интерактивные уведомления на веб-страницах по результату выполнения каких-либо действий. Иначе используйте для коротких уведомлений функционал flask flash.
4. Авторизация (Необязательное, бонусное задание). Добавить в приложение авторизацию пользователей по токенам, дописать необходимые эндпойнты и шаблоны для авторизации и завершения сессии, функционал, описанный в пунктах 1-3 сделать доступны только для авторизованных пользователей. Логировать авторизацию, завершение сессии и попытки несанкционированного доступа.
5. Дистрибуция и контейнеризация. Код приложения должен упаковываться в docker-контейнер и автоматически запускаться при старте контейнера. Приложение должно быть залито на github. В проекте должен быть файл README с описанием проекта, эндпойтами и пошаговой инструкцией по разворачиванию и запуску проекта.
class SuperPook:
pass
Вот у нас образец
malenquie_puk = SuperPook(srenk)
А как делать сотни таких объектов с рандомными именами? Чтобы как ключи в словаре.
Спасибо конечно. Но это одно задание из... Я имел ввиду чтот титпо такого
- написать задание на фласк
- бла бла бла
- бла бла бла
Ясно что Это просто ТЗ к одному заданию. И я уже в ахуе если честно.
на самом деле можешь банально полистать биржы и посмотреть с одной стороны заказы, а с другой стороны исполнителей, что они пишут у себя в профиле и так далее
Пока что самое ебейшее тестовое по отношению сложность/время выполнения, которое я видел.
Да вроде активно обновляется, асинхронку прикрутили.
Какую Gui библиотеку нужно скачать чтобы быстро это реализовать? Или движок может какой-то для игр.
Ну как раз если ты возьмешь какой-то сириус бизнес, то будет больше ёбли.
Ты не полностью сформулировал задачу, так что не ясно, какие фичи в целом нужны. Что это и для чего?
Посоны, а можно как-то так оформить строку чтобы одновременно в ней было и ожидание элемента и клик по нему?
WebDriverWait(webdriver, 11).until(EC.presence_of_element_located((By.ID, "LUL"))).click()
А объясните зачем двойные скобки, которые выделил болдом. Почему с одинарными ошибка?
Это тупля, очевидно же. Зачем она там хз, видимо надо для чего-то.
PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\django\\project_name\\debug.log' -> 'C:\\django\\project_name\\debug.log.1'
> Просто питон уже хорошо знаю, пишу ботов на нём
Прикручиваешь ручки к чужой либе? Заебись знаток.
Ты написал пост в стиле, пацаны, я научился гвозди забивать, как вкатиться в строители? Что будет не выебоном, по-твоему?
ответить можно за конкретно обозначенное время вкатиться на конкретно обозначенную область за конкретно обозначенное время а не 3 поста подряд тратить своё время на выебоны
на конкретно обозначенную зп*
ты сначала сказал что конкретно сейчас я ничего не могу, хотя я спрашивал про потенциал через полгода-год. Потом ты сказал какую-то общую хуйню про изучение питона без уточнения какого-либо времени. Почему ЧСВ тебе так мешает не быть говном?
Если бы ты адекватно ответил, не пришлось бы тебя брать за яйца с уточнением того что я про конкретное время и конкретную цель спрашивал.
Я уже и не говорю что добропорядочный ответ хорошего человека содержал бы ещё конкретные рекомендации насчёт того, стоит ли в область ботоделания вкатываться, какие ещё навыки надо развивать и какие области лучше, но ты просто говно которое хочет повыёбываться на ньюфагах и которому легче 10 постов уклончиво отвечать на вопрос вместо одного нормального уважительного ответа. Твоё самолюбие сейчас не позволит тебе выпизднуть ничего лучше чем "я тебе ничего не должен", но почему-то ты посчитал должным потратить намного больше усилий чтобы насрать сюда бесполезных постов.
Просто боты это такой большущий маркер Я НУБЛО.
Ты получаешь что-то работающее, нихуя по сути не сделав.
Надо дрочить кор язык, надо дрочить стдлибу, надо дрочить тулчейн, надо дрочить гиты, надо дрочить базы, надо дрочить никсы, надо дрочить алгоритмы и структуры.
Ты чайной ложкой зачерпнул из огромной горы песка и бежишь спрашивать, а за сколько я смогу вкатиться? За столко, сколько у тебя выйдет хотя бы минимально поскрестии все эти пласты, не выгорев при этом.
Так лучше ответ?
забыл ещё ооп, архитектуры всякие, паттерны. ну короче дохуя ещё.
Да, нормальный ответ, спасибо. Базы кое как присобачивал через постгрес или майскьэл, алгоритмы и структуры в унике были, гиты тоже, стдлибу сейчас учу по пунктно. Ботов хочется делать потому что просто опыт был и реально деньги за это платили которые руками чувствовал, других вариантов так просто найти фриланс я просто не встречал и трясусь что можно целый год ебашить а потом узнать что шансов в этой области нет
>так если эти нейрохуети начнут массово юзать может в них вкатываться лучше?
Они похоже сами везде вкатятся.
Я с точно такими же намерениями и знаниями пришел в этот итт тред. Джва года "писал" в стол и для души, игнорируя по этой причине всё что мне было не нужно, но изрядно надрочившись в определенной области - думал что море по колено и горы по плечо. А потом решил всё-таки формализовать и структурировать свои знания, закрыть пробелы. И тут я понял как глубока эта кролечья нора, она бездонна. литерали можно годами просто учить всё на свете и всё равно будет то, чего ты не знал. Но вот без чего точно не стать питухнистом это без знания СТАНДАРТОВ ИНДУСТРИИ - нужно знать алгоритмы O(n), O(log) вот это всё, да не просто знать и глазами пробежать, а глубоко понимать, а для этого нужно глубоко понимать структуру данных и весь подкапот. Я теперь смотрю на сво. старую писанину и понимаю какое это было нубское говно. По этой причине, видимо, тебе так и ответили ИТТ, ты коснулся вершины айсберга и думаешь что схватил бога за бороду, но мы все через это чувство проходили ранее.
А мне норм.
>нужно знать алгоритмы O(n), O(log) вот это всё, да не просто знать и глазами пробежать, а глубоко понимать, а для этого нужно глубоко понимать структуру данных и весь подкапот.
я просто спрашиваю блять сколько на это времени нужно если чётко по плану учить. Выгорать или нет это уже мои проблемы, мне нужен план конкретный.
про полгода хуй знает, больше от удачи зависит, может за 2 недели залетишь, а может 2 года будешь искать
задрочи базовый синтаксис питона и поделай петики на джанго и фастапи, потыкайся в парсеры, по алгоритмам опять же, для вката достаточно понимания О-большого, рисуй год опыта в резюме и пиздуй штурмовать хед хантер
http методы, tcp, udp, всю эту залупу тоже надо понимать, на всех собесах спрашивают
главное гейткиперов ебаных не слушай, да алгоритмы и структуры данных это знать надо, но лучше в них углубляться когда будет возможность применять это на практике, прям задрачивать в стол их можно если ты еще студент и у тебя еще есть возможность сидеть на шее у мамки
нахуй нужны алгосы челику который хочет формошлепить за прожиточный минимум?
захочет роста тогда за них возьмется, вкат с них начинать если ты не упругий зубастый студент который хочет в яндекс/фаанг смысла нет
Так без алгосов у тебя и будет школокод с трехэтажными циклами. Ты считаешь это нормально? Ладно спорить не буду.
но за этот школокод он уже будет кушать, а там начнет улучшать, опыт уже будет тикать, что не так?
Я думаю, что чтобы его взяли на работу он как минимум должен будет показать свой гихаб, а может просто выполнить тестовое. А там все увидят какой у тебя уровень.
а чем гитхаб во время учёбы заполнять кроме как задачками с кодворс лол?
паппетир есть, в сто раз пижже.
>>16178
Самое интересное, что эта нейросетка хорошо лобает код на питоне/жабе/жс/голанге/шарпе и прочих высокоуровневых языках. При этом даже на С идёт полнейший посос при отступлении от стандартных задач. Я уже не говорю про кресты, раст и ассемблер. Настоящие программисты на коне, а питух-макаки будут успешно заменены нейросетями.
Так она в любом языке при отклонение от примера из документации обосратьсч может. Не надо затирать про какую-то экскоюзивность низкоуровневых языков.
Нихуя. На питоне и жс вообще полноценный софт крафтит, да ещё и с тестами, если попросить. В экспериментах с С++ однажды ответила, что затрудняется реализовать запрос. Всем отделом проиграли.
не зря у нас в универе с и с++ в приоритете
Ох уж эти мрии крестовика.
Просто питухон более популярный. Тем, обсуждений, библиотек и решений на нем гораздо больше в открытом доступе чем на любом другом другом языке, а эта сетка просто собирает ответы со стакоферфлоу и обсуждений гитхаба.
Лол или ты реально думал что ВСЕМОГУЩАЯ НЕЙРОСЕТКА сама какие-то решения и ответы придумывает.
Ващет там чёрный ящик с абстракциями уровня /b/. Сами прогеры не знают, что происходит внутри. Они только делают вход-выход и методы. Как этими методами и данными шаманит натренированная нейросеть, одному Богу известно.
Это обычный нлп трансформер, предсказывающий более вероятное продолжение фразы. Никакой магии там нет, что она чаще всего видела, то и будет выдавать более развернуто.
Хуйню не неси. Внутри твоего черного ящика под названием "нейросеть" просто определенный тип структуры данных, сделанный по образу нейронной сети нервных тканей. Заполняет эту структуру известный программистам метод. Они могут в любой момент достать оттуда объект и посмотреть его связи, если конечно это было бы кому то нужно, но это ни кому не нужно и все данные просто так и оставляют в какой-нибудь двоичной каше.
>ориентировочное время выполнения - 24 часа
В прошлый раз, когда эту портянку постили - у многих пригорело, но на самом деле речь не про 1 сутки, а про 3 рабочих дня. Так работет разработка в корпоративной среде.
Если трое суток, то нормально.
А может вообще академические часы имелись в виду а не рабочие дни? Не фантазируй, тут просто заказчик фуфлогон был или кидала, во всех тестовых всегда по человечески пишут сколько время дается, а тут значит вон как, догадаться надо. Короче, без явного пояснения - часы это часы, а то что ты предполагаешь - просто твои фантазии.
им трудно напечатать лишнее слово, чтобы убрать двусмысленность?
list2 = ['foo','bar']
Как максимально эффективно за один проход (и желательно в две строки) получить список элементов, которые есть в list2 но отсутствуют в list1.
Количество и порядок элементов может быть любой, элементы не повторяются, я бы сделал сэт и в нем сравнил, но это уже как минимум два прохода, не говоря про остальные телодвижения.
Хочу вкатица в путон))
Скажите что читать что смотреть
Спасиба реально тем кто поможет а остальным скажу так хейтеры я вас люблю
Это копия, сохраненная 25 апреля 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.