Это копия, сохраненная 13 марта 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>2568047 (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: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
текущий исходник: https://goonlinetools.com/snapshot/code/#8gd2g1snu3l8i26k0bc6k9
Потому что 80% населения Вселенной — тупые говнюки. И всё делают соответствующе.
Низкий порог входа плюс концепция "не думай о производительности" разлагает мозг.
Есть список кортежей, нужно отсортировать его так, чтобы первые элементы шли в обратном порядке, а если они равны, то вторые шли в прямом порядке
Как эту хуйню сделать?
Есть список кортежей, нужно отсортировать его так, чтобы первые элементы шли в обратном порядке, а если они равны, то вторые шли в прямом порядке
Как эту хуйню сделать?
спасибо
лямбда-функция имба какая-то
хотя наверно и без неё тут можно, но сегодня бабы у меня из головы не выходят и я тупой как баран
зачем
Да хоть под домофон пиши.
> концепция "не думай о производительности" разлагает мозг
вкатывайтесь в геймдев на питоне. там только о производительности и будете думать. сразу выучите тонну новых алгоритмов. потому что циклы тормозят
че пишешь?
Спасибо ебать, покодили
>того же орили теперь стоят от двух-трех тысяч?
>Спасибо ебать, покодили
Посмотри почасовую ставку начинающего джуна, посмотри, сколько эта книга в часах стоит. Подумай, сколько часов надо потратить, чтобы прочитать и проработать эту книгу. Не так уж и дорого.
А ещё навалом очень хорошего обучающего материала открытого и бесплатного. Я не про пиратские раздачи, именно бесплатного.
Примерно как оригинал, я думаю. Ну может накинули сверху от жадности.
Но оригинальные красивые пдфки лежат на каждом углу, я уже сто лет не читал бумажных книг. Разве что прикупил себе пару покет референсов на амазоне чисто для прикола.
У меня лично все книги на английском. В долларах она $40-50 баксов стоит на амазоне. Это всё равно дешевле, чем проходить курсы по 120 тысяч на яндекс практикуме. Я не думаю, что это насколько большая цена, что нельзя раз в 3 месяца покупать книг баксов на $500, чисто чтобы расширять свой кругозор.
Алсо, я покупал книги и подороже. Если книга охуенная, или редкая, то и 10 тысяч не жалко заплатить.
Да посмотри на тот же сикп в твердой обложке или какую-то илитную лиспоту. Там на сотни цена может идти. Ну да, в принципе, это больше коллекционная ценность, лул.
Где-то одинаково. Но в жс много легасной поеботы странной, питон более вылизан и предсказуем.
Плюс чисто ванилла жс тебе вряд ли пригодится, придется ещё какой-то рякт учить поверху.
да там все новые книги поступают с задержкой 1-2 года, + они сотрудничают с издательствами и удаляют годные книги, пидорасы
Бери любую попавшуюся книгу и лижи себе, а читай пдфку.
На курсах вроде яндекс-практикума у тебя интерактивное обучение, контроль со стороны и т.п., это совсем другой уровень.
60тр = 2тр в день, включая выходные. Два дня = книжка. А если рабочие часы считать, это 300-350 рублей в час. То есть 12 часов = книжка.
Сколько времени надо работать с книгой, чтобы её прочитать и осмыслить? Больше 100 часов это точно.
line = "some text #foo test text #bar another text#error text #foo one more text"
есть тэги
tag_list = ('#foo', '#bar')
Надо эту строку распилить на части по тэгам, чтобы получилось: ["#foo test text", "#bar another text#error text", "#foo one more text"]
У меня вот такая хуйня получилась.
sep_i = []
for t in tag_list:
for f in re.finditer(t, line):
sep_i.append(f.start())
sep_i.append(len(line))
sep_i = sorted(list(set(sep_i)))
sep_tags = [line[i1:i2] for i1,i2 in zip(sep_i, sep_i[1:])]
Норм?
эээ бля ежи , удоли картынку ежи
А разве двойные for это не пиздец? Прастите уважаемый если я вам неправильное говорю.
Чому нельзя через сплит тупа рыльна разбить это в список. Нэпанимаю
>двойные for это не пиздец?
Не вижу ничего в этом плохого.
>Чому нельзя через сплит
Так очевидно же почему.
Ты спец по жабаскрипту чтоле? Свой портрет зачем прицепил к сообщению? Это анонимный форум.
Смотря, что ты делаешь.
Просто двойные фор это тупо O(n) операций, если раз пройти.
Ну и надо понимать, что сплит это не какая-то магическая штука, это просто встроенная функция, которая так же ровно проходит по всей строке и выполняется не мгновенно так же
Хотя, конечно, сам сплит встроенный может быть написан на С, поэтому будет побыстрее
тише змея
Если уж взял регулярки используй их до конца -- сделай сперва "(#foo|#bar)" и по этому уже один раз re.finditer. И сортировка не понадобится.
С начала СВО наверное. Сами они заблокировали ру айпи
В принципе, можно и так закинуть. Думаю, не распидорасит.
import re
line = "some text #foo test text #bar another text#error text #foo one more text"
tag_list = ('#foo', '#bar')
tags = '|'.join(tag_list)
res = re.findall(f'((?:{tags}).+?)(?={tags}|$)', line)
print(res)
Мой код выполняется за 650 НАНОСЕКУНД И ТАМ 5 СТРОЧЕК
ТВОЙ КОД ВЫПОЛНЯЕТСЯ ЗА 7 МИЛИСЕКУНД, ТВОИ ФОРЫ НА ПОРЯДКИ МЕДЛЕННЕЕ И ТЫ СИНЬОР КНОПКОДАВ ЕБАНЫЙ
Я ТРЕБУЮ РАССМОТРЕТЬ МОЮ ВАКАНСИЮ
МОГУ РЕФАКТОРИТЬ ВАШИ ПОДЕЛИЯ
мы вам перезвоним
извините, вы нам не подходите по софт скилам, вы какой-то душный
Это лукахед, чтобы останавливаться на следующем найденном теге, не захватывая его.
Я так понял ему надо было еще чтобы #error не считалось за таг, только конкретно #foo #bar
Ебать вы сеньоры конечно да. Вы не можете алгоритм придумать который хотя бы за 900 наносекунд это сделает?
Я ТРЕБУЮ РАССМОТРЕТЬ МОЮ ВАКАНСИЮ, МОЙ КОД НА ПОРЯДКИ БЫСТРЕЕ ВАШЕГО СЕНЬОРСКОГО
Настоящий сеньор считает строчки, а не скорость. Меньше строчек - меньше напрягаться и набивать код. Это мудрость сеньора.
Козлодразина, просто признай что мой подход быстрее, нахуй ты задействуешь мапы всякие, двойной фор блять написал, ахуеть просто. У сука. Что ты не можешь придумать как мой вариант модифицировать для своих целей? У сука сеньоры ебаные, это из за вас у меня сбэрмаркет лагает
Неуч-завистник, ты?
Я просто в ахуе, вам не впадлу делать то, что решается гуглением алгоритма в вики и пятью строчками стандартной либы? Нахуй вы смложность алгоритма усложняете?
Уважаемый сеньор помидор. Там у него в варианте двойной фор. O(n) * O(n)
Уважаемый сеньор, это сколько будет? Загадка от футбольного мячика
Продолжай в том же духе урод, мне легче на собесах будет
Теперь вопрос, если мне становится плохо от такой "оптимизации", типа я уже мидл и могу собеситься в хухол?
Это решение в стиле си. Они там так и дрочатся по сто строчек на простейшую задачу сложнее сложения чисел.
>Надо эту строку распилить на части по тэгам, чтобы получилось: ["#foo test text", "#bar another text#error text", "#foo one more text"]
Как же меня калят такие челы как ты, я выполнил задание, он получает то что хотел
Ебало тупого говна которому поручили добавить туда #pork
Ну так в интерпретируемом языке естьвозможность стандартной либой такие конструкции не вызывать в коде, а оставлять под капотом сишной либы пайтона.
Тогда сеньор пусть поручает мидлам написать мини либу где сеньору нужно будет вызывать только метод на одну строку. Или ваще тупа рэально чилить на кресле и поручать все мидлам
Ебать, как же кайфово видеть таких сеньоров как ты. n у тебя количество выполняемых операций, дядя ало, у тебя двойной фор
Сложность возрастает на O(n*n), ало пошел нахуй. Хартьфу наносек ебаный
Для тупых поясняю -- один FOR даёт один N.
Если в программе один FOR сложность O(N).
Если два FOR сложность O(N^2).
Всё, это вся наука о сложности алгоритмов.
Иногда умножается еще на LOG(N) но на практике всем похуй.
>тся еще на
Ты такой далбаеб, (без негатива)
Я тебе написапл тоже самое что ты мне сейчас пишешь, хотя ты сказал что это неправильно. Молодец, переобулся
Ты мне отвечал что неправильно для вложенного фор?
>>583329 (Del)
Фу ебать вы уроды, вы ебаные сеньоры не знаете как у вас проги выполняются, мне противно вас читать от вас воняет, скуфы
Еще один, ну ка малек, опровергни ка учебники по CS
>Еблуша, ты если одно яблоко ц
Какое яблоко дебил? Причем тут яблоко? Тебе сеньору стали платить много ты подсел на наркоту и отупел, ты гонишь
ПРИЧЕМ ТУТ ЯБЛОКИ
>Еблуша, ты если одно яблоко целиком съел,
Дебил ебаный сеньор скуфовый, ортупевший от наркоты - это ты? Помню тебя по твоим шизоидным код ревью, тебя еще поперли потом за обсеры.
Ты если по яблоку пробежишься в 4 плоскостях Скока будет операций?
Если ты по двум половинкам яблока по очереди по 4 плоскостям пробежишься скока операций будет?
Сеньор скуфовый
Ты че не можешь перемножить эти операторы? Скуфовый сеньор который выпустил порашное обновление сбермаркета это ты?
Дебил ебаный сеньор скуфовый, ортупевший от наркоты - это ты? Помню тебя по твоим шизоидным код ревью, тебя еще поперли за то что обновление сбэрмаркета вылетало каждые 10 наносекунд. Ты потом еще пытался устроиться курьером в сбэрмаркет после этого, но тебя не брали, как поживаешь сеньор скуфовый?
Два и больше фор нужны для прохода по вложенным иттерациям.
хоть десять фор у тебя будет это всё ещё O(n).
Большое О будет увеличиваться, если твой алгоритм что-то ищет и будет постоянно пробегаться по итерируему объекту и тут не важно, один у тебя for, два, или десять
Капец ты скуфовый сеньор конечно да, бросай шабить, а то в версталы пойдешь? я тебе про вложенный список говорю конч
Конкретно по твоему вопросу
Я тебе пишу свой ответ, а ты пишешь свой сразу же, пусть все знают что ты за сеньор скуфовый
lim(n^2 * m^2) - C где С - количество вызываемых операторов но им можно пренебречь
Давай скуфовый напиши свой ответ, а я пока с эйчаркой чай попью
В первом случае O(N) во втором O(N^2).
Это асмиптотическая нотация, в ней у N нет и не может быть какого-то конкретного значения.
>прохода по вложенным иттерациям.
>хоть десять фор у тебя будет это всё ещё O(n).
Тогда почему у него двойной цикл на порядки медленнее больше чем в тысячу раз, уважаемый сеньор (пока не скуфовый объясните)?
Для конкретных значений не имеет смысла считать асимптотическую сложность. Сложность это характеристика алгоритма в целом.
>>583422 (Del)
Ебать ты урод скуфовый, ты два вопроса задал, а я тебе ответил как на один. Урод ТЗ нормальные пиши, хуй пойму что с шрифтом
a)n m По сложности O(n)
b) n m По сложности O(n^2)
Хуятина а ты спрашивал про кол во принтов или про колво операций интерпретатора, скуф сеньоровский? Ты же проебал мозги из за герыча, сформулируй вопрос
>im(n^2 * m^
>>583481
Скуфовый, ТЗ намана оформляй чтоб я сразу видел что ты вопросы ограничиваешь буковками
Ты сам то посчитай принты еблан. И там и там одинаковое число. Пиздец ты зайчик, ты свой ответ напиши скуфовый
В боксе по переписке я тебя на изи вынесу, так что будь добр вести себя тихо
Пишут двойные циклы, 50 строчек кода, модули какие то подключают на задачу которая решается стандартной либой в 5 строчек. Кто с курсов?
Ты когда свои ответы напишешь? Чего ты трясешься, мы тебя 1С обучим, будешь обновления ставить
Какая сложность у двойного цикла? Скуфовый, почему его двойной цикл в тысячи раз медленнее чем надо? Он на маленькую строчку тратит 200 мс, скуфовый, скока будет тратить на большую?
> чем надо
Кому надо-то, шиз?
Сходи лучше в C++ тред со своими 200мс, посмотрим как тебя там обоссут.
>>583518 (Del)
> х максимальное число повторений
Тут у тебя явно какой-то косяк -- получается что если строка 2 гигабайта, но тегов там ноль, то программа выполняется мгновенно.
>ое число повторений одного тега в строке). Чел же утверждает, что сложность О(n*2), хотя что такое n в данном случае от
Мдя, а я теперь понял почемку каждое новое обновление приложух такая пораша, почему виндовс опасно обновлять, вон оно что. Ну ясно все с тобой скуфовый
Скуфовый, мои 5 строчек выполняются за 650 наносекунд, знаешь что такое наносекунды?
Жаль только, что задачу не решают. Можно и в 0 наносекунд так же сделать, ты проебал на целых 650.
Есть два стула -- если строка короткая то никого не колышет сколько это выполняется. Если строка гигантская, то выигрывает решение которое проходит по строке ровно один раз.
Твои 5 строчек проходят по строке 2 раза. Увеличь строку до 8 гигабайт и замерь еще раз.
Ты че еблан? Он просил получить именно эти значения
> чтобы получилось: ["#foo test text", "#bar another text#error text", "#foo one more text"]
Как дела?
Он просил, чтобы вырезало куски после конкретных элементов из списка и даже добавил подъебочный элемент #error для тебя.
Твой код вообще нихуя не делает, какие-то сплиты бессмысленные.
Чел, я проверил твой высер на практике, его код на длинной строчке медленнее моего в 10 раз. Дальше разрыв будет только увеличиваться и я тебе могу даже нарисовать график.
После того как твой высер разошелся с практикой - твое мнение для меня ничего не стоит скуфовый. Посмеешь отказать мне в приеме на работу, я докажу в суде что ты обосрался и будешь платить мне x3 от ставки
Ты его пост прочти клуша ебаная. Он просил получить список такой, он получил ровно тот же список, он получил что хотел, то что там скуфовый тз не можети оформить меня не ебет.
То что ты не знаешь стандартные алгоритмы - тебе минус
Ну сделай сразу
result = ["#foo test text", "#bar another text#error text", "#foo one more text"]
Хули ты там возишься?
Господа скуфовые сеньоры простите за оскорбления, просто вы высираете то, что расходится с практикой и со всеми учебниками. Я видел таких гнилух, они потом извинятся любят. Сидит передо мной тело: Что такое АДРЕС ip
ну то то, так то задается, то делает
Тело:НИПРАВИЛЬНА IP ЭТО ПРОТОКОЛ
я: хУЯТИНА ТЫ МЕНЯ ПРО АДРЕСС СПРАШИВАЛ А НЕ ПРО САМ IP КОЗЛОДРАЗИНА
После этого он совсем сдулся и начали про деньги говорить. У сука слить меня хотел
Ты проебал почти в десять раз, смирись.
> python3 -m timeit 'result = ["#foo test text", "#bar another text#error text", "#foo one more text"]'
5000000 loops, best of 5: 69.9 nsec per loop
Сложность олгоритма 100^-1
Ромочка так-то пока лучший разработчик в треде. Не обижай его.
Так я чичас научусь калькулЯтор писать и тоби пэзда
Взял 3х-дневную пробную версию, не знаю стоит ли оплачивать? Не могу подключить дропбокс и Яндекс-диск. Не пойму, они будут доступны в полной версии? Или для России доступ к облакам у них закрыт?
Если не получится работать через облака, то отдельный питон на айпеде не особо-то и нужен.
Дома с компа питонировать и сохранять в дропбокс, в дороге — открывать этот же проект с айпада-мини и продолжать питонировать-актировать в поезде.
Супь, питоняши. Подскажите, а есть норм способ провалидировать путь?
Мне нужно точно узнать, что содержимое переменной path может быть валидным путём до директории. При чём этой директории ещё нет, она будет создана, при чём на удалённом хосте.
Большинство того, что нашёл ложиткладёт хуй на спецсимволы, а, вроде специальный модуль "pathvalidate" вообще троллит:
>>> pathvalidate.is_valid_filepath('/tmp/123')
False
>>> pathvalidate.is_valid_filepath('tmp/123')
True
У меня масса их!
И как оно?
Kivy?
Сам на чём сидишь? В смысле у меня Linux, смогу я обойтись без мака? Да, вот такой я странный, с iPhone'ом и GNU/Linux-desktop'ом.
Гуй рисуется штатными системными либами?
Есть вообще что-то типа кьют-креатора?
Нужна какая-то особая платная лицензия? Или что там?
Есть какой-то эмулятор телефона (когда пробовал писать под Sailfish, он прям из Qt-Creator'а виртуалку с мобильной ОС запускал)?
Можно ставить ПО на свой телефон? А кому-то из коллег, например, можно мою прогу мимо аппстора, чтобы пощупали?
Если это платно, то как-то отбить бабло возможно?
Книги не нужны.
Пока их хотя бы на англейском напечатают они уже устаревают, а там ещё перевод и печать на Русском, прочее, два новых релиза выйдет, пока книга просто на у тебя в руках окажется.
Читай официальные и встроенные маны и пробуй-пробуй-пробуй-пробуй-пробуй...
Впрочем, читнуть какого-нибудь Лутца, полного водой просто чтобы вкатиться может и полезно, но только если это вот прям первый язык и ты вообще не знаешь за кодинг.
Картинка высосвана из пальца. Ты хотя бы посмотри на хаскелиста-смузихлёба. Ты вообще знаешь хоть один продукт, написанный на хаскеле? Вот и я не знаю, зато хипстеров насмотрелся. Самый эталонный из них писало на R, кстати.
Я всегда дуамл, что R это просто такой продвинутый калькулятор для всяких рассчётов, но всё это можно делать и на питоне, и тут просто учебных курсов по нему куда больше и сам он легко понятен, что любого препода или учёного быстро можно подтянуть
R это специализированный инструмент прежде всего для статистики. В этом ему равных нету. Все нужные методы уже в стандартной библиотеке, с отличной документацией.
>>583280
>>583292
>"(#foo|#bar)"
Дело в том, что тэгов может быть много, например 200. И я подумал что такая регулярка (n|n[1]|n...|n[200]) будет пиздец какой неуклюжестью и что так не делают и вообще это будет тромозить.
Виноват, что не все условия сразу выдал.
Но вот теперь, учитывая новую информацию, tags = '|'.join(tag_list)
всё рано лучше чем мое говно?
Алсоу, в моей "реализации" в цикл можно добавить флаг, который экономит немного байт и завершит проверку раньше чем все 200 тэгов будут проверены, если искомые тэги не в конце списка.
>>583377
Чел, я только изначальный пост вкинул и только сейчас вернулся, ты с другими анонами разговаривал. Твой код рапилит строку ещё и в месте "#error". #error не является тэгом. Неужели ты столько понаписал и этого не заметил?
Ещё один монмет, хоть этого и не было в изначальном условии, я вот лично считаю, что добавлять символ-флаг "/" это как-то по индийски. А что если в тексте где тэги будет такой символ - ошибка же случится.
В любом случае твой код отделяет #error - это ошибка.
>>583358
В общем мне к задаче следовало добавить два условия 1)тэгов может быть супер дохуя и они могут быть разной длины, 2) в строке могут быть любые символы в т.ч. # (но это то было и так понятно)
Да, для статистики, точно. Потому что помню что как то давно очень я трогал его для каких то рассчётов, теперь точно вспомнил, как раз много статистики надо было считать
Найти:
А) Количество студентов, рост которых 170 – 175 см;
Б) Количество мужчин – отличников;
В) Фамилии студентов, средний балл которых ниже 3.
Сап, аноны, строжайше срочно надо написать код к этой задаче, помогите пожалуйста, котелок уже не варит капец
Это либо из словоря, либо из БД, но раз просто задание, то словарь.
Просто проходишь по нему циклом и вытаскиваешь все нужные данные, раскладывая их в списки.
А с БД тут чисто SQL запросы, которые к питону мало отношения имеют
2 курс
>>583864
у одногруппника похожее задание, я немного переделал только начало, у меня выглядит примерно так, просто свои значения подставил:
class Student:
def __init__(self, surname, height, gender, progress):
self.surname = surname
self.height = height
self.gender = gender
self.progress = progress
Student = []
for i in range(10):
surname = input("Введите фамилию студента: ")
height = int(input("Введите возраст студента: "))
gender = input("Введите пол студента (M/F): ")
progress = int(input("Введите среднюю оценку студента:"))
tourists.append(Student(surname, height, gender, progress))
в последней строчке вместо tourists будет students
и в 7 строчке
Students = []
самофикс
дальше хз как
Можно ещё вот так
str([v[0] for v in stud.items() if v[1]['успеваемость'] < 3])[1:-1] чтобы квадратные скобки от фамилий убрать при выводе.
Бля лучше ', '.join([]) использовать, сам туплю уже.
Тут ты три раза проходишь список. Плохой вариант, когда всё можно, а значит нужно сделать за один проход
Можно, но я почитал тред и преисполнился мудрости анона, которая заключается в том, что надо стремиться к уменьшению строк, тогда все будут думать что ты умен. Таков путь синьора-пиздобола.
В задаче было три вопроса в моей реализации три строки, если убрать переносы и не считать сурс словаря.
Идеально.
Ну по идеи твой код не чекают в ручную в первую очередь, а прогоняют через тесты, что бы выдавал всегда правильный вариант и смотрят на время выполнения. Дают ТЗ, а под него пилят проверки, через которые потом и прогоняют.
А дальше уже в ручную могут посмотреть, если пройдёт первые проверки. Ну а могут просто пробежаться глазком быстро и одобрить.
>>583890
Да я не на программиста учусь потому что, но программирование у нас тоже задействовано, питон первый семестр.
Есть конечно у меня нифиговые оправдания на счет того, почему я целый семестр ебланил и нихуя почти не продвинулся в знаниях, но моя вина тоже не маленькая, пора бы уже и браться за голову.
>>583881
Анончик, от души, реально спасибо тебе.
Я конечно не такой вариант решения рассматривал, но думаю поскольку не было четких условий и рамок, то должно проканать.
Еще чет запутало сначала в условии "представить в виде записи".
Но спасибо огромное, удачи и позитива, здоровья тебе и твоим близким
Вообще конечно фамилию надо было сделать тоже элементом словаря 'фамилия':'Иванов', на случай если будут студенты с одинаковыми фамилиями, но такого условия в задании не было, да и это всё-таки учебная хуйня.
Ну тогда как твой вариант, но итером ищи просто #\S+ и сверяй, есть ли оно в тегах, а не долби все теги.
По идее регулярка из 200 вариантов компилируется в конечный автомат и должна работать вполне себе шустро.
Ммм, вроде неплохо. И строк меньше стало. Правда после тэга не всегда есть пробел или вообще какой-то разделитель. То что я теперь каждый раз срез строки беру для сравнения это питонически?
Мудрые люди мне говорили что питон хоть и тормознутый, но если там брать срезы строк то он будет в сто раз более тормознутым.
Да, срезы строк зло. Ибо при каждом вывозе он будет снова проходить по строке и делать весь срез заново.
по сути это как постоянно использовать for
Как этот момент в моем случае нивелировать? Может кто-то скажет что это "байтоебство". Но мне интересно для общего развития.
Ну они не так и нужны особо при создании проектов. А если очень надо, то сохранять срез как отдельный объект, а не как некоторые по началу любят везде вызывать чисто срезы примерно по этой логике - >>583892, типа так меньше строк и красивее выходит.
Либо кешировать результат, если нужны разные срезы одной и той же строки и к ней часто обращаются, что по сути тоже самое, что и создание отдельного объекта, только куда гибче и универсальные.
В startswith есть свой срез, но он ГОРАЗДОООО тормознутей чем обычный срез строки. На любых объемах и дистанциях он проигрывает простому срезу.
Ооо, спс. Полезный тред, надо тут сидеть и ума набираться.
хуясе
>Что такое АДРЕС ip
Это уровень вопросов, которые тебе на собеседованиях задают? Ты на кого, на "оператора ЭВМ" собеседовался?
Судя по тому что этот клоун тут понаписал, это наверное у него учитель по информатике спрашивал на уроке, а он обосрался и не смог ответить, после чего прибежал на двач щитпостить.
Вот обьявил:
def __init__(self, arg):
self.arg = arg
def set_arg(self, arg2):
self.arg = arg2
Делаю экземпляру класса .set_arg(N), но он не меняется.
>дропбокс и Яндекс-диск
IDE не умеющее в GIT и использующее такие костыли нинужно.
Как собственно и разработчик, не умеющий в VCS вообще.
Кажется вопрос снимается. Я так и не смог добиться того, чтобы при создании файла/папки линукс обругал меня за недопустимые символы (кроме очевидного '/', но он имеет полное право быть в пути). Значит, единственное, как проверить валидность абсолютного пути это
> len(str)>0 and str[0]='/'
Еще длина имени файла ограничена (не весь путь а каждая отдельная часть) то ли 128 то ли 256 байт максимум
PurePath.is_absolute()
Ничего, кроме колхоза с перебиранием каждого символа и записываем количества совпадений в переменные, в голову не приходит. Наверное через множества можно как-то.
Если есть строка типа s="26333" то максимум повторов находится так: max(s, key=s.count). Дальше думай самостоятельно
СПАСИБО!
нихуя ты аниме протагонист
Pythonista и Kivy. Первая больше не поддерживается к сожалению, а был продукт просто уникальный для IOS разработки.
Мак запускаю на виртуальной машине. Линукс с bulldozer'ом Kivy тоже на вируталке. А так на винде сижу.
Сейчас чтобы на iOS запускать свои нативные приложухи нужна платная подписка разработчика.
Для Pythonista это не нужно, там все в песочнице работает. Можно даже свою независимую систему распространения приложений Pythonista и обновлений по сети запустить.
больше скажу, даже чувак который пишет KivyMD и сидит где-то в ЛНР до сих пор жив.
Успей освоить фреймворк богов!
через nunpy изи это делаетеся.
https://pastebin.com/SkHLX7XA
https://www.codewars.com/kata/517abf86da9663f1d2000003/train/python
Я, кажется, понял, в чём проблема: питон либо не видит различия между 'e' в начале The и 'e' после '-', либо выбирает первую попавшуюся 'e'. Как сделать так, чтобы он выбирал нужную букву?
index просто находит первый символ. что ты хочешь этим добиться, плюс он постоянно пробегается по строке, выполняя куча лишних действий. Если так решать, то просто используй флаг, который будет становится True и если он True, то следующая буква становится заглавной
Кстати, я сам эту задачу решал оказывается, и да, у меня через флаг. Хотя не помню, когда её решал
Но можно просто через сплит решать. И объедение через title. Так бы я сейчас решил
https://pypi.org/project/case-converter/
Понял, спасибо.
Там же стоит тег регулярки.
Это в одну строчку делается.
return re.sub('[-_](\w)', lambda m:m[1].upper(), text)
и тег алгоритмы.
и раннее задачи, обычно люди к этому моменту регулярки ещё просто не трогали ни разу.
Каждый раз, когда захожу в solutions на codewars, у меня начинается тильт от элегантности чужих решений. Как научиться так же? Читать документацию питона и пробовать внедрять разные функции?
Да мотай на ус и решай дальше. Дойди хотя бы до 3kyu сначала.
С опытом приходит. Я когда баловался всякими кодеварсами тоже иногда удивлялся с солюшенов. У меня пять строчек вполне четенько, а там какой-то дрочила заебашил однострочник совершенно дикий, но я бы до такого не догадался.
На практике оно ни к чему, конечно, чисто писькомерство.
Ни то, что ни к чему, а сложнее становится код обслуживать и баги искать в довесок.
Есть, конечно, операции, которые желательно сплушивать, но это опять же, не обязательно и с опытом приходит
Не, я в плане того, что это как коде гольф - чисто забава.
На практике никто так и не делает, ну разве долбоебы какие.
Просто уродский кейворд. Вот у жопаскрипщиков красивые стрелочки.
Ну довольно часто можно крутой пайплайник сделать. Он элегантный и эффективный, красота.
>нечитаемое говно в 1 строку
Ну так термин элегантности никак не коррелирует ни с читаемомтью, ни с производительностью. Элегантность кода есть его компактность помноженная на хитровыебанность. Красота ради красоты.
Вот ты когда-нибудь встречал описания хуя как "компактный"? Да никто его так не будет называть! Код как и хуй должен быть мощным, большим и внушать одним своим видос
Куда приезжать сосать?
>Как
Натренируй нейронку нормально, чтоб с первого раза распознавала, пидорас, обходящий капчу
синтаксис практически у любого языка учиться за несколько дней. это просто как выучить алфавит и некоторые правила грамматики и после ныть, что эти знания не даёт тебе читать англюсик сходу
https://ideone.com/9jvSyV
Не работает это говно тут и не охота врубать впн ради этого, хватит кидать сюда это.
По идеи просто один класс наследуется от другого и вместе с этим все методы
Нельзя наследовать. Только инкапсуляцич
И тут ты пишешь готовое IDE mobile, поддерживающее GIT.
кроме кривого забагованного маунта PyCharm на телефон/планшет
Через форич + иф обыкновенный?
Я уже начинаю думать о том чтобы сразу с# начать учить после питона, а иначе никак, такие дела, да.
Я тоже собираюсь учить C# после питона, к весне добью уже добью несколько проектов и только тогда начну искать подработку/работу и постепенно начну шарп учить.
Сейчас ничего даже не смотрю в вакансиях. Только отвлекает. Набил какую то базу навыков и начну искать, а там смотреть чего не хватает и куда лучше двигаться.
А что там в php учить после питона интересно. Понятно дело синтаксис отличается, сам язык быстрее намного в своих задачах. Но это думаю всё быстро подтягивается, за недельку. Но наверное, есть какие-нить фреймворки или библиотеки тоже, которые нужно освоить
В джанговской админ-панели по адресу /admin/ мы видим модели которые были добавлены в админку при помощи декоратора django.contrib.admin.register
По дефолту мы увидим как на пикриле - название django application (конкретно здесь их 2: AUTHENTICATION AND AUTHORIZATION и MAIN) и под ним - сами модели.
Можно ли как-то сделать другую разбивку моделей - не по application а по собственным подгруппам? Или добавить подгруппы внутри каждой application?
Просто думаю подучить его тоже всё же, учитывая, что я раньше его изучал и со многим так-то знаком уже, просто вспомнить надо и дальше углубиться.
Думаю за месяцок смогу подтянуть до приемлемого для джуна уровня, пусть будет и такой навык
>Миксин можно но хуйня ради одного вызова
Для этого они и нужны
>А чё за инъекция
В init передаешь отдельный инстанс другого служебного класса, на него будут возлагаться твои утилитарные функции
За месяцок можно и до сеньора поднять.
>Мак запускаю на виртуальной машине.
Мде. Не айс.
>Линукс с bulldozer'ом Kivy тоже на вируталке.
Зойчем?
Мне тут давали рабочий ноут с дрисняткой, я её как следует пощупал и нашёл WSL2 вполне рабочим решением (если тебе не нужен гуй и всякие тонкие вещи типа Docker, Kernel Params, etc), vs-code вообще запускал всё, что мне надо прямо в WSL.
Это не делает венды удобными, они по-прежнему ужасны, но именно виртуалка с линуксом обычно больше не нужна.
>Сейчас чтобы на iOS запускать свои нативные приложухи нужна платная подписка разработчика.
Это та, которая штуку баксов в год?
Ну, значит, найму фронтендера на фрилансе и пусть он мне вебгуй сделает, хули. Слишком много возни для пэтпрожектов. Я честно говоря вообще удивлён тому, что у них столько приложух в магазине при условии, что любой автор должен даже для пощупать пробиться через пэйволл.
C:\dir1\dir2\path1\path0
D:\dir2\
C:\dir1\dir2\
C:\folder7\path10\dir2
C:\folder7
C:\dir0\dir\
И так далее до бесконечности
Как из всех этих путей выбрать уникальные, и удалить те пути, которые в них входят. Например C:\dir1\dir2\path1\path0 надо оставить, а C:\dir1\dir2\ удалить потому что он часть того пути что длиннее.
Нужен такой профессиональный алгоритм, без нагромождений циклов, чтобы сразу все поняли что писал синьор. Я знаю ИТТ клуб элитных программистов, для вас это как в носу поковыряться.
Ну и пусть себе обещают. Пока это не будет гуглиться хорошо, я даже смотреть не будут.
По сравнению с остальной дрысней, по kivy хоть что-то можно нагуглить. Даже есть сообщество ВК
рекурсией, не?
Ну если синьорский, то это надо кафку применять. Сможешь поставить?
да в общем-то известный в узких кругах проект
но его пилят какие-то пердоли, поэтому движется всё медленно
Начал уже по джанго заниматься, наверное стоит и гит пройти перед этим.
Префиксное дерево
Главное, что купил. Смотреть необязательно.
я уже разобрался, спасибо
Вывод данных, если они имеются, будет в django-шаблоне.
как по мне, чересчур будет, если ты будешь подгружать данные и из бд и ещё откуда-то
Склоняюсь к тому, что ты прав. Спасибо.
Хранить где-то в вебе разве, чтобы не ебаться с фс.
>import wx
>import wx.adv
>class TaskBarIcon(wx.adv.TaskBarIcon):
> def __init__(self,frame):
> wx.adv.TaskBarIcon.__init__(self)
> self.myapp_frame = frame
> self.set_icon(TRAY_ICON)
> self.Bind(wx.adv.EVT_TASKBAR_LEFT_DOWN, self.on_left_down)
tab = dict(name='Abu', board='sosach')
{% for item in tab %}
{{ item.name }}
{% endfor %}
Соответственно выдает value.
Как реализовать тему с item.get(key), чтобы в шаблонизаторе было поле 'name'?
Как по мне отсортировать сперва все пути по длине и добавлять сперва самые длинные.
>IDE mobile
Извращенцы.
Беглый поиск показал чувака, практикующего такие извращения:
https://www.iphones.ru/iNotes/user-posts/kak-ya-stal-kodit-pryamo-s-ipad-07-06-2019
Он использует IDE Pythonista 3:
https://apps.apple.com/ru/app/pythonista-3/id1085978097?ls=1
Которое умеет в GIT:
https://github.com/mmurdoch/githubista
За proof-of-concept сойдёт.
Добавим сюда:
https://github.com/features/codespaces
В принципе, всё реально, но нахуй так жить?
GIT нужно знать.
Не весь-весь-весь.
Но обязательно с основными ключами:
init
push
pull
add
commit
branch
clone
config
mv
rm
tag
reset
clean
merge
Строго желательно:
diff
switch
rebase
fetch
patch
apply
Остальное я почти не встречал. В целом часть вещей за тебя сделает GitLab или smerge.
Не понимаю только, зачем курс, когда есть это:
https://git-scm.com/book/ru/v2
https://learngitbranching.js.org/?locale=ru_RU
GIT нужно знать.
Не весь-весь-весь.
Но обязательно с основными ключами:
init
push
pull
add
commit
branch
clone
config
mv
rm
tag
reset
clean
merge
Строго желательно:
diff
switch
rebase
fetch
patch
apply
Остальное я почти не встречал. В целом часть вещей за тебя сделает GitLab или smerge.
Не понимаю только, зачем курс, когда есть это:
https://git-scm.com/book/ru/v2
https://learngitbranching.js.org/?locale=ru_RU
>Где хранить необязательные данные, кроме файлов?
От кейсов.
Что это за данные?
Для кого они необязательные?
Как часто к ним обращаются?
О каких объёмах речь?
Может, им самое место в in-memory key-value database.
Он был дешёвый я был не уверен тогда, где брать так, что бы было меньше воды и по делу всё.
Это же обязательный мастхэв алгоритм, который должен быть у каждого мамкиного проггера, для программ, которые так или иначе делают массовое копирование\перемещение файлов.
Без него ваше копирование будет по сто раз бесполезно долбиться в файловую систему проверяя одни и те же пути.
54/4
- 13.5
54%4
-2
Во всех статьях, что я читал пишут что он выводит остаток от числа. в операциях %2 ==0 его применяют для проверки четности числа. Как он работает в других случаях ?
Заранее спасибо за ответ
Остаток от деления.
Что ты там за статьи такие читал, что элементарную хуйню, которая в однострочное предложение укладывается понять не смог. Или ты совсем тупой?
Не за что.
Есть у тебя мягкие игрушки? Возьми например 2 мягкие игрушки, и раздели между ними например 3 яблока. Каждой достанется по одному, и одно ещё будет лишним. Попробуешь разделить 5 яблок - у каждой игрушки будет по 2 яблока и одно останется лишним. А теперь в виде кода:
3 % 2 == 1
5 % 2 == 1
Это буквально остаток. От деления.
Ничего, видимо, вы ещё не проходили, это программа примерно второго класса школы.
https://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BA%D0%BE%D0%BC
Не благодари.
Это просто название переменной, оно может быть любым. В данном случае это переменная в генераторе списка, она перебирает значения в цикле for
Что, домашку препод не принял или ты самостоятельно решил знания поддянуть?
Я в школе остаток от деления не проходил, тоже в начале не мог врубиться, но все таки разобрался по ходу дела, хех.
Что сразу обзываться сразу то. У меня гуманитарный склад ума, а в школе и колледже закрыв глаза 3 по математике поставили.
Мой вопрос собственно 54:4 = 13.5. Почему после операции с % в python выводится 2, а не 0.5. 0.5 - остаток от деления числа 54 на 4. Что я упустил ?
Это не я обзывался. Надо бы ещё сказать, что это остаток от деления НАЦЕЛО.
Итак, ещё раз. Почему 54 % 4 == 2?
Если взять 54 яблока, и разделить их между 4 мягкими игрушками (попробуй), то у каждой игрушки будет 13 ЦЕЛЫХ яблок. И останется ещё 2 яблока, которые ты НАЦЕЛО не сможешь поделить между 4 игрушками. Теперь понятнее?
Этого не слушай, он не шарит
Ты угораешь что ли?
Я не виноват, что вы хуёво объясняете.
Запихнули в вуз на специальность "Информационные системы и технологии" решил, что хоть что-то знать должен.
Ничего, тимлидом будешь
И вместо того, чтобы читать книги, слушать на лекциях или хотя бы в википедии почитать, ты спрашиваешь в унылом треде на дваче? Это сча все вкатуны такие? Погромирование мне нахуй не сдалось, но родители запихнули ради сытой пенсии?
Он же написал что прочитал много статей но так и не понял что как работает ПРОЦЕНТИК.
Но ведь пришёл на двач, спросил и получил ответ на вопрос. Корявый алгоритм вышел, но сработал
Спасибо, за разъяснения. Буду стараться понимать дальше потихоньку.
Ты кому звонишь?
И Что ты хочешь увидеть?
While check_cum():
move_in()
move_out()
amount += 1
check_cum(amount)
Типа такого?
Ты о чем?
Я вообще воннаби айти, но мне лень. Сижу на шее у мамки.
Опсчим, есть некая последовательность действий, в результате которой я получаю, что некоей сущности либо 1 единица, либо 2.
И я хотел бы, чтобы при её упоминании подставлялось соответствующее окончание. Вроде, всё просто:
> print(f"ху{'й' if count = 1 else 'и'}")
И это работает. НО!
У меня в начале описан огромный dict на 20+ элементов, при чём Value там представляют собой многострочные описания, итого этот dict занимает больше 100 строк и пихать его инициацию в середину кода - не лучшая идея.
Естественно, в этих вэльюсах тех хуёв в достатке (там через строку должно быть {'й' if count = 1 else 'и'}/{'я' if count = 1 else 'ёв'}/етц).
Подскажите, плиз, можно как-то... ну я ХЗ. Например, описать переменную в одном месте, а инициализировать её позже, когда будет известно, в какой форме оно должно быть? Или ещё что-то такое...
Нет. Строка это неизменяемый тип данных. Делай функцию которая изменяет строки в словаре или инициализируй словарь перед использованием.
Динамическая строка или ещё что-то такое? Не? Никак?..
Пока делаю в начале функцию, которая изменит глобальную переменную, чтобы вызвать функцию опосля... Но это всё-равно некрасиво ужасно.
Хочу ближайший годик как минимум потратить на душение питона чтобы потом рассматривать возможность вката. Пока что могу на нём писать всякое говно для бытовых нужд вроде будильников, преобразователей текста в звук, редакторов изображений или телеграмм ботов.
Боты пару раз делал на заказ через телебота, но получалось супер через жопу и медленно, неделя работы не окупала пару тройку тысяч награды. Ну короче примерно в ту же сторону думаю развиваться чтобы корку хлеба было на что купить в крайнем случае.
Всякие докеры хуёкеры слышал надо знать, так что подскажите просто материал по которому надо линейно двигаться не думая бля какую книгу из тысячи других выбрать.
Пиндосский знаю но на нём немного менее приятно читать чем на срусском. Может мне достаточно на первое время наши лекции заботать все?
https://www.youtube.com/playlist?list=PLRDzFCPr95fK7tr47883DFUbm4GeOjjc0
20 лет кста, в сосаити совершенно не выживаю, а программисты вообще чсв пидоры на уровне художников поэтому к ним лезть боюсь
Но пидор тут только ты, пидор!
А чего ты ожидал? Завалился с просьбой, но обзываешься с порога. Даже по ебалу тебе дать захотелось.
экземпляр, сразу мимо иди
ну да вполне удобная функция, ещё и скорости у них у всех разные из-за разных методов реализации
Это не функция это тип данных уровня списка или словаря или целого числа например. Вот я и спрашиваю нахуя он нужен, слишком много чести если он только дубли убирать используется.
Но ведь питухон не про О(1). Это скриптовый язык макросов для школьников с задержкой в развитии. По этой же причине непонятно нахуя они убрали арифметическое округление из встроенной функции round, заменив его банковским, для выебонов? Ведь по логике и философии того же питухона там должно было быть именно обычное человекопонятное округление, а к четному могли бы засунуть в модули.
Думай как хочешь.
Ох уж эти максималистские нешкольники.
Научиться делать говнопрограммку простую по гайдику просто, но чуть шаг в стороне от шаблона и тебе пизда, плюс не будешь понимать где вообще говнокодишь.
Несмотря на заявления нешколотронов, что питон это не про скорость, но это не так. При нормальном написании кода в таких программах отставание от других языков не будет критичным, а при говнокоде в сто раз медленнее и больше просто легко.
Но многие молодые вкатуны тут же пытаются писать какие-то программки, хотя для начинающего куда эффективнее просто задачки решать. А если хочешь написать программку, то выбери какую-нить не шаблонную тему. И по мере изучения языка можешь её дорабатывать.
Спасибо большое за развёрнутый вежливый ответ.
Не знаю можно ли сказать что я прям совсем молодой вкатун, в школе ведь 3 года паскаля, два года джавы было, потом в унике полгода питона и год алгоритмов на плюсах, хоть и на отвяжись. Я имею ввиду что всяких задачек по разложению числа на простые делители я уже наелся на всю жизнь вперёд.
У меня как раз проблема с тем чтобы просто следовать по гайдику. Например сейчас разбирался с этой штукой https://cloud.yandex.ru/docs/speechkit/quickstart
и пять часов потратил в муках из-за того что не тот айди вставлял в запрос. Сейчас мучаюсь с тем как реализовать это на питоне. Это я для примера показал, не в плане что прошу разобраться. И пишу я всё время говнокодом как ты сказал, у меня боты на тг лагают дико.
Есть идея реализовывать других самых разных ботов с самыми разными функциями вроде онлайн оплаты/парсера с сайтов и т.п, ты про такие задачки говоришь?
>спич гавнина от хуяндекса
есть жи бесплатные модельки
https://github.com/snakers4/silero-models#text-to-speech
>бля какую книгу из тысячи других выбрать
Официальные доки. Остальное устарело ещё до выхода.
>материал по которому надо линейно двигаться
https://roadmap.sh/python
>Тимофей Хирьянов
Ну ты и калоед. Смотри Курячего https://www.youtube.com/@unx7784/playlists - cамые достойные лекции по питону. Не понимал никогда почему все в таком восторге от этого шизика-балабола.
Да что ты, обиделся братишка? Не надо, я без негатива писал, сам питон люблю, целую, сам синьор-тимлид фулстак питон, вот это всё. А вот то что они арифметическое округление убрали после второй версии это возмутительно и я объяснил аргументированно почему я так считаю.
Очевидный PIL. Я с ним в свое время как раз такую же хуйню написал. PIL брал скриншот в память, а пиксели numpy чекал, раскладывая изображение в массив точек. Можно очень быстрый алгоритм сделать таким образом, если сначала искать просто вхождение 1 пикселя и только потом сверять полный фрагмент. Я тогда совсем нубом был, но даже у меня за сотую долю секунды находило куда тыкать.
Он разве не с готовыми изображениями работает? и что про py screenshot скажешь?
>а пиксели numpy чекал
Через numpy.array?
>numpy.array
Да.
>py screenshot
Ничего не могу сказать. Я помню что разные библиотеки пробовал, но самое главное чтобы скриншот брался не пережатыми пикселями и легко сохранялся для дебага, ведь тебе надо ещё будет хранить искомые фрагменты в таком же формате, как берешь скрин.
Ох сейчас открыл этого своего старого бота и аж стыдно стало питон ещё второй версии, столько всего улучшить можно ускорить раза в два наверное.
>И ничего больше?
Ничего.
PIL, numpy, а кликал я через "mouse", так и называется модуль, не помню правда зачем именно через него, у него там под капотом обычные обращения к api виндусовской, наверное потому что нубом был и не шарил.
Спасибо. Я сам pyautogui использую для кликов.
По пикселю.
Брал два пикселя искомого фрагмента в углу и центру. Потом проходил по всему экрану, если пиксель совпадал проверялся второй пиксель в центре, если оба совпадали сверялось полное изображение.
Если ты это для 3д игры делаешь то сразу забудь. Там прямых совпадений не бывает, там надо делать сложную "формулу похожести", работать это будет медленней гораздо. Я такое делал чтобы капчи разгадывать, когда нейросетей ещё не было.
А что с индексами точек делал? А то вроде пиксель в матрицу перевел, а как его к кликеру привязать хз
Чел такие кликеры подходят только для статичных изображений, для UI всяких или карточных игр. Если у тебя игра с анимациями, светом, туманом и прочим говном которые незаметно меняют цвет пикселя на одну единицу - тебе только нейросетку тренить. Но сейчас это совсем просто стало, даже школьник разберется.
Да тут всё переделывать надо, простой подсказкой тебе не поможешь. Всё очень плохо, без негатива.
Хорошо.
Да ,нет, у меня пикчели цвет не меняют, но и не находятся в статичном расположении
Это аппартная проблема, программисты ее не решают.
Paзбей видимый диапазон на 50 частей и возьми из каждой по значению, очевидно же.
Хорошо. Я не против. Как?
dict на самом деле не один, их три с плюс-минус одинаковыми индексами, нумерация (тульпы, листы и т.п.) тут не рулит, за ней не уследишь (тем паче, что один из них заполняется прямо в коде, на основе оригинального конфига)...
Я бы и оригинал запостил, благо код отдали в опенсурс, но неохота слишком деанониться.
Имеем в виду: Пайтон это мягко говоря не основной мой ЯП (я вообще не кодер ни разу), я пишу вспомогательный скрипт, чья задача заполнить конфиг в удобном виде и особо никого не трогает, как именно это делается.
>отдали в опенсурс
Ты наверно имел в виду аутсорс? Впрочем, не важно.
>Как?
Ну что на это ответить, за тебя что-ли написать?
Всё зависит от общей логики происходящего, где, куда и когда надо это всё выводить. Может удобнее как в играх, делать флаги подстроки в тексте и заменять их на выводе. Может удобнее сделать конструктор строк в функцию и подставлять её в нужные места. Как этот конструктор должен выглядеть зависит от общей картины происходящего. Тебе про это уже писали пару постов выше, но это же не решило твою проблему.
Я бы делал как-то так.
Главный трюк тут в том, что строки можно сохранять со слотами для будущей подстановки
str1 = "Ху{} можно пихать в пизду"
а потом делать
str1.format("й")
и он подставит й на место {}
Как-то так анончик, я сегодня добрый, но дальше сам.
pic = PIL.ImageGrab.grab(bbox=(x0, y0, x1, y1))
bigar = numpy.asarray(pic)
ary, arx = bigar.shape[:2]
Ну это как замена подстроки, в тексте оставляют <флаг> который заменяется перед самым выводом.
Спасибо. Я сам просто нуб дикий и с библиотеками не особо разобрался.
Да, только используются не регекспы, а внутренние механизмы питона для форматированных строк.
Там учить нечего. В моем коде после этого места PIL больше не нужен. Только скриншоты берет в случае ошибки.
Забей на весь этот кодинг, попробуй autoit, я сам не пробовал, но там говорят весь функционал есть который ты пытаешься сделать поиск картинки, клики вот это всё. А язык макросовый как в AHK не нужно ни какие матрицы хуятрицы делать. Нажал и всё есть.
Не, я сам хотел кодить научиться.
>Ты наверно имел в виду аутсорс?
Нет. Что имел в виду, то и сказал. Опубликовали git с B2B-проектом под Apache2. Там вообще изначально опенсурс, но не очень удобный в работе и без поддержки. Теперь выложены и наши наработки - коннекторы, установщики, инструмент для нагрузочного тестирования и прочее. Вот, я для него конфигуратор ваяю.
>делать флаги подстроки в тексте и заменять их на выводе.
Хм-м. Это интересно.
>Тебе про это уже писали пару постов выше
Это тут, что ли? >>586228 Просто re это вроде как regular expression и я не совокупляю, как его применить сколь угодно лаконично. Вот `replace`... Может и зайдёт.И похуй, если он будет выводить строку не через 0,01с после предыдущего Enter, а через 0,1, никто этого всё-равно не увидит.
Правда, чтобы учесть фразу "размер хуя не важен" / "размеры хуёв не важны" нужно вызывать уже три реплейса и разные конструкции под замену... А если таких конструкций будет ещё больше... Мля.
>>586629
О! А это практически то, что я хотел. Хотя... для учёта других конструкций, (примерно "размер хуя не важен" / "размеры хуёв не важны) а их, увы, есть... применить в лоб будет непросто.
В общем, ушёл курить, но предварительно оставлю с функцией, как сейчас, а потом, может быть, перепишу грамотнее.
> % 10 == 1
"11 хуй"
Нет, я не придираюсь, я чисто поржать, у меня их может быть строго 1 или 2, там даже не int, а bool проверяется.
А вообще числительные в русском языке это небольшой пиздец.
А работка то хорошая? Норм платят? Как тебя туда взяли? Без негатива, но просто из того куска кода который ты показал совершенно очевидно, что ты кодишь от силы месяц и дело тут не в языке, потому что ошибки не связанные с синтаксисом.
Может тебя не прогером взяли, а кем то другим, тогда всё понятно будет.
>для учёта других конструкций
Применяй другие фнкции, а не й_or_и. Можешь более сложные конструкции в словарь положить, чтобы там и функция была, какая нужна, и дефолтные аргументы, например. Но тогда, возможно, стоит уже класс собирать, и инстансы этого класса в словарь класть.
>"11 хуй"
Зато 21 хуй, 31 хуй, 2101 хуй. Добавь проверку на 11 в й_or_и, там элементарная функция.
Скорее всего есть, но я постарался выбрать самое простое и понятное. Естественные языки это очень сложная тема, поэтому и библиотека (в том числе и её использование) скорее всего будет сложным.
Если есть необходимость работать с языком, то лучше библиотеку и осваивать. Городить самому велосипеды пустая трата времени.
Ладно, если пару слов, типа кун-тян.
Но если уже к сотни, то тут городить велосипеды не стоит точно.
https://pymorphy2.readthedocs.io/en/stable/index.html#
>Если есть необходимость работать с языком, то лучше библиотеку и осваивать.
Пусть осваивает, я против разве? Я только его решение поправил до более вменяемого.
> совершенно очевидно, что ты кодишь от силы месяц
> Может тебя не прогером взяли, а кем то другим, тогда всё понятно будет.
Бинго.
Код я пишу всю карьеру (уже лет 17), но никогда именно этим не зарабатывал. Я админ ну или сейчас правильнее называть девопс, это как админ, только мои пользователи пишут код: пишу CI, Ansible, Terraform и т.п. Мои основные языки сейчас это JSON, YAML и Bash, а Пайтон - для себя освоил и тут - пригодилось. До этого было всякое, больше всего - Delphi.
Как мои продукты устроены внутри знает (знало, когда писал внутреннюю автоматизацию) в среднем полтора человека, из которых это хоть немного ебёт (при условии, что прога работает, поддерживаема и не слишком тормозит) только меня и то не всегда.
Фактически, то, что я сейчас пишу - первый продукт в моей карьере, пользоваться которым буду не я с коллегами. Плюс этот код сможет прочитать посторонний.
Если есть конкретные советы, я всегда рад их выслушать и честно стараюсь понять и пропустить через себя. Собственно благодаря этому я немало продвинулся в работе.
>>586722
Спасибо. Буду думать. Скорее всего, позже, когда остальное будет работать правильно.
спасибо анончик, а то этот хуяндекс такое говно шо пиздец
>Мои основные языки сейчас это JSON
Но JSON это не язык, это формат файла, который представляет собой обыкновенный словарь.
сиранул
>>586846
>JSON это не язык
Как будто YAML, XML, HTML и прочие это прям языки-языки. JSON для Terraform это как YAML для Ansible или K8s. Это не бином ньютона, но с ним надо уметь обращаться.
Каждый день заходят. А о ком речь сейчас ведёшь, ссылку бы на пост давал.
Написан скрипт, который эту залупу формирует в dict
> def zalupa(dict):
> return eval(re.sub('"', '', dict)
Ну а пару ключ-значение получаем из фора.
Или это бред и так не делается?
Сиквел тулс, но, если плотненько с бд работаешь, установи отдельно какой-нибудь браузер, например dbeaver.
https://github.com/snakers4/silero-models#installation-and-basics
https://pastebin.com/392bzihL
Если не будешь индексировать и как-то сложно потом запросы строить на основании этих значений, то норм. Некоторые бд уже поддерживают работу json (sqlite, postgres).
При этом [\s] работает и видит перевод на новую строку, но [^\s] отказывается что либо видеть
Ладно, с помошью такого костыля прошёл тест, хотя в пейчаре всё правильно выдавал и старый вариант
>как-то сложно потом запросы строить
Ждал тебя, братец.
Смотри, у меня структура БД:
- таблица1 (поля: данные)
- таблица2 (поля: данные, OneToOne -> таблица1)
- таблица3 (поля: данные, FK -> таблица2)
Оцени сложность запроса и стоит ли пересмотреть структуру?
Чтобы добраться до таблицы3, основываясь на данных из Т1, мне приходится нагромождать такие ебанутые запросы, правда один раз:
t1 = Tab1.objects.filter(pk=self.object.pk).tab2.tab3_set.all()
Там, где одно значение, всё понятно city = t1.city и т.д.
Но там где йоба-дикт в полях - смотри пик.
https://github.com/madaan/minimal-text-diffusion
Почему у автора репо всё работает, а в колабе выдает такую хрень при попытке запуска run_train.sh?
```
Traceback (most recent call last):
File "src/train_infer/train.py", line 13, in <module>
from src.utils import dist_util, logger
ModuleNotFoundError: No module named 'src'
```
Как это исправить, не ковыряя код?
Ебучий питон, сука. Это я еще поломанные зависимости через костыль `cat requirements.txt | xargs -n 1 pip install` установил, и снова сука проблема какая-то.
Теперь выдает вот это.
```
ImportError: attempted relative import with no known parent package
```
Смотря, чего хочешь достичь. С одной стороны сейчас у тебя избыточность, что кагбе некрасиво.
С другой, возможно, у тебя по этим полям индексация идёт?
Вообще что и в каком формате ты используешь потом?
Ну и да, тут будет ролять даже СУБД, например, Postgres больше любит небольшие по ширине таблицы, а ClickHouse - наоборот предпочитает 100500 столбцов.
>>586879 (Del)
>плагин для саблайма
Могу сказать за плагин для VSCode... Но, если что, беру консоль или DBeaver и не парюсь.
Не совсем понимаю, что на пике происходит, можно пример без залуп?
Если важно знать сложность запроса - измерь тулзами джанги.
Можешь посмотреть, как в других известных проектах сделали хранение геолокаций. По задаче непонятно, что тебе хранить нужно. Да и стоит ли отказываться от джойнов ради того, чтобы убрать пару полей? В БД легче оперировать полями, а не json, если у джанго-орм нет вспомогательных средств (а вот глянь, кстати).
Еще есть пакет-geopy (берет инфу запросом в открытые источники), вдруг в будущем понадобится.
Только тормознутая, хотя новую версию на раст переписали. Датаклассы и аттрс быстрее.
Тема такая, что вебапп работает с бд на firestore. Через бота планируется взаимодействие юзеров с ней.
Есть пакеты модулей для работы с firebase на питоне, глянул, на первый взгляд подводных нет, но в гугле связка питона и firebase как-то особо популярна, а с хуя ли, удобно же, не?
Идеальный вариант. От самих разрабов питона туториал для вката. Самый свежий и актуальный.
Там официальные SDK под множество языков есть, включая питон.
Конечно быстрее. В них валидации нет. А пидантик это как раз про валидацию.
Для душнил, если что, я в курсе что в аттрс есть опциональная валидация.
Я не гуманитарий, мне похуй. Верификация обычно относится к некоторому решению, алгоритму или заключению, а валидация к данным, зачастую массовым, на потоке.
А вот я не могу врубиться даже вчитываясь в определения (коих, кстати тоже дохуя у каждого петуха свое определение).
Вот написано что верификация это соответствие четким требованиями - например данные должны быть целочисленными и от 1 до 10 - вот верификация. А валидация это соответствие чего либо общим требованиям, например метод принимает вот такой формат файла - он валиден. Но блядь это же можно и верификацией назвать ебанарот - данные должны быть вот такого формата вот такой кодировки - это же и верификация, четкие условия.
Это термины из нескольких других областей.
https://en.wikipedia.org/wiki/Verification_and_validation
> Verification: Are we building the product right?
> Validation: Are we building the right product?
Верификация проверяет соответствие ТЗ, проекту, внутренняя кухня. Валидация это оценка успешности проекта среди пользователей, внешняя.
Ещё какие-то юридические термины есть.
В программировании есть только:
https://en.wikipedia.org/wiki/Data_validation
https://en.wikipedia.org/wiki/Formal_verification
Вот ещё из криптографии:
https://www.connect2id.com/blog/validate-vs-verify-in-the-context-of-cryptography
> Rule 1: Use “validate” when referring to a process intended to establish the soundness or correctness of a construct e.g., “certificate validation”).
> Rule 2: Use “verify” when referring to a process intended to test or prove the truth or accuracy of a fact or value (e.g., “authenticate”).
Короче, пидантик это про валидацию. А всякие пруверы это верификация.
Зависит от контекста. Скорее всего, для тебя это означает это.
Верификация - подтверждение/доказательство того, что что-то (алгоритм, система, например) работает именно так, как должно/описано.
Валидация - подтверждение пришедших данных на корректность (например, пришел json, проверяешь, что поля правильных типов, как у тебя в схеме, или проверяешь ввод полей пользователем).
потому что
Сорян за читаемость первого пика, смотри пикрил.
С залупой происходит то же самое, если упрощённо.
Про geopy не слышал, я пользуюсь urllib, который собирает метаданные по ip.
Но смотри какая беда и почему я индексирую таблицу - у меня есть админка со своими формами и, соответственно, когда заходишь в list юзеров, фильтр каждый раз начинает пробегаться по всем айпишникам и собирать данные от них через ip-api.com/json, сам понимаешь, что в таком случае скорость загрузки страницы оставляет желать лучшего, поэтому на определённом этапе пришлось запилить отношение в бд с этими метаданными. (задавал вопрос тут повыше, кстати про хранение меты вне бд, мне посоветовали не есть говна)
> >>>def foo(arg=1, ★, ★★kwargs):
> >>> %some code%
И всегда ли kwargs - словарь?
args принимает произвольное количество неименованных элементов, kwargs именованных.
Т.е. если у тебя def puk(a, args), то при вызове первый аргумент уйдет в a, а все остальные (если они есть) в args. С kwargs аналогично.
Спасибо, про позиционные и именованные аргументы я знаю, меня интересует именно их разделение звёздочкой в функции, для чего?
> >>>def foo(args, , kwargs)
Звёздочка между запятыми, сраная макаба.
Что значит разделение? Звездочка означает, что этот параметр будет себя вести таким образом.
А, ты имеешь в виду разделители в определении, запутал меня с args/kwargs, это не имеет отношения одно к другому.
def puk(a, /, b, , c)
До / только позиционные, дальше позиционные или именованные, после только именованные.
pip install src
Ткните носом в то, что я делаю неправильно, а главное - почему. (inb4 потому что долбоёб)
Как мутировать аргумент в декораторе?
Чтобы при вызове foo(123, '123') возвращался мутированный аргумент {'123': 123}.
На вход foo падают два параметра - число и строка, в самой foo они преобразовывают тип (строка - в число, число - в строку), а декоратор выполняет функцию мутирования этих параметров, преобразуя поведение функции таким образом, чтобы вернулся словарь из заменённых типов аргументов.
Было foo(123, '123'), вернулось {'123': 123}.
У меня главный вопрос, почему функция не отрабатывает в декораторе? Или отрабатывает? Спасибо.
Да, я это и имел ввиду, спасибо. Он (разделитель) ещё оказывается не только звездой может быть.
Вспоминается vim с его
:%s#$#//#g == :%s@$@//@g
вообще проблема в *args, тут старый лист теряется и создается новый
1 Они затрудняют чтение кода и отладку, если что-то пойдет не так, а функция декорирована без костылей не разберешься, потратишь время.
2 Если надо мутировать аргумент проще и интуитивнее сделать ещё функцию под это. чем собственно и является декоратор, только с усложненным синтаксисом.
3 В мануале написано что декоратор замедляет вызов функции.
Так и нахуя надо усложнять себе жизнь.
Я всё ещё учусь. так что если у кого-то есть примеры буду рад узнать.
мутация это важный инструмент. в питоне активно используется
нужно понимать что такое мутируемые типы, shallow copy, deep copy, и не попадать впросак
в данном примере мутация не нужна. хотя может ты упростил реальный код, где таки необходима
переписал как мне нравится:
https://www.online-python.com/LRIbhfs4uM
https://www.online-python.com/61EcOdWGfQ (пистон 3.10+)
костыли всякие делать и пилить дрочёный сахарок типа @dataclass, @route('/about') и т.д.
Это в основном не для твоих поделок, а для всяких либ и прочих фрумворков. Чтобы потом уже повесить готовый декоратор на твою поделку.
Дронов это не тот ли хуй, который на любую тему книжки высирает десятками? Если тот, то я бы не стал читать, лол.
>Только без советов по типу пойти учить по документации
А зря, крайне юзерфрендли. Именно step-by-step.
А у тебя там папка с названием "звёздочка"?
Или тебе надо рассказать, как баш работает?
> [[: not found
Хм-м. А что у тебя там вообще за система и какой это шелл?
Кажется кто-то использовал башизмы и не указал принудительный баш...
тут только звёздочки и имеют значения. args, kwargs это так принято называть неименованные и именнованные параметры, но ты можешь выбрать любое другое слово и поставив две звёздочки разом получишь тоже самое поведение
А как получить именованный аргумент, объявленный при инициализации функции:
@wrap
def test1(THIS=75):
pass
Его ни в аргументах ни в именованных не видно. зато если такую функцию вызвать с им.аргументом:
test1(THIS=75)
То всё видно, как и ожидается.
Так пишут что дефолтные аргументы не видны из декоратора. Вопрос. Как вытащить дефолтные аргументы только встроенными методами.
Да я уже втянулся. Интересно оказалось.
Тут вот все заходят и спрашивают "как выучить питон", "посоветуйте книгу". Пожалуй надо сидеть в этом итт зис треде и пытаться делать всё что не получается у анонов.
Пользуясь случаем, можешь обьяснить одну очень маленькую вещь - чому вот эта переменная "args = func(" из примера со скрина анона >>587949 возвращает обьект None
type(args) = NoneType
Я думал что там должна быть обернутая функция с новыми аргументами.
Нужно создавать вложенную функцию и ей передавать аргументы, если я правильно тебя понял
Нет. Смотри
Делаем декоратор
def wrapp(kwd):
print(kwd)
Делаем функцию с дефолтным аргументом и оборачиваем
@wrap
def test1(def_arg = ''test1"):
pass
Вызываем так:
test1()
Не видно def_arg
Вызываем так:
test1(def_arg = ''test2")
Видно def_arg
Дефлотная переменная не видна из декортаора, достать её встроенными методами нельзя.
Ты эту переменную из самой функции показываешь, а не из обертки. В обертке её не видно
А нафига у тебя pass то там
Декоратор @ заменяет собой такой порядок действий. Ты передаёшь просто функцию без вызова, а значит и параметрам взяться не откуда с pass. Ты должен их передавать декодируемой функции
Так а зачем ты пайпы поставил? Убери вообще этот параметр stdout, он будет тебе в вывод срать. Или чего ты хочешь добиться?
У меня есть консоль и гуй. В гуе настраиваются параметры, после кнопки запуск гуй запускает в консоли скрипт (тоже питоновский) с этими параметрами (аргументами). Скрипт, который выполняется в консоли постоянно выдает информацию, но у меня получается сделать только так, что информация не выдается в консоль последовательно по мере поступления, а вываливается полным логом только после того как скрипт полностью завершит работу
Идеально, спасибо. Я совсем недавно начал изучать питон и когда пользовался subprocess тупо копировал команды из интернета потому что они какие-то сложные, сам не пробовал разобраться. И не до конца понимаю почему теперь всё работает как я хотел. Но главное что работает
>Но главное что работает
Нет, не главное.
Главное
>не до конца понимаю почему теперь всё работает как я хотел
Потому что когда ты делаешь пайп, то можешь из питона взаимодействовать с потоками процесса, без него он просто срет в стандартный вывод. Те все остальные строчки после Popen тоже не нужны в этом случае.
Сам Popen сложный. Используй свежий subprocess.run, там попроще, хотя он может меньше чем Popen.
У всех процессов есть три стандартный файла: stdin, stdout, stderr. Ты можешь туда любой открытый файл передать, и он весь выхлоп/ввод сделает из него. Pipe это особенный конструкт, позволяет общаться процессам без создания отдельного файла, не вытекая из оперативки. Строго говоря, по умлочанию у тебя как раз везде pipe, но не с твоим процессом, а с процессом терминала, который не ебланит и вовремя читает всё потоком и выводит. Все эти stdin/stdout/stderr по умолчанию наследуются, то есть процесс-родитель и процесс-ребёнок имеют общие пайпы/файлы куда они одновременно пишут. Реалтайма там вообще говоря нет, везде цикл read/write, операционка будит процесс только когда в буфере что-то появляется. Она же ограничивает размер буфера, если он переполняется, write на одной из сторон подвисает, пока read на другой не отработает.
Ага, спасибо, я понял. Т.е. если я делаю stdout = subprocess.PIPE, то весь аутпут stdout перенаправляется в питон, где я могу с ним взаимодействовать как с переменной. И в сам stdout уже ничего не идёт
Было бы круто конечно если бы пайп умел читать последовательный вход из stdout, а не выплевывал весь лог после получения кода завершения
У меня еще один вопрос есть, а как выйти из этого proc.communicate( )? А то когда ошибка он просто залипает как на пике и не даёт софтине дальше работать
>>588449
Ух бля как сложно всё, спасибо за объяснение
Не сильно сложно. Можешь считать что всё файлы, только разных типов. Примерно как читаешь файл, так читаешь и pipe; как пишешь файл, так и пишешь в пайп.
В линуксовых консольках это всё подключается прямо в шелле:
Просто запустить прогу, вводя/выводя в терминал:
program
Вывести stdout в файл
program > file.txt
Ввести stdin из файла
program < file.txt
Все три std раскидать по файлам
program < in.txt > out.txt 2> err.txt
Ну и собсна пайпы (stdout завязать на stdin следующей)
program | anotherprogram | thirdprogram
В итоге каждая прога тупо читает stdin, пишет в stdout, ошибки выводит в stderr и не знает ничего куда она конкретно это делает, пишет ли на диск, или её выхлоп анализируется другой командой.
А я питонист вообще-то. Как думаете меня выпрут если отказаться? Так-то проблема не только в языке. Этот сервис написали 10 лет назад с тех пор делали по 3 коммита в код на 10 строчек. Просто чтобы он продолжал работать. Сервис тупа создаёт вмки в облаке и конектит несколько вмок к одной локальной сети. Чтобы уже потом внутри этих вмок можно было кластер из наших сервисов накатить. Это для тестов. По факту я sdet, который тулзы для тестов пишет. Какого хуя мне нужно этот сервис пердолить? Они хотят чтобы я добавил фичу чтобы сервис дополнительные приватные сети на этив вмки накатывал. И обязательно делал это через 1 сетевой интервейс. Просто две сети накатать это пулреквест на 10 строчек. А вот настроить это через один интерфейс это ебать как пердолить надо. Сначала написать опёртку над консольным клиентом, который этими сетями управляет. Сейчас она кастрированая. Потом написать алгоритм выбора сетей из тех, что в облаке заранее созданы. Но нельзя просто спросить что за сети в облаке. Их нужно вручную положить в бд. В майкрасофт cql server. С их ебанутым синтаксисом. Вручную. Потом нужно орм для новой таблицы подключить. Толкьо потом можно алгоритм выбора свободных и подходязих сетей написать. Дальше как сервис создаст недокластер нужно ещё какие-то скрипты написать, которые будут интерфейсы настраивать внутри каждой вмки. И это на сищарпе. Нужно ещё что-то придумать с выбором мак адрессов. И под конец клинап поправить чтобы сначала допсети детачились, интерфейсы помечались свободными в бд и только потом удалялись вмки. Пиздец. На сишарпе это делать. В коде, который 10 лет никто не трогал. И ещё этот сервис гоняется на виндовой вмке в облаке. Без возможности автодиплоя. И без тестов. То есть мне нужно всё это без ошибок написать, собрать проект, скопировать все дллки на тот сервер подменив старые версии и там перезапустить этот сервис. Про ci не слышали когда его делали. Пиздец. Апгрейд с даунтаймом. Без тестов. Вручную. А я питонист вообще-то.
А я питонист вообще-то. Как думаете меня выпрут если отказаться? Так-то проблема не только в языке. Этот сервис написали 10 лет назад с тех пор делали по 3 коммита в код на 10 строчек. Просто чтобы он продолжал работать. Сервис тупа создаёт вмки в облаке и конектит несколько вмок к одной локальной сети. Чтобы уже потом внутри этих вмок можно было кластер из наших сервисов накатить. Это для тестов. По факту я sdet, который тулзы для тестов пишет. Какого хуя мне нужно этот сервис пердолить? Они хотят чтобы я добавил фичу чтобы сервис дополнительные приватные сети на этив вмки накатывал. И обязательно делал это через 1 сетевой интервейс. Просто две сети накатать это пулреквест на 10 строчек. А вот настроить это через один интерфейс это ебать как пердолить надо. Сначала написать опёртку над консольным клиентом, который этими сетями управляет. Сейчас она кастрированая. Потом написать алгоритм выбора сетей из тех, что в облаке заранее созданы. Но нельзя просто спросить что за сети в облаке. Их нужно вручную положить в бд. В майкрасофт cql server. С их ебанутым синтаксисом. Вручную. Потом нужно орм для новой таблицы подключить. Толкьо потом можно алгоритм выбора свободных и подходязих сетей написать. Дальше как сервис создаст недокластер нужно ещё какие-то скрипты написать, которые будут интерфейсы настраивать внутри каждой вмки. И это на сищарпе. Нужно ещё что-то придумать с выбором мак адрессов. И под конец клинап поправить чтобы сначала допсети детачились, интерфейсы помечались свободными в бд и только потом удалялись вмки. Пиздец. На сишарпе это делать. В коде, который 10 лет никто не трогал. И ещё этот сервис гоняется на виндовой вмке в облаке. Без возможности автодиплоя. И без тестов. То есть мне нужно всё это без ошибок написать, собрать проект, скопировать все дллки на тот сервер подменив старые версии и там перезапустить этот сервис. Про ci не слышали когда его делали. Пиздец. Апгрейд с даунтаймом. Без тестов. Вручную. А я питонист вообще-то.
Сочуствую. Хуже шарпа ничего нет
Увольняйся! Такое нельзя терпеть
Лучше говна поесть, чем за c# писать
>(пистон 3.10+)
В пистон завезли case, а я пропустил...
Раньше было НИНУЖНА, а теперь, ЧСХ, наверняка будет УДОБНА.
Визуальное выделение, смысловая дифференциация и т.п.
Ты пишешь функцию, как обычно, а потом просто щёлкаешь и ОПА, она работает на конкретном адресе. А так она выглядит как ещё один параметр функции. Намного лучше, определённо.
>Раньше было НИНУЖНА, а теперь, ЧСХ, наверняка будет УДОБНА.
ну гвидон копротивлялся по объективным причинам - два отступа никрасива же
но он вроде уже на правах свадебного генерала на проекте, и его никто уже особо не спрашивал, спокойно вводя моржи, слэши после запятой и прочие удобные костыли в последних версиях
экономит строчку
>if header := parse_markdown_header():
> set_date(header.timestamp)
>header = parse_markdown_header()
>if props:
> set_date(header.timestamp)
во, я даже в трех строчках обосраться умудрился. а великий морж помог избежать NameError
> спокойно вводя моржи
Нихера себе спокойно. Целые армии байкшеддеров сломили тысячи копий и довели до скандалов. Гвидон решил что собственное психическое здоровье важнее и передал право вынести окончательный вердикт совету из главных разрабов. С моржа всё и началось по большому счёту.
Это вкатуны думают куда-то пролезть через жанги.
Можно нарушить нормализацию и пихнуть дополнительные поля сразу в таблицу 1.
Если у тебя несколько ip на одну запись, то это one-to-many, тогда лучше у отдельной таблицы без json обойтись, тебе ведь скорость нужна.
Кроме индексов добавь кэширование, чтобы на одни и те же ip лишний раз не ходил на внешний сервис, т.к. это основной боттлнек у тебя, а не структура таблиц.
Ну и может быть придется добавить динамическую подгрузку этих данных на фронте админки, если все еще долго загружается, либо найти сервис, который может по АПИ сразу несколько ip принять и выдать общий результат.
Еще вариант, это хуйнуть json или jsonb одним полем в таблице со всеми нужными ключами в удобной структуре (может быть придется даже продублировать какие-то отношения в дикте), чтобы сразу вытаскивать нужные данные по ключу, а не парсить его сложным способом через re.
Тут уже смотри сам, как логичней впишется.
Не сеньор, но наблюдениями поделюсь.
> кто может сказать как выглядят более менее взрослые проекты, где бэк на питоне?
Как Instagram или Pinterest. Я помню, например, новости о том, что IG переводили с Django на Flask.
> имеет ли вообще смысл учить питон для бэка (для каких-то сложных проектов)
Имеет, пайтон с таким справляется.
> можно ли найти работу как сеньёр питонист без умений в ml/ai и подобное?
Возможно.
> имеет ли смысл учить какой-то язык для того чтобы встраивать его в питон код?
Я бы даже сказал категорически рекомендуется. Даже если реально встраивать ничего не будешь, лишний язык другого плана всегда пригодится. Я и тут и в нуботреде постоянно повторяю: хочешь быть наносеком, учи и знай больше и лучше остальных. В IT много денег и много простой работы, но чтобы ЗАРАБАТЫВАТЬ БОЛЬШЕ, как ты обозначаешь, нужно вJOBывать и напрягаться.
Современный дорогой сеньор знает не только ЯП, он по-хорошему знает всё, что происходит на беке, от момента, когда запрос приходит, до того, как СУБД исполняет план запроса. И для него не будет магических слов в наборе типа "Response Headers", терминирование HTTPS, Ingress (и чем он отличается от Ingress Controller), Pod, S3 CSI и ещё сотни всякого нет. Хотел было добавить что-то не попадающееся на каждом шагу из СУБД, но не припомнил. Хотя работа с базами иногда вообще на грани искусства.
Правильно пойми, пожалуйста: сеньор не обязательно должен уметь поднимать K8s (хотя лишним не будет), но, скажем, понимать, как пройдёт запрос (например, NAT-LB-Ingress Controller-RabbitMQ-Svc-Pod-Container-API/DB...) и какие огранчения возникают на каждом этапе, как процесс запускается в контейнере и т.п.
>много простой работы
>нужно вJOBывать
Я понимаю что ты хотел сказать, можешь не объяснять. Но всё равно, такие противоречия обесценивают остальную портянку.
Не вижу противоречия. Есть простая работа, за которую платят умеренно (ну, больше, чем грузчику в пятёрочке, конечно), а есть серьёзные места, где нужно больше, чем знание одного фреймворка и за это платят.
Чтобы проверить следующее утверждение лучше пообщаться с настоящим Помидором, но потому, что я вижу и слышу, сеньоры вообще зачастую не особо много пишут, они придумывают, как, прорабатывают тонкие места и в основном объясняют мидлам и джунам, как именно им написать 98% кода.
Я не работал в большой продуктовой команде с сеньорами, так что это со сторонних слов.
> насколько здравая идея
Дурная идея.
Есть уже в таблице код страны, зачем его дублировать.
Если нужно получать полное название из кода страны это можно сделать обычной функцией (или взять из либы какой или сгенерить самому из списка стран)
я не-вебовское делаю. пишу скрипты для анрила, гудини и блендера. игры для души пилю. просто что писать в тред-то?
Вместо category - название словаря, вместо subcategory - ключ на конец ссылки. Беда в том, что питон интерпретирует category как строку, а не как название словаря, а потому ищет подкатегорию не в словаре, а в строке. Как пофиксить, есть функция по типу str(), но для превращения строк в названия переменных?
Нихуя не понятно, в f-строках category должна быть диктом, если это дикт изначально. Попробуй str.format?
Парсинг вне закона! Вы арестованы!
Пробовал удалять строчки с методами .replace, ничего не меняется
Ну да, я и вписываю - Мой словарь, .replace убирает пробелы и ставит нижние подчеркивания. Переменные же можно на кириллице называть, нет?
А, я понял, что ты имеешь в виду. Сейчас ты тупо лезешь в строку по индексу.
Можно через таблицу символов, можно через эвал. Но это в любом случае хуевое решение.
Лучше сделай словарь словарей и уже тогда по ключу как нормальный человек лезешь.
460x742, 0:10
Ебать, тонны нефти
Переделывай. Чтобы категория была ключом словаря, а субкатегория вложенным словарем. Чтобы вводить с клавы не название переменной, что ты сейчас пытаешься делать, а ключ.
А вот так делать не надо.
А какая разница? Тебе же для учёбы?
Тебе надо просто научиться получать сообщения, лазить куда-то по API, обрабатывать их ответ и писать юзеру.
Хм-м. Люди мешают в одну кучу пэт-проекты и учебные. Мне от этого печально.
Я когда-то решая такую задачу (правда, не для телеги, а для самописного мессенджера) работал со статистикой заболеваний ковидлой (в 20-м было актуально).
Можешь покурить другие публичные API, например, тут:
https://rapidapi.com/hub
Или можешь по имени юзера в Стиме присылать, скажем, количество его игр или ещё какие параметры.
Или просто всоси базу цитат с баша и по запросу выплёвывай следующую/рандомную.
а что накидать на полноценный пет? с тг ботом чтобы всем ссылку кидать ЯСДЕЛАЛЪ
Пайчарм говорит что это не по PEP8, но мне очень не нравится то что строки ниже не выровнены с переменной выше.
Спрашиваю потому что такого говна очень много получилось. Как быть?
Тут аноны писали что он может в самом неожиданном месте вставить нерилейтед кусок или кусок из другого языка, причем замаскирует его так, что ты не отличишь
Так я и не пишу код через него, а задаю вопросы, которые вроде и не слишком сложные, но при этом чтоб ответы найти на них нужно поебаться читая штук 20 вопросов на стаковерфлоу, потом читать документацию к библиотеке(ам) и придумывать пример как бы это протестировать по быстрому.
Согласен, тоже хочу вкатиться в этот ваш чат за этим. Какие там подводные камни с вкатом бывают?
> Какие там подводные камни с вкатом бывают?
Вроде в рф что-то там ограничено в боте, по этому нужно поебаться будет, чтоб получить все функции.
Если ты не из рф, то никаких подводных, через гугл аккаунт регистрация 10 секунд
Я вернулся с обновлённым вопросом.
Меня тут пнули в направлении либы "Questionary". И, вроде как, она мне даже здорово помогла бы уменьшить объём кода. Но есть одно "но": те дикты у меня как раз нужны, чтобы давать комментарии. Например, юзеру выводит "Введите количество хуёв", и, если он ответит "help", то в ответ скажет "Сколько хуёв попробуем запихнуть.", после чего спросит ещё раз.А если введёт "details", то в ответ выдаст подробную портянку типа "мы возьмём это количество хуёв, смажем лубрикантом. приставим к отверстию и надавим на все сразу".То есть у меня было
>count = input(Введите количество хуёв)
>if count == "help":
> print(help["count"])
>elif count == "details":
> print(details["count"])
>elif valid(count):
> hooy_count = count
Есть какой-то удобный способ реализовать такую логику в связке c Questionary или, может, есть аналог, который это умеет?
Я делал функцию валидации, если она делает return string, то появляется соответствующая подпись, но тогда мне на КАЖДЫЙ аргумент нужна будет отдельная функция валидации, потому что мне отдаёт только строку, без понимания, откуда оно вызывается. А это прям совсем не то, чего я бы хотел.
>но мне очень не нравится то что строки ниже не выровнены с переменной выше.
И пайчарму не нравится. Он тебе и говорит на первом пике: поправь отступ на 2-3 строках!
пайчарм не заменяет голову на плечах
Вот эти вот отступы которые на скринах их полностью пайчарм сделал у меня вообще по другому было.
На 2 и 3 строке как раз отступы кратные 4 пробелам, если я их подвину под variable получится не ровный рекомендованный отсуп. По-моему так ещё хуже. А вот если добавлю всего 1 пробел для variable на самой верхней строке. Будет модно стильно молодежно, чотко заебись.
Новое поколение говнокодеров вырастит знатное, в целом это и сейчас уже можно наблюдать по тем же играм, а там явно нейросети уже активно используют
Задача на ход ладьи, правильный ответ пик 1
Но ведь оно не проходит тест пик 2
Абс 7-4=3
абс 2-5=3
пишем ес
..втф
>>не ровный рекомендованный отсуп
>Или так можно и нужно делать?
Бинго! И даже предупреждение с них уйдёт. 4 пробела для других случаев, где ВЛОЖЕННОСТЬ.
>Я не фуллстек.
А, ну да, ты же писал, что твои основные языки это не только JSON, но ещё и HTML, CSS, XML, извини, не обижайся.
Просто не используй match. Это бесполезный сахар от которого на данный момент может быть куча проблем из-за несовместимости
Видимо, ты про меня. Я - >>586820-кун.
Никогда не называл себя программистом (тем более, что это слово зашкварили безграмотные идиоты, не умеющие даже переключать раскладки). Просто есть известная шутка, что девопсы это YAML-Developer'ы (пик), мол написание обширных *aaC-конфигов (в основном на ямле) это разработка.
На ямле, который Markup Language, пишется код для Ansible, K8s, GitLab.CI и т.п. На JSON пишутся конфиги Terraform, например.
Когда-то я писал скрипт для поднятия кастомных виртуалок в KVM на баше. Теперь я тоже самое делаю в несколько JSON-строк. Так и получается, что то, что вроде как не программирование выполняет те же функции.
Для меня это хорошо, но для мышевозов-эникейщиков - нет, для них и баш был невмоготу, а теперь вообще пиздец пизвецовый.
Хороший, годный match. Позволяет серьёзно укоротить портянки из if isinstance. Очень актуально в динамически типизированном языке. Куча проблем — это ровно одна проблема со старым питоном, которая может быть актуальна для библиотеки с широкой совместимостью, но совершенно неактуальна для конечного приложения, где ты сам себе хозяин. Сейчас уже даже в последней LTS убунте питон 3.10, не говоря уже о всяких докерах и винде.
гвидо, успокойся
Ну поползовался, никакой имбы нет, но штука местами крайне полезная.
Мне кажется так всегда говорят, когда появляется новая вещь у программистов. Ну вырастет и вырастет, зато неговнокодеры будут в цене
Я уже посидел с ним. Штука прикольная для уменьшения рутины. Когда ты просто одним запросом с большой вероятностью можешь получить ответ без необходимости делать после несколько кликов ещё и смотреть дал ли гугл нужную выдачу.
Но это всё на самом деле не то, что твою производительность может повысить. Но такое-се. Маленькое удобство без которого легко обойтись. Вот регулярки она очень хорошо пишет, но это тоже такое, что разок написал и больше не надо. Найти готовые варианты так же не сложно.
Но вот просто генерация текста и структур некоторых вот уже реально интересно, особенно для создания учебных проектов, портфолио и всего такого. По сути сильно снижает нагрузку в плане наполнения сайта или чем поверхностно наполнить приложение. Не так убого, как просто копирование из википедии. Для всяких копирайтеров это реальная угроза, но всё же тут важна уникальность текста, а уж тут нейросеть обеспечить не может. Так что и для них не особо угроза.
Ну если кратко - пользоваться можно, но сильно оверхайпнутая штука
Это же текстовая нейросеть. Графическая нейросеть внути которой целая вселенная поместилась и которая всё что угодно высрать может в 2 гигах помещается.
Я в нейросетях не разбираюсь, но не думаю, что то, какие данные нейросеть генерирует как то сильно влияют на её размер.
>как выглядят более менее взрослые проекты, где бэк на питоне?
Обычно это рой микросервисов, которые крутятся под общим линуксом, используют БД-очереди для коммуникации и т.п. Активно используются другие готовые решения, с которыми ты взаимодействуешь через АПИ.
Совсем другое, чем когда у тебя мощный монолит на c/c++/java.
>имеет ли смысл учить какой-то язык для того чтобы встраивать его в питон код
Чтобы именно встраивать - нет. Но си будет полезен в любом случае. Скорее может быть полезен какой-нибудь го, чтобы на нём тоже можно было что-то реализовать. Но главное, тебе надо разбиваться с бекенд-технологиями, с линуксом и т.п., вот это важно.
>как выглядят более менее взрослые проекты, где бэк на питоне?
Пример функции из яндексовской АНАЛитики тебя устроит?
Хочу написать программу, чтобы она определяла кругляшки, квадратики, треугольники и ещё несколько значков на экране, и тыкала по ним мышкой.
При запросе в гугле "питон распознавание обьектов" - он выдает однотипные ролики про распознавание лиц и номеров машин, с какими то заранее оттеринированными весами, или типа того.
Посоветуйте гайд или стотью в интернете или книгу, которая мне поможет в данном вопросе.
Заранее спасибо и с новым годом!
короче мне надо вот такие значки различать, как на пике.
Мне для этого надо YOLOv4 обучать собственным моделям или есть более простые варианты?
Спасибо, то что надо!
Подскажите книжку по питону , база есть (читал Bite of Python и Dive to python) но хочется погрузится более глубоко
прив ребятки и девчатки.
Вопрос такой - как быть если удобно иметь в словаре какой-то not serializable объект, если периодически нужно дампать весь словарь в json?
Пока что приходится временно вынимать объект из словаря, дампать а потом вставлять обратно, но это пиздец костыли, хотелось бы чтобы json сам понимал что это не текст и что его можно просто пропустить.
Очень сильно не хватает практики.
Это копия, сохраненная 13 марта 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.