Вы видите копию треда, сохраненную 14 мая 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Предыдущий: >>2603452 (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: анон, если ты вносишь изменения в шапку, оставляй ссылку на код с обновлённым исходником.
Никак, делай через сет.
>не зря у нас в универе с и с++ в приоритете
Они в приоритете потому что их преподают уже лет 30, а что-то новое в программу универ очень тяжело принимает. Вообще нынешнее костное университетское образование это развод уровня ммм, преподают хуиту актуальную десятки лет назад.
names = ['foo','bar']
out= {k:'element in list' if k in list else k:'not in list' for k in names}
Аноны. Чому эта хуйня не работает объясните? Если то же самое написать через dict() всё работает.
Охуенно.
Потому что k:v в дикт компрехене это фиксированный синтаксис.
https://docs.python.org/3/reference/expressions.html#dictionary-displays
Видишь там expression:expression, вот это оно, твой иф там нахуй не уперся.
Короче, делаешь сет из одного из списков и потом
[val for val in lst if val in set], это оптимальный способ.
Хотя, conditional подпадает под expression. Тогда можно так.
out= {k:'element in list' if k in list else 'not in list' for k in names}
Спасибо за инфу. Но ты кстати тоже немного ошибся, анон. Не надо там ни какие сеты делать
Просто после элса надо ставить не пару ключ значение а только значение.
А что кстати быстрее компрэханшн или функция dict()?
Надо бенчить.
Лольку скормили, суки.
Ошибка: синтаксическая ошибка в словарном выражении. Условие if должно находиться после ключа и двоеточия.
Изменения, которые были внесены:
переименована переменная list в lst, так как list - это зарезервированное слово в Python;
добавлены кавычки вокруг фразы 'element in list', чтобы указать, что это строка;
перемещено условие if после двоеточия и ключа, чтобы соответствовать синтаксису словарного выражения.
Пример измененного кода:
lst = ['foo']
names = ['foo', 'bar']
out = {k: 'element in list' if k in lst else 'not in list' for k in names}
Нет, try и if - это разные конструкции в Python, предназначенные для разных задач, и их нельзя использовать взаимозаменяемо.
Напищи такой же код заменив if на конструкцию try except
x = 5
if x < 10:
print("x меньше 10")
Можно заменить оператор if на конструкцию try-except, используя исключение ValueError, например, вот так:
x = 5
try:
assert x < 10
print("x меньше 10")
except AssertionError:
pass
Заебись милордский код. Вкатуны, вешайтесь.
x = 5
try:
if x < 10:
print("x меньше 10")
except:
pass
Или
x = 5
try: print("x меньше 10") if x < 10 else None
except: pass
А как же ФУНДАМЕНТАЛЬНЫЕ ЗНАНИЯ? Переписывание в тетрадь под диктовку препода его конспекта из Фихтенгольца
Крутые челы по Зоричу чились.
WebDriverWait(driver, 77).until((EC.text_to_not_be((By.ID, "LUL"), "") or (EC.text_to_not_start_with((By.ID, "LUL"), "Loading"))))
Посоветуйте на что выделенное болдом можно поменять, чтобы драйвер ждал пока LUL равен пустой строке или начинался с "Loading".
Моя вполне работающая реализация была вот такая, но понятно что это костыль, хочу правильнее:
while (driver.find_element(By.XPATH, '//[@id="LUL"]').get_attribute('value') == "") or (driver.find_element(By.XPATH, '//[@id="LUL"]').get_attribute('value').startswith("Loading")):
time.sleep(1)
Т.е. если мне надо часто брать длину списка, мне не нужно записывать его длину в отдельную переменную, можно спокойно каждый раз к его len() обращаться?
...или словаря.
добавлю что у списка и словаря длина не считается каждый раз заново. Так что записывать самому не нужно
Питонически len(), так как более красиво и читаемо.
плюс len() кидает TypeError если длины нет, а если вызывать __len__() у объекта, в котором он не реализован - получишь AttributeError.
Разные уровни абстракции. Питонически всё же лучше максимально сократить количество вызовов Dunder методов в своём коде.
У себя можешь как хочешь делать.
по либам какимнибудь или алгоритмам, только не совсем протухшее
не обязательно степик, просто формат видео совсем не перевариваю, а там зашло решение задачек, но чот я так понял на степике кроме поколения годноты нет вовсе
Метапрограммирование
Запускаю этот код с флагами оптимизации. Ой, а что это он не работает?
а вот хуй. У меня охуительные преподы были. Сразу всё понял и по борланду, и ява, и основы ПК, и ИИ. Так что пиписькой тебе в рот.
Только логике забыли тебя научить - даже ошибку выжившего не понимаешь
Концепции костылирования. Очень сложно понять, до сих пор не могу объяснить. Во вторую депрессию свалишься спустя 3 месяца настоящей работы, когда больше станешь читать чужой код, нежели писать свой.
блять у меня встал
писать анонимный чат используя фэстапи это хорошая идея?
отвечать сходу без гугла
1) сколько сможете назвать в питоне строковых методов?
2) сколько списковых?
Там тех строковых штук 30, кто их помнить будет кроме самых ходовых?
Нахуй надо, для этого есть документация. Строковых насколько помню 30+, списковых около 15
Документацию открыть можно всегда, но вот если ты не знаешь что метод для твоей задачи существует ты и не подумаешь о том что какой-то твой можно сократить.
Вот мы берем значение ячейки
cell = sheet.cell(row=1, column=1).value
Если ячейка пустая возвращается None, но как известно офисные тёти сраки любят оставлять в ячейках пробелы, так что
Проверки "is None" недостаточно, нужно ещё стрипнуть строку strip.
Но строку None стрипнуть нельзя
Вот и приходится:
cell = sheet.cell(row=1, column=1).value
if cell:
cell = cell.strip()
if cell:
pass
Как эту хуйню упростить? Сделать более элегантной, питонической, я хуй знаю. Строки в никуда уходят смотреть больно.
Ты итерируйся, а не ровы-хуёвы, а там уже циклом управляешь по ситуации.
а если по другому как-нибудь можно?
Может тебе ещё все атрибуты класса object пересказать? Или все магические методы?
List[Tuple[str, List[int]]]
Вообще зависит от того как ты используешь эти данные.
Возможно List заменить на Iterable будет лучше
Так что же ты пришел, хочешь чтобы съели тебя?
дохуя / дохуя
>1) сколько сможете назвать в питоне строковых методов?
да помню все их наизусть
>2) сколько списковых?
11
Пошел нахуй!
Души своего питона!
Нет, у питона автоматом длина во всех объектах записывается во время его создания или изменения.
Магические методы в питонах не вызываются обычно в коде, это чисто для классов, допустим если ты захочешь как-то модифицировать подсчёт элементов в списке, что бы это было не просто число, а какое-то сообщение в добавок
У Джанго отличная документация, считай полноценная книга, лучше не напишут уже. Для работы с джанго на практики просто иди на ютуб
Суть вот в чем, я захожу на сайт, на страницу с модалкой для авторизации, мне сервер назначает временный кук, когда я залогинился, кук меняется на новый и живет пока я не закрою окно/перезагружу страницу. Вот в чем мой вопрос, порядок действий при авторизации:
1.отправляется пост запрос на сервер
2.сервер в ответе назначает новую куку
3.меня залогинивает
Как должен выглядеть пост запрос, чтобы при запросе я забрал новую куку и она добавилась в запрос, чтобы сервер меня залогинил.
Не знаю правильно ли я описал, но затуп с request cookies / response cookies
Есть тг? Могу туда написать подробнее
Ну я и что)
Привет, получил затык
есть данные в БД необходимо, чтобы телеграм бот выводил данные из БД в ответ на команду
При выводе в терминал получаю всю таблицу
Если пытаюсь скормить результат боту - бот выводит только первое значение
рабочий + закоменченный
Куда копать?
https://pastebin.com/2z9XMBn6
Воспринимай bot.reply_to как return. То есть один раз дёрнул - ответ ушёл, цикл закончился.
Тебе надо сериализовать таблицу в одну строку например join'ами и вернуть уже её.
Пынял, спасибо
питухон вкатун стажём 1.5 месяца
Когда допишешь, апгрейдни до бесконечной доски.
Осваивай Numpy, не трать время не бесполезные костыли.
>Как блять качать эту часть мозга?
Тебе нужно прокачать способность не делать костыли. Постепенно освоишься, полтора месяца ещё не так уж и много.
Тут просто питон сам из коробки с двухмерными и более мерными массивами работать не умеет толком. Потому, что в питоне из под коробки массивов нет в принципе.
И для новичков в питоне подобные попытки писать костыли и являются главной проблемой в начале, потому что питон позволяет это делать, лол. На питоне легко такой хуйни навертеть, когда ты лишь едва-едва выучил синтаксис, что самая простенькая программка отправит твой комп в нокаут.
>Как блять качать эту часть мозга?
Никак, есть предрасположенности. У нас был класс с айтиуклоном, один день вообще в универ на занятия ездили. Так вот уже из ауе быдла были селектированы более склонные и желающие заниматься айти и там я и пара человек тащили, остальным похуй было. Когда я попал в универ там все где-то на моём уровне были и только пара человек реально лучше соображали. И вот к нам попал тип который вообще всё играючи решал то на что у других десятки минут уходили.
Это тупо талант, да и к тому же нахуй не нужный, лучше простое человеческое счастье.
Да а дрочи код особенно в обучении с чатомджипити, эта штукенция обучение точно перевернет, учителя скуфы сразу нахуй.
with open(filename, "wb") as file:
...for block in r.iter_content(chunk_size = 1024):
......if block:
.........file.write(block)
Аноны, у меня логика сломалась поясните за вот эту хуйню.
Что будет, если последний chunk меньше 1024. Он что не сохранится? Я именно так вижу. Но на практике всё сохраняется. Чому? ЯНХНП
С чего бы? Выдает значение по достижению chunk_size или конца файла.
>когда стоит задача сделать что-то вот такое конкретное, то есть представить в голове алгоритм/схему, разбить на куски и реализовать мозг работает как будто я даун аутист с айсикью 50
С чего это ты решил, что автоматически, что называется из коробки должен уметь решать такие задачи? Может ты еще и высшую математику знаешь с рождения? Выставляешь себя типа умным, а сам дурак, не понимаешь элементарного, что ты дилетант в алгоритмах/программировании. Это нормально, все дилетанты пока не научатся. Догнал? Надо учиться.
>три иностранных языка освоил до уровня ~C1
Толсто
>вообще играючи
Жир. И как бэ, это не имеет ничего общего с программированием/алгоритмами. Если ты пытаешься применять подход для обучения естественным языкам в обучении программированию/алгоритмам, то у тебя ничего не выйдет. Такой подход не годится.
Обучение программированию/алгоритмам это не заучивание слов и их значений на незнакомом языке. Это как минимум мышление абстракциями, как в алгебре, оперируя кодом и данными абстрактно, представляя их как xyz. Это способность вести рассуждения, находить закономерности, делать логические выводы. Это и чисто алгоритмическое мышление, которое отличается от алгебраического. Для обобщения придумали термин "вычислительное мышление" (computational thinking). Короче, немного сбился с мысли, если есть желание порассуждать, то пиши, только учти, что на неадекватную херню адекватных ответов от меня не дождешься.
С какой целью ты лопнул с утра пораньше?
Ебать тебя не должно, если ты не разработчик cumпиляторов или не низкоуровневик, но для большего понимания хорошо разбираться в том, в какой области памяти у тебя что лежит и какие структуры для этого используются.
Сам разобрался, можете не отвечать.
>Что такое стек, хеш-таблицы?
>>19584
>Ебать тебя не должно, если ты не разработчик cumпиляторов или не низкоуровневик, но для большего понимания хорошо разбираться в том, в какой области памяти у тебя что лежит и какие структуры для этого используются.
Чиво? Какие еще области памяти? Стек это структура данных, как и хеш-таблица.
Поясни, в чем он неправ
Нет, всё правильно. Лежит в массиве, хеш это вычисление индекса в этом массиве с разрешением коллизий.
Лучше бы ты молчал, за умного бы сошел. При чем тут память? При чем тут компиляторы? Бред сивой кобылы.
Нет это был не я. Просто мое абстрактное мышление под "индексом" нечто другое представляет. Нечто упорядоченное, а под хэшем я представлял некую извилистую, но точную карту до объекта, которая у каждого уникальная как адрес в памяти.
Ну индекс и индекс, хорошо. Рад новым знаниям.
>алгоритмами на основе стека
>стек вызовов
>стековая память
>стек
Обсираюсь тебе на ебало, так уж и быть.
>У хеш-функций случаются коллизии. Когда один и тот же хеш указывает на разные данные.
Верится с трудом, чел. Это бы означало, что на такую систему нельзя полагаться и в ней нет смысла.
Хочешь не верь, но у тех же алгоритмов семейств MD и SHA есть коллизии, но их тяжело отлавливать.
Речь о реализации хешмапов, в которых бывают коллизии, которые нужно резолвить правильно, причем тут алгоритмы?
https://stackoverflow.com/questions/327311/how-are-pythons-built-in-dictionaries-implemented
Ну так ты спрашивай про конкретную реализацию, а не общее понятие.
Чел, любая хэш функция, которая отображает множество ключей на меньшее множество индексов, будет иметь коллизии в какой-то момент.
Ответы почитай.
>Почему это?
По принципу Дирихле. Если например у тебя множество ключей - это строки длиной десять строчных символов английского алфавита, то всего таких ключей будет 26^10. Чтобы гарантированно избежать коллизий, нужно выделить столько же индексов в хэш-таблице.
Иди на хер, дура. Анон спрашивал про стек как структуру данных, которую он будет использовать в алгоритмах. Ты пишешь про не нужную ему хуйню, внутреннее устройство языка программирования, которое к алгоритмам и структурам данным не относится. Засунь себе в жопу это всё.
>>19922
>Верится с трудом
Бля, тут что тебе угадай мелодию что ли? Верю - не верю. Да мне пох, веришь ты или нет. Иди изучай тему.
Да не рвись ты так, шизоблядина. Он конкретно спросил "что такое стек, хэш-функция и зачем это нужно", никакого контекста про структуру данных не было, это ты уже за него додумал. Обтекай.
>никакого контекста про структуру данных не было
Долбоеб, стек - структура данных, хеш-таблица - структура данных, какой еще нужен контекст? Это ты начал не по теме писать.
Ебанат, прочитай ещё раз ответ >>19584
>в какой области памяти у тебя что лежит и какие структуры для этого используются.
Ты так малясь проигнорил это, зато доебался до "памяти", когда как "стек" является и структурой данных и как отдельная реализация памяти и как организация работы программы.
Ещё раз. Где в его вопросе фигурируют "структуры данных" и "алгоритм"? Нигде, это ты за него додумал. Но раз ему не хватило мозгов погуглить, ему дали общий ответ на его общий вопрос.
Я тебя не понял, что ты написал. Я вкатун, мне советовали изучить структуры данных и алгоритмы, поэтому и спросил про стек и хеш-таблицу, потому что это первые попавшиеся непонятные мне слова.
>>19714
Понял. Спасибо. А есть какие-то конкретные задачи, гдп на примерах поясняется чем использование стека/хеш-таблицы лучше? Второе используется в БД или я нихуя не понял опять? Ну типа у нас есть какая-то ключ (например, ID) и мы по нему можем вытащить всю информацию? Это принцип работы хеш-таблицы? Сорри за нубские вопросы. Из алгоритмов я вообще пока понял только сортировку пузырьком. Или >>19584 прав был и джуну это не нужно знать?
>Я тебя не понял, что ты написал.
В чем проблема это загуглить?
>А есть какие-то конкретные задачи, гдп на примерах поясняется чем использование стека/хеш-таблицы лучше
Почитай их описание и сам прикинь, в чем они могут быть полезны.
Словари и множества в питоне реализованы на основе хэш-таблиц, а вызов вложенных функций реализован на основе стека.
>Или >>19584 прав был и джуну это не нужно знать?
Джуну надо знать про эти слова и что они могут значить, но на практике ты редко эти структуры сам реализуешь, всё это сделано за тебя.
Ты прямо совсем платиновые вопросы задаешь, на которые отвечают в любом курсе по питону. Типичная задача на стек: проверка скобочной последовательности на правильность, на хэш-таблицу - проверка наличия дубликата в списке.
Баран, стек - АТД, структура данных, и ничего более. То что эта структура данных используется в механизме вызова функций и для хранения некоторых данных в рантайме языков программирования, - ничего не значит. Если бы стек вызовов называли массивом, ты бы орал, что массив это стек вызовов?
>>20196
>Где в его вопросе фигурируют "структуры данных" и "алгоритм"? Нигде, это ты за него додумал.
Баран, стек - АТД. Всё. Он спросил что такое стек и хеш-таблица, что подразумевает, что имеются ввиду структуры данных. И то и другое АТД. И вообще, если с помощью стека реализовано много разных фич, не означает, что под стеком понимают их. Только долбоебы так думают. Стек - АДТ. Всё.
Ты так ничего и не поймешь. То есть поймешь, но не сразу. Чтобы понять одно, нужно знать другое. И так по цепочке. Если есть куча времени, желания и сил, то можешь пытаться охватить как можно больше одновременно. Я так делал. Это долгий путь. Тебе не хватает наглядности. Посмотри "тренировки по алгоритмам" от Яндекса на ютубе. Еще есть "тренировки по алгоритмам 2.0" и недавно запустили 3.0. И старайся что изучаешь переводить в код, запускать, изменять. Так ты намного быстрее будешь усваивать знания.
Какой язык предпочел? Еще советую налегать на задачи. Попытайся использовать не только подход, когда ты не знаешь что-то из терминов программирования и пытаешься это понять, но также подход, когда ты берешь задачу и пытаешься ее решить, попутно тебе придется изучать то что не знаешь в программировании, что требуется для решения задачи.
Полюби решение задач. Обучение через решение задач прокачивает быстрее, чем просто изучение незнакомого. Твой фокус сместится с необходимости изучить бесконечное число знаний, на решение одной задачи в один момент времени. Так ты не будешь перегружать мозг. Ты будешь всегда знать что тебе нужно делать прямо сейчас, потому что держать в голове одну задачу очень легко, а держать в голове, что нужно изучить бесконечно много терминов очень сложно. Ты будешь путаться, забывать, перегружать мозг.
Сайтов с задачами великое множество. Используй что хочешь. Можешь попробовать проект Эйлер. Не бойся смотреть готовые решения. Не пытайся все решить сам с первого раза. Все равно, даже подсмотрев у кого то, ты не сможешь с первого раза повторить реализацию на память. Кроме того, будут попадаться похожие задачи, но под которые нужно что то менять, это тоже будет способствовать самостоятельному составлению решения, пусть и на основе базового предыдущего. Изучай разные методы решения, грубые, изящные, всякие. Главное именно все реализовывать в коде.
>вызов вложенных функций реализован на основе стека
Не на основе, а с использованием стека в качестве АТД хранящей данные вызовов. Не вводи в заблуждение. И лучше сам по глубже изучи, чтобы не плавать.
>на практике ты редко эти структуры сам реализуешь
Зачем хуйне учишь? Умничаешь, иди сам поучись лучше. Когда попросят реализовать простейшую структуру как стек и он не сможет, это будет фейл.
Да не гори ты так, а то геморрой на весь тред вылез.
Орёшь пока только ты, как и продолжаешь игнорировать полный ответ, доёбываясь до конкретных слов как удобно тебе. Как и обосрался бы с ответом, если бы тебя спросили "что такое куча и стек", будь ты таким же упёртым АТДшником.
>хранящей данные вызовов.
Но он хранит не только их.
>лучше сам по глубже изучи, чтобы не плавать.
Учу, и хорошо, что не по треду в /pr/.
>Когда попросят реализовать простейшую структуру как стек и он не сможет
Для этого достаточно прочитать википедию, вспомнить про список и реализовать класс с 2 методами, а работодатель просить тебя будет не типы данных реализовывать, а таски закрывать с сроком вчера.
Его также и послали, я не УЧИТЕЛЬ, но другой УЧИТЕЛЬ доебался за контекст.
Без этих двух вариантов неужели нет общепринятой практики на этот счет? В Си например для этого есть приватность - которой в питоне нет. А как?
Солид говорит, что изначально не должно быть такого метода.
У цябе памалковыя уяўленьні. Кука вызначаецца сэрверам, а не тваім запытам. Кука, калі, ты, кліент яе маеш, будзе заўсёды дасылацца на адпаведны сэрвэр.
1. POST запыт змяшчае імя карыстальніка й пароль, таксама адрас server.com/login ці загад command=auth, гэтыя словы ты сам выдумляеш.
2. сэрвэр, калі бачыць request.path=login ці request.command=auth, правярае username & password. Калі знайшліся, то да адказу сэрвера ў response.header дадаецца кука session=ik48h48u7fhwsdreig2... ВАЖНА, дадаць гэтую куку да адказу патрэбна перад пачаткам вываду старонкі, каб яна была ў хэдары. Cэрвэр мае сгенерыць і захаваць гэты session.
Усё. Табе патрэбна напісац код другога пункту для сэрвэра.
Існуе агульная канвенцыя пачынаць назву асабістага(private) метада з двух падкрэсьлянняў:
def __my_private_method():
...
На локалхосте, очевидно.
А ты в какой парадигме петухонируешь???
никакой. искал такое, везде пишут ты неправильно программироваешь
ты можешь только переопределить, чтобы принтил "пошёл нахуй" в консольку
Тебе интерпретатор намекает на 14 и 22 строки.
Твоя задекорированная функция что-то возвращает? Да.
Значение внутри декоратора, которое должно возвращаться функцией, возвращается? Нет.
Внутри декоратора wrapper должен возвращать результат работы func(n).
так? у меня "Код до выволнения фунции g:" на несколько экранов.
>так?
Так у тебя второй print не отработает, выноси в отдельную переменную и потом её возвращай после второго print.
кого выносить в отдельную переменную О_о? Проблема в декораторе или в функции g? Можешь начинающему написать здесь правильный код с 11 до 22 строки, пожалуйста.
Да что, блядь, непонятного? Напиши res = func(n) и после второго print напиши return res.
Ну и? Код работает, а что тебе конкретно надо от твоего кода, ты так и не объяснил, а додумывать и искать контекст, как тут любят, я не буду.
я рассчитывал что вывод будет такимЖ
Код до выволнения фунции g:
55
Код, который сработал после выволнения фунции g
Для начала ещё раз прочитай, что такое рекурсия. Потом можешь поэтапно посмотреть, не на примере n = 10, а n = 3 или 4, как у тебя отрабатывает декоратор.
Если тебе нужен только финальный результат, то закомментируй @decorator над g и вместо print(g(10)) напиши decorator(g)(10).
окей, буду лучше поэтапно учить питон.
Аноны, а такая вот конструкция создает ненужный кортеж в месте скобок (foo + '/') ?
Это не кортеж, это выражение. И в таком случае он бы тебя нахуй послал, потому что у них нет такого метода.
Сап двач
Подскажите, вот учу джангу и столкнулся с вопрсом пикрил.
Что за % между переменной и строкой и что он делает? Он указывает на переменную которая вставляется заместо %s или что?
бля , случайно анона тегнул
Это старый синтаксис формата строки. Гугли.
В гугле забанили?
obj.add_to_dict()
Аноны, вот я захуярил класс который сам себя добавляет в некоторый словарь, после необходимых калькуляций над data. Но что-то я перестарался походу. Вопрос такой, какой синтаксис можно применить чтобы вызывать метод без экземпляра (хочу поэкономить строки)
Как то так: MyClass(data).add_to_dict()
но так не работает, т.к. экземпляр класса не создан... наверное.
Если я добавлю self.add_to_dict в конструктор класса, то так сработает, обьект сразу улетит в словарь, но мне бы хотелось перед этим и другие методы например поприменять, вроде такого:
MyClass(data).do_shit().add_to_dict()
Можно ли как-то так сделать, есть синтаксис такой? Или обязательно надо явный обьект спавнить в переменную?
Отбой.
MyClass(data).add_to_dict() работает, хуй его знает почему у меня раньше не получалось - человеческий фактор
Почитай про статикметоды и можешь писать MyClass().add_to_dict(data)
Ну он хочет создавать объекты, поэтому нужен. Если объекты не нужны, тогда статик.
Или я что-то не так понял.
Понятно как это обойти - итерировать список ключей, но вдруг на это есть весомые причины и лучше вообще так не делать, а записать ключи на удаление и потом отдельно их удалить в отдельном цикле?
Я думаю, это осталось со времен, когда порядок не гарантировался, вот мутация и распидорашивала итератор.
Просто итерируйся по копии ключей.
Хорошо, что я не в Си это написал.
Надо чаю пойти заварить...
Я уже 3 года на работе создаю на питоне веб-сервисы, работаю с базами данных от редиса до кликхауса, автоматизирую кучу разной хуйни, применяю асинхронку, но даже я сходу не смог бы придумать, как написать крестики-нолики, виселицу, шахматы и прочую поебень, которой учат во всех учебниках после второго урока. У меня эта часть мозга, как ты выразился, вообще не работает.
Так что завязывай с этой хуйней и приступай к проектам, которые делают что-то практическое. Напиши парсер вакансий с ХХ, сделай свой виджет для получения прогноза погоды, хуй знает.
Если такой возможности нет, можно ли написать скрипт на пайтоне который это сделает?
Можно.
Запрос не существует.
Что это значит? Я только начинаю кодить, куда двигаться что бы это реазиловать?
Если только начинаешь и не умеешь работать с апи, то сделай топорно, просто чтобы оно работало. Скачай страницу (хтмл), прочти его тупо как строку и выдерни оттуда все ссылки с окончанием mp4 или webm при помощи регулярных выражений.
спс попробую
Чё за практикум?
да, я имею ввиду когда капчи еще не было
> опенсв
Это просто макака у нас тут на дваче глупенькая. А можно было бы сделать так.
1 Прикручиваем капчу как на форчонге с ползунком в которую можно внедрить сколько угодно процедурных шумов и типы шрифта менять хоть каждый день в автоматическом режиме
2 Из за того что там ползунок двигать надо в сервис разгадывания не отправишь, чтобы обучить нейронку нужно самому неделю эти капчи разгадывать
Вот и всё ёпта. Пока ты неделю дрочишь капчи в ручную чтобы базу обучения собрать и потом ещё сутки у тебя нейронка учится (т.к. капча сама по себе сложная) ты меняешь шрифт и шумы в самой капче.
Анимач целый год какой-то школьник засирал вайпом что его даже закрыли на хуй на пол года и до сих пор там вайпает ингда. За это время у макаки не нашлось желания и небольшой горсти бабла чтобы нанять рандомного челика из этого ИТТ треда чтобы он всё сделал за сутки.
Синьёры архитекторы, объясните джуну, когда нужно юзать асинхронщину? Я спрашиваю именно про этап проектирования. Все вычислительные операции параллелятся на подах, тредами можно всю и/о инфу так же получить/записать через пулекзекьютор. Нахрена тогда все эти асинки, в душе не ебу, у нас на проекте их нет. Я знаю, что такое ивент луп и коррутины, и что это в плане синтаксиса проще написать евейт и не париться, но хотелось бы услышать от профессионалов, когда лучше архитектуру проекта делать полностью завязанной на асинк, а когда лучше просто всё по ивентам раскидать, а для и/о взаимодействий использовать треды?
>я дошел до того, чтобы записаться на курс в практикуме
И что по твоему он должен тебе дать? Я лет 10 назад вкатывал в ойти своего родственника и я после пары дней тренинга сразу предложил идти на работу дал своё портфолио и рассказал о каком опыте работы напиздеть. Короч естественно первый месяц был пиздос, а потом всё раздуплился.
Самый лучший способ. А вот этот дроч на курсах часто особенно раньше с реальной работой ничего общего не имел, я в универе дрочил языки которые мы проходили еще через пару лет и ничего что изучил сам потом в программе нового не открыл.
Единственное что тебе надо, это когда затуп найти выход из него и это должна быть реальная ситуация а не выдуманные примеры. А ни на каких обучениях этому не научат, а только если коллектив больменее нормальный попадется.
хз, у меня всё так работает
Подтверждаю
Учу JS уже лет 6 наверное, 5-7 раз начинал и бросал через неделю-месяц, уже почти наизусть знаю основы, замыкания и прочую лабуду "по верхам", но практики маловато, в реакте том же и т.д, хоть и верстал разное с небольшими скриптиками. А практика это БааааааааЗаааааааааа, учишь - делаешь сразу проект/задачки что бы закрепить знания, вот так и сижу недо-джуном 5+ лет хыыыыы
Асинкио это более эффективный способ утилизировать процессорное время для io задач. Такая вот замена всратым питонячьим тредам.
Что не так?
>я дошел до того, чтобы записаться на курс в практикуме
И что изменится? Проблема не в плохих курсах, а в тебе. Сколько ты решил задач за всё время? Должно быть сотни, тысячи. Сколько ты написал приложений? Должно быть десятки. Если ты этого еще не сделал, то тебе не помогут никакие курсы. Ты спросишь как же решать задачи и писать приложения если не умею. Просто берешь и делаешь. Тут работает метод "просто ввязаться в драку, а там видно будет". Придумай проект. Декомпозируй на мельчайшие задачи. Выполняй пошагово. Будь терпеливым, не бросай, не пытайся делать идеально, главное чтобы проект был закончен и он работал.
Появится план, дедлайны и цели. Новички не могут придумать себе задачу, они даже не понимают что вообще реально можно делать. Курсы в этом плане могут дать значительный бурст.
мимо мидол, был в такой же ситуации когда учил англюсик
Не, на самом деле придумать проект легко, просто людям лень, можно просто брать чужие идеи и делать копию, есть всякие паблик API и т.д, вся суть в гребаной лени
Это ты с точки зрения своего опыта говоришь, а новички прост не знают, что такое вообще можно, они очень часто не понимают, чем вообще занимаются программисты.
а что будет в Си? аксесс виолатион?
Калі справа тычыцца сеціва і маеш шмат аддаленых хастоў. Каб не чакаць водгуку ад кожнага зь іх па чарзе.
зачем?
Это что за пиздец? Я почему-то всегда думал, что белорусский ближе к русскому, чем украинский, а твой пост нихуя не понял.
Рано ты выписался из дурки...
Беларуская бліжэй за ўсё да ўкраінскай, але абодзьве аднолькава далёкія ад польскай і расейскай.
Да об этом я думал, но хотелось бы на уровне теории и концепций почитать-посмотреть, что бы уже после и в других приложениях лучше понимать зачем они всё так распихивают.
Хотя я тут, как обычно, могу всё усложнять в своей голове в довесок
Пошёл просто по документации, проверяя всё, что в ней написано на деле и дело сразу же пошло. Так уж и прихожу к выводу, что нафиг все эти курсы, сразу же надо идти в документацию. А потом можно и видео для примеров посмотреть или просто другие примеры с какого-нить гитхаба скачать
Всё так.
Вкатуны жалуются, что вакансий нет.
Это с какой?
Да и ты соседнюю улицу в своём городе не знаешь.
Когда кто-то парсит страницу с помощью регулярных выражений на планете открывается очередной портал в Ад.
if count:
if name not in users:
users[name] = {w+'_count': 0 for w in search_words}
users[name]['comments'] = []
users[name][word+'_count'] += count
users[name]['comments'].append(comment)
А вот так ругается на синтаксис второй строки, подскажите как её правильно написать:
if count:
users.setdefault(name, {w+'_count': 0 for w in search_words, 'comments': []})
users[name][word+'_count'] += count
users[name]['comments'].append(comment)
if count:
users.setdefault(name, {w+'_count': 0 for w in search_words})
users[name]['comments'] = []
users[name][word+'_count'] += count
users[name]['comments'].append(comment
>users.setdefault(name, {w+'_count': 0 for w in search_words})
>users[name]['comments'] = []
Ну это то же что и в первом примере, а объединить эти строки можно?
>для анализа данных на Python?
Дефолтный ответ - Jupyter поверх Anaconda. Всевозможные отклонения от него будешь изучать когда с этим разберёшься.
> Anaconda + Jupyter
Jupyter это уникальная среда разработки, идеально подходящая для постепенного пердолинга с чем угодно
Anaconda это гигантский дистрибутив питона с настроенной кучей говна доп. модулей
в том числе вместе с Anaconda устанавливается настроенный на работу Jupyter
> PyCharm, VS Code
если дефолтный веб-редактор тебя не устраивает, можешь настроить vs code в качестве редактора
пайчарм тоже можно настроить, но только платную версию, поэтому нахуй
https://code.visualstudio.com/docs/datascience/jupyter-notebooks
> что лучше - Anaconda или PyCharm
Anaconda - это средство установки и управления пакетами, при помощи Anaconda можно поставить jupyter и numpy.
PyCharm - это IDE, редактор кода, он не управляет пакетами.
> надо установить Anaconda и там уже будет Jupyter
Да.
А если сравнивать PyCharm и Jupyter, то гипотетически PyCharm в руках паверюзеров должен уметь больше.
Но 99% материалов для вкатывальщиков будет написано для Jupyter, потому я бы по началу не тратил свои ресурсы на PyCharm.
def funk(var:str)->json:
pass
Если json, например, нет в документе, то такой код будет выводить ошибку. Т.е. такие аннотации надо в кавычках писать? "json"
Бля, спасибо за инфу чел. Тогда другой вопрос:
Если json, например, нет в документе, то такой код будет выводить ошибку. Т.е. такие аннотации надо в кавычках писать? "json"
В каком документе? В питоне жсон представляется строкой, что проверить на это, пиши str после стрелочки.
Чем PyPi от конды отличается?
Разобрался. Думаю ты понимаешь, что в реальности всё сложнее. Добавил возврат объекта в методе post, но столкнулся с проблемой задать id этого объекта в качестве инициального значения одного из полей обновлённой формы. На пике принт в консоль ожидаемый, а страницу рендерит без инициального значения и с ошибками необходимых полей. Ебанутое ооп. В виде функции уже давно бы всё сделал.
Пиздос я тупой. Добавил пустую форму get_context_data и перестало ебать мозги.
Што делать?? помогите пожалуйста
Телебот это модуль, тебе из него нужно достать нужный класс. Наверняка он называется телебот, попробуй поменять импорт на фром телебот импорт телебот.
telebot.telebot(token) наверное. точно не скажу, ибо пишу не на нём бота. Но учитывая, какой ты импорт сделал должно быть как-то так.
Тут импортируй from telebot import (нужное)
хотя лучше просто проверять возвращает ли что словарь с этим ключём, если да, то возвращать ключ, если нет, то None, а не делать перебор через keys()
Как сделать я прекрасно знаю, я искал решение для суперкороткой записи типа .get()
Вообще, если у меня переменная короткая, одна буква, питонически ли будет писать условие в одну строку?
"if n: return n"
Мне кажется это красивее и читаемей
чем
if n:
....return n
Странно, я вот иногда смотрю всякие популярные библиотеки вроде requests и там всю дорогу сверху до низу всё на тернарных выражениях. Кто как не такие сверхпопулярные модули задают моду и формируют стиль для всего комьюнити. Так может это ты рак?
если не парсишь хтмл структурно, то всё норм
Это я знаю. А ещё пеп не рекомендует использовать """ для комментирования, но тем не менее это стандарт.
этот стандарт прописан в пеп257:
https://peps.python.org/pep-0257/
> For consistency, always use """triple double quotes""" around docstrings.
Ну так вот кто в курсе последних течений, может появились какие модели в открытом доступе?
Я если что не мошенник какой, у меня просто есть давнишняя мечта сделать озвучку одной моей любимой актрисы озвучания. Короче мне сугубо для себя нужно и для общего развития.
сделай свой dict и переопредели .get?
бота нужно через bat.ник запускать лучше всего. там и ошибки во всплывающем окне нормально выписываются.
А по телеботу даже не подскажу. иди их документацию читани. Ты кажется начал polling ещё до запуска бота физически.
короче уже невозможно. только завернуть в функцию. но это петушиный поступок
ну и я посмотрел, никакой особой документации по телеботу хорошей реально нет, видимо какая-то мелкая примитивная библиотека. на гитхабе последнее обновление было в 2021, если я ничего не путаю, лол.
Выкидывай этого телебота в помойку, это дохлая библиотека и смотри другие. Тебе по ней даже подсказать никто ничего не сможет, никто не пишет.
Пиздец. Телебот буквально двухкопочный модуль. Даже мая бабуля разобралась бы, а она 20 лет как на том свете. Там синтаксис буквально в одно предлоджение умещается лепи декораторы а всё остальное - обычная приложуха на питоне.
Как и во всех остальных библиотеках, строго говоря, если тебе ничего кроме message_handler не нужно.
При чтении этого языка мне сразу представился гидроцефал, который крипово акает, ыкает и цыкает
Анон, я только сегодня для себя это открыл, отсюда и такие вопросы. Ща буду пытаться вникнуть в это с помощью ютубчика и чего-то простого для начала
Так и есть, строго говоря, другой человек не будет со своим языком лезть на форум, где на нем не общаются. Мы же не заваливаемся в технотематику форчонга и не начинаем отвечать там на русском.
для твоих целей может быть нормально. но если от этого конструктор превращается в говнище - вытащи наружу или назови с подчеркивания
>назови с подчеркивания
А что это дает?
Я пробовал называть - метод так же наследуется и вообще во всем ведет себя как любой другой метод.
просто конвенция такая в pep8. в питоне нет понятия private бай дизайн
переменная или метод с подчеркивания сигнализирует что это что-то "приватное", внутреннее, и трогать это не надо. всякие интеллисенсы в иде их скрывают или отображают внизу списка
для твоего случая есть даже две конвенции:
1) внешняя функция начинающаяся с подчеркивания
> _single_leading_underscore: weak “internal use” indicator. E.g. from M import * does not import objects whose names start with an underscore.
2) манглинг имён, префикснутых двумя подчеркиваниями
> If your class is intended to be subclassed, and you have attributes that you do not want subclasses to use, consider naming them with double leading underscores and no trailing underscores. This invokes Python’s name mangling algorithm, where the name of the class is mangled into the attribute name. This helps avoid attribute name collisions should subclasses inadvertently contain attributes with the same name.
вот тут по слову underscore поищи:
https://peps.python.org/pep-0008/
Ты хуйню написал, чел. Извинись.
Я и сам его могу написать. Я спрашиваю какие есть решения в реквестсе для этого.
> Поясните в двух словах конструкцию на Python (и что она выведет в интерпретаторе):
> map(lambda m: m*m, filter(lambda m: m < 4, [1,4,5,10]))
Хер знает зачем мне это пригодится знать, но судя по вопросам - они их дернули просто из интернета и присылают всем. Что на это можно ответить? Может ли кто-нибудь расписать?
Я не программист, но похоже вся часть. Погуглил чуть и предположу следующее - берем из массива все числа меньше 4 (в нашем случае это только 1), и возводим в квадрат (m*m)
Map похоже ничего не выдает, если работать через print(list()), то мое предположение как будто сходится, если увеличиваю 4 до 11, то вывод - все эти числа, возведенные в квадрат.
Пиши так. Эта конструкция возвращает генератор, который последовательно просматривает элементы списка (1,4,5,10) и если элемент меньше четырех - возвращает его квадрат.
>>23920
Спасибо за оперативный ответ! На удаленном сервере у меня питон2, он выдает квадраты в изначальном виде. На вин машине дома питон3, он выдает про map object. Распишу подробнее обе ситуации им.
>>23916
Что такое генератор в моем случае, можешь в паре слов расписать?
>>23923 (Del)
>>23920
Как обернуть в лист? Подскажите не программисту, и так все мозги сломал об эту конструкцию, не хотел показаться итт тупорылым, который даже не смог в гугл.
А ну да, все правильно я выше написал print(list()).
>Что такое генератор в моем случае
Это такой объект, который выдает значения по запросу итератора. тебя же просили в двух словах, а ты уже углубляешься в итераторы.
Ну я для себя уже. Там количество всратых вопросов и так зашкаливает, но вдруг заострят внимание на этом вопросе.
Еще раз спасибо за ответы!
Да конечно по верхам. Я говорю - изначальная вакансия - сборщик железа, хз зачем там питун нужен.
>Какая конкретно часть тебе не ясна?
обожаю русский язык в онлайн-переписке. задаешь вопрос, а как будто одновременно харкаешь вопрошанту в ебало
Круто, а что на счет переменных. Вот я сейчас называю особо важные переменные, те которые используются в более чем одном обьекте с нижнего подчеркивания, чтобы с первого символа себе сигнализировать - это важная переменная, следи за ней ничтожество, а константы я называю _ВОТТАК что это вообще трогать нельзя.
Всё правильно делаю?
Ещё можно в конце предложения добавлять "Ещё вопросы остались?" как бы ментально передавая сообщение типа "ты - тупой чтоли, чего не понятно?"
>а константы я называю _ВОТТАК что это вообще трогать нельзя
это просигнализирует о том, что это внутренние константы. их не будет импортировать их через импорт звездочкой
с семантики "важных" переменных проиграл. назови уж very_important_number_of_apples, хуле
делай как тебе удобно, а если будешь кому-то код показывать просто поставь литер и жмякай его когда нужно
Константы в пепе большими буквами рекомендуют писать, а то что нижнее подчеркивание это weak internal use indicator это вообще бимба и как-то нелогично.
Во первых нижнее подчеркивание сразу бросается в глаза, во вторых оно редкое и по этой причине выделяется. МАГИЧЕСКИЕ методы начинаются с подчеркиваний, что как бы демонстрирует их важность.
Для меня совершенно логично что нижнее подчеркивание в начале переменной это сигнал о важности.
непопепер это кто именно? у кого не по пепу или кто другим говорит, что у них не по пепу?
просто при всех "безобидных" отклонениях от пепа, андерскоры таки влияют на поведение интерпретатора и линтеров в иде. важная переменная является НЕВИДИМОЙ переменной в пичарме, то есть имеет прямо противоположное значение
ну для себя как хочешь пиши, кто запрещает-то. но жизнь заставит писать по пепу всё равно
>Для меня совершенно логично что нижнее подчеркивание в начале переменной это сигнал о важности.
хм. а для меня андерскоры всегда сигнализируют - "я костыль", "я тут временно", "я метаданные", "меня зарефакторят" и т. д. в любых языках
Ну да, видимо придется, we live in a society. Разные стили письма "для себя" и "на показ" это не практично. А жаль.
Получается все временные переменные, например в циклах, надо называть с нижнего подчеркивания, показывая что они мусор?
Изучаю джангу , и наткнулся на пикрил. Подумав немного пришел к выводу что метод наследуется из models.Model . Но тут вопрос , почему именно choice_set? Так совпало или models создает classname_set метод для каждого класса внутри себя?
P.S В учебнике инфы не нашел, но ссыль оставлю:
https://django.fun/ru/docs/django/4.1/intro/tutorial02/
1 if 'name' in locals как то не очень красиво.
2 try: вообще плохо, потому что в except приходится писать pass а это режет глаз.
Как быть?
Обосрался, признаю
Проект по крипте, нужно анализировать лимитные заявки в стакане на разной глубине. Каждые 15 мин в бд добавляються новые данные и это нужно проанализировать и найти всплески заявок по обьему за сутки.
Я думаю это в сторону ml, но может кто-то имел дело с похожим кейсом и посоветует либы / что почитать
Погугли формулу случайного блуждания (ту, что с квадратным корнем) и найди себе работу настоящую уже.
Может тебе еще и лампочку вкрутить?
Написал решение, но телефон разрядился. не могу отправить.
ну я попрактиковался а он сам виноват что даже не пытался
https://ideone.com/MARkye
Для остальных задач точно такой же код, только разное условие в 8 строке
Для 4 - num % 3 == 0 and num % 10 == 1
Для 6 - not num & (num - 1)
Смотря для кого. Я например только начал учиться, благодаря шестой задаче узнал о бинарных операциях.
>>25136 кун
стаковерфлоу
Майкл Доусон - Программируем на Python
Пэйн - Python для детей и родителей
Бесплатный курс Яндекс-практикума
Труп страуса.
Есть список словарей
a = [{'key1': 'value1'}, {'key2': 'value2'}]
Есть код с функцией, которая должна возвращать значения словарей.
Реализовано с помощью класса, в котором определены три функции. Первая - инит со списком словарей, вторая пробегает по списку, находит соответствия и вызывает третью функцию (геттер), на которую навешен декоратор, преборазовывающий строку в формат utf-8.
Хочу создать библиотеку смайлов с едой для бота.
В принципе всё работает, но мне очень не нравится то, что в декораторе геттера аргументы *args раскладываются на кортеж (self, arg) и соответственно декоратором я указываю срез аргументов, который мне надо вернуть.
Посмотрите код и по возможности ткните, чтобы избавиться от костыля.
http://tpcg.io/_QXAMHE
Спасибо.
Я учусь писать телеграм бота, использую библиотеку aiogram 3 и столкнулся с такой ошибкой. Гуглить не получается, в документации вроде так же написано как и у меня. Прошу помочь анонов, что я сделал не так? Как сделать чтобы работало?
listed_emoji ты сам заполняешь? Если да, то говно сделал. Делаешь обычный словарь со значениями и мозг не ебёшь. Если нет, то все равно говно сделал. Слей свои массивы словарей в один и делай то же самое
Если ты практикуешься писать классы, то убери декоратор и прямо в своей функции сделай decode. Ты вызов одного метода декоратором обернул зачем-то
Если ты практикуешься писать декораторы, то принимай первым аргументом в декораторе self, а вторым остальные аргументы. Но пример такой себе для обучения
Появляется в большинстве онлайн интерпретаторов почему-то, но в некоторых, например https://www.jdoodle.com/python3-programming-online/ - нет...
?
Спасибо, понял!
Кстати, у меня почему-то ideone.com не открывается. Проверил по isitblockedinrussia - вроде должен работать нормально...
Кто ещё сталкивался?
Потому что Россия его не блокировала, а они заблокировали Россию
>>25897
>сам заполняешь
Нет, буду использовать какой-нибудь сиквел и парсить сайт с эмоджи, заполняя поля бд "ключ", "значение". Также хочу прикрутить какое-нибудь йоба-обучение, чтобы, при написании "клубничка" предлагалось что-нибудь навроде "клубника = клубничка?", ответ запоминался и соответственно вызывался смайлик по условию.
>ты практикуешься писать классы
Да.
>ты практикуешься писать декораторы
Да.
Про код: переделал.
Заполнил список тремя элементами: двумя рабочими и одним, который явно вызывает эксепшн. Определил ошибку.
Переработал также сам декоратор, но загвоздка, аноны вот в чём.
В списке словарей listed_emoji словарь должен иметь тип значения именно байты(строки 25, 27), иначе эксепшн. Я понимаю, что можно это было сделать декоратора, наверное, но при любой попытке даже None не возвращается.
>def get_emoji(self, utf_code: str):
>----return bytes(utf_code, 'utf-8').decode('utf-8')
Поэтому я был вынужден сделать костыль-декоратор.
Какие советы? С удовольствием послушаю.
http://tpcg.io/_BGPPBL
Интересный экземпляр инфузории с зайчатками. Продолжаю зоонаблюдение. Вдруг откроет для себя, что пайчарм — это ПО, а не человек.
Ну да.
Вот честно хотел тебе написать, в чём твоя ошибка, но ты туп, непробиваем и вздорчив. Пользы тебе от ответа не будет.
мимо
>>Учись читать ошибки, учи английский язык. У тебя синтаксическая ошибка.
>>Вдруг откроет для себя, что пайчарм — это ПО, а не человек.
Ты не хотел мне подсказать, ты просто тролишь меня
{'name': 'Abu', 'order': 'primates', 'species': 'macaca radiata'}
Как по ним итерировать, если допустим таких json много и они записаны в список?
Допустим, если значения одинаковы для всех словарей внутри списка, то несложно пройтись маппингом
a = [{'name': 'Abu', 'order': 'primates', 'species': 'macaca radiata'}]
names = list(map(lambda x: x['name'], a]
и тд
А, если каждый словарь содержит разные ключи?
Изучать их перед итерацией?
Извени меня анон, я был не прав, а ты был прав. Спасибо что подсказал
pycharm community edition альбо VSCodium з плагінамі.
шиза
>Алсо почему импорт телеграм серым
Чел, ты сначала хотя бы в основах разберись, потом берись за написание ботов.
Декоратор - это сахар. Все, что можно сделать там, реализуемо и в обычной функции
> В списке словарей listed_emoji словарь должен иметь тип значения именно байты(строки 25, 27), иначе эксепшн. Я понимаю, что можно это было сделать декоратора, наверное, но при любой попытке даже None не возвращается.
В функции сначала проверяешь свой ключ как тебе хочется, и в случае ошибки возвращаешь None. Только потом делаешь декодирование
судя по ошибке, класс Updater получил лишний аргумент token
серым потому что импортировано, но в коде не используется
Внимание, вопросы: Куда бы сохранить дата1 в UpdateView? Атрибуты класса затираются при новом открытии страницы, как и extra_context (вообще не предназначенный для таких вещей). Как ещё можно избежать условий гонки, если я какой-то хуёвый способ выбрал?
Еяптп, сделай два таймфилда, у одного параметр автоэдд, у второго автоэдднау. И тогда во второй автоматом будет апдейттайм записываться.
Не понял тебя. Как двумя полями избежать гонки?
>auto_now_add
Это только про создание объекта. В моём случае работа с уже существующими.
>auto_now
Это уже есть, дата сохранения. Проблема в том, что Юзер1 загрузил страничку, пошёл кофе хлебать. Юзер2 тоже открыл, обновил данные. Юзер1 вернулся, не увидел изменений, затёр своим дерьмом испражнения Юзера2.
Сокет не доступен по техническим ограничениям. Не вкурил логику реализации этого на уровне модели. Возможно, я не правильно понимаю поведение методов auto_now и auto_now_add.
Для сокетов есть джанго ченнелс. А так, я не понял, что тебе нужно-то в итоге. Опиши ожидаемые процессы.
>Юзер1 загрузил страничку, пошёл кофе хлебать. Юзер2 тоже открыл, обновил данные.
Нужно, чтобы Юзер1 получил данные, внесённые Юзером2 при попытке сохранения своих правок.
Ну можешь отправлять запрос, в котором помимо введённых данных будут лежать ещё и изначальные данные, полученные при загрузке страницы, сверять данные в бд с отправленными изначальными и на основе этого уже писать свою логику.
И ведь правда, можно добавить транзитное поле формы, получающее дату на момент загрузки страницы и передающее её для сравнения в метод post. Спасибо анончик.
Это надо челу надо либо сокет прикручивать, либо долбить сервак реквестами ежесекундно, что полная хуйня.
Напомните, плиз, чем он отличается от общепринятой арифметики
Там что-то вроде маняокруглений в духе 4.35 - это 4.3, или в духе непонятных округлений при делении из-за особенности обработки float...
Я просто давно не пользовался питоном, и позабыл совсем.
Попытался сейчас нащупать сабж, но то ли они что-то поменяли в последних версиях третьего питона, то ли я не там ищу...
Ну если с округлением все ещё понятно, просто функцию напишу, то как быть с делением?..
Джва словаря в обоих ключи - строка.
Как соединить эти словаря и в один, не меняя два предыдущих и при этом в ключи одного из них добавить пару символов.
И всё это надо сделать в одну строку!11
У меня только в две строки получается и та довольно длинная.
new_dict = dict(old_dict_1)
new_dict.update(map(lambda p: ('addstr '+p[0], p[1]), old_dict_2.items()))
Как в одну сделать?!
https://www.codewars.com/kata/54521e9ec8e60bc4de000d6c/train/python
Решаю двумя циклами (и то ответ кажется не правильный) получаю timeout (слишком медленно)
https://paste.ofcode.org/QC8ktVvDtNCusQq4BEMUhK
просто идёшь по списку и суммируешь всё и проверяя больше ли новое значение максимального имеющегося или нет, если да, то заменяешь max_sum новым значением.
Если упало меньш 0, то просто обнуляешь новую сумму.
Наипростейшее задание для пятой каты с которым сюда постоянно приходят
Граница пока число не падет меньше нуля. С этого момента типа отсекаешь этот участок, ставишь значение снова на ноль, будь там -1 или -100 и снова начинаешь подсчёт.
Ничего подобного. Единственный параметр, который ест round, это сколько цифор после точки ты хочешь.
пчел, за 200к можно обмазаться турецкими кредитками с платисру и выкупить пол юдеми
Ты ещё ждать три недели будешь?
Я за это время на Степике изучил язык с нуля до приемлемого уровня решения кучи задач (с этого же степика).
Ну а ты получишь пенис на нос.
https://stepik.org/course/100707/syllabus
Ну и где твой годный курс?
Вот и я тоже так думаю!
>>28783
Но зачем мне юдеми? Юдеми это просто видеокурсы, а тут обратная связь, кураторы, менторинг, тестовые собесы, практика на реальном проекте, социализация в конце концов.
>>28833
Степик уже прошел, этот курс предполагает, что базу питона ты уже знаешь, начинаешь сразу с джанго. Три недели буду читать Лутца, Доусона и Мэтиза.
>>28834
Хуйня, видеокурсы априори говно.
Поколение Python (начинающий + продвинутый) топ. Единственный минус - вообще нет ООП.
курсы не нужны. просто читай документацию с сайта питона.
Ебало завали свинья
Зачем тебе сетевик для этого?... Тебе нужен системщик.
>У Джанго отличная документация
Ну-у... Сколько ни читал, один вопрос так и не получил ответа.
В джанге создаётся проект, а внутри проекта - приложения, но зачем так сделано и как разделять приложения внутри проекта - хуй проссышь. Я лично считаю, что единственный смысл разделять приложения это чтобы они запускались в отдельных контейнерах как микросервисы, но и проекты тогда будут разные.
В документации дохуя всего, оно подробное и т.п.
Но ни там, ни в примерах в интернетах я так и не нашёл разъяснений.
Вот, кстати, неплохая штука. Там не то чтобы всё необходимое, но вкатиться можно прям с нуля.
https://tutorial.djangogirls.org/ru/
В то, что интересно. Разработка (как и большая часть IT) это такая хуйня, в которой тебе должно быть интересно, это 30% успеха. Ещё 50% это постоянное, ПОСТОЯННОЕ, БЛДЖАД, саморазвитие. Оставшиеся 20% - предрасположенность.
Ну и есть одно отдельное требование, оно, так сказать, булево - либо 1, либо 0 и на этот параметр нужно умножать те проценты. Умение доводить начатое до конца даже если заебало.
Это я всё к чему... Если тебе ничего не интересно, то, возможно, программирование это не твоё.
Нужен огонёк в глазах, нужно, чтобы тебе хотелось что-то реализовать.
ну хуй знает
есть авторские курсы на курсере, юдеми, степике с минимум воды. а срань за 200к будет состоять на 90% из ненужного материала
Что-то типа object explorer в вижуал студии, только графическое. Есть такое?
>Нужен огонёк в глазах, нужно, чтобы тебе хотелось что-то реализовать.
Работает только для джунов, потом приходит понимание понимание зачем ты все это делаешь
как делать приложения на фреймворках это только опыт + попутное изучение других проектов.
пока изучаешь, то нифига непонятно, как начинаешь свой проект делать, то начинаешь доходить
Мои 1\5 нейрона смогли догадаться
И вот я джва года этой хуйней страдал и угорал, а теперь оказалось что всё это время я занимался ФУНКЦИОНАЛЬНЫМ программированием, потому что считал классы говном без задач.
Пол года назад дай думаю как все стану, посмотрю что это за ООП ваше хваленое.
Теперь без классов и структуры данных не могу ничего кодить, хочется ещё и всё старое переделать по-новому.
Всё таки хоть ООП это изначально концепция для бизнеса, но таки человеческий разум мыслит абстрактно-объектно. Гораздо проще продумывать логику таким образом.
Из минусов - код в ООП разсирается в джва раза, то что я раньше бы написал на 200 строк теперь занимает 500. ну и эти сраные self и cls везде жудко бесят. Только места занимают и код от них пестрит, можно же было их хотя бы в одну букву сделать.
Держу в курсе.
Ты уверен, что то, чем ты занимался, это функциональное, а не процедурное программирование?
Значит ты в пейчарме запустил интерпретатор не через это виртуально окружение. Тоже такие проблемы было. Создай ещё файл питона обычный и когда открываешь проект через питон смотри внимательнее что он делает, а то он снова создаёт вирт. окружение или использует глобальный интерпретатор
Залогируй ошибки. except: return False это пизда, у тебя даже KeyboardInterrupt замаскируется.
for e in list[1:]
Это пересобирает весь список по срезу перед итерацией или итератор по уму как-то скипает\стартует ?
А ты точно не обосрался?
Вот тут пишут с пруфами, что итерация по списку даже не не O(n), а O(m) где m размер среза. Т.е. ничего не пересобирается, итератор просто возвращает элементы в количестве, равном срезу.
https://stackoverflow.com/questions/13203601/big-o-of-list-slicing
Там же есть ссылка на исходник. Создается новый массив, в который копируются ссылки на объекты из индексов слайса.
Я сначала тоже хотел ему поссать на голову, потому что не верил что в 2023 слайсы векторов тупо копируют контент.
Но погуглил и да, питон таки именно такое говнище, слайс листа сразу аллоцирует новый а не создаёт COW обёртку.
https://wiki.python.org/moin/TimeComplexity
> не создаёт COW обёртку
Будет много разных типов обёрток, и gc не вычистит основной list если останется только обёртка.
https://mail.python.org/pipermail/python-dev/2008-May/079692.html
Опять школьники с энурезом считают что они умнее дидов и что в 2023 что-то там такое должно быть, что они видели в другом языке.
Оригинал не пересобирается, только читается. Тебе нужно выделить память и скопировать k элементов. Не нужно оригинал пересобирать.
>скопировать k элементов
Выполнил этот код:
data = ['1','2','3']
print(id(data[1]), id(data[2]))
for i in data[1:]:
....print (id(i))
Ссылки на объекты одинаковые т.е. никакой новой памяти и копирования не делается.
Что происходит?! Это я чего-то не понимаю или вы ?!
Лист это массив со списком ссылок на объекты питоновские. При взятии слайса эти самые ссылки копируются в новый создаваемый массив, потому они и одинаковые. Что не ясно?
Когда ты слайсишь то точно известно количество элементов в слайсе и место где лежат элементы слайса в оригинальном листе.
Выделяется сразу нужное количество памяти и копируются только нужные элементы.
>>29902
>Опять школьники с энурезом считают что они умнее дидов и что в 2023 что-то там такое должно быть, что они видели в другом языке.
О да, квалификацию дидов-основателей хорошо видно по наличию GIL в языке и по наличию двух несовместимых версий языка. Пиздец авторитеты.
Еще бы мнение дидов было подкреплено статистикой о том насколько часто слайс лист используется только для чтения и умирает сразу по выходу из цикла, как у анона задавшего оригинальный вопрос.
Дидам было банально сложно написать нормальные контейнеры.
>>29918
>Ссылки на объекты одинаковые
Конечно одинаковые. В питоне нет велью типов.
>никакой новой памяти и копирования не делается.
В списке лежат ссылки на объекты, они и копируются в новую память.
Не рвись, школьник. После дюжины попыток переизобрести мир, вернёшься и будешь спокойно писать на питоне дальше. И на GIL будет поебать, и на допотопную двойку и луддитов которые на ней до сих пор пишут, и на копирование слайса. Дидам ничего не сложно написать, сложно решить как будет лучше для всех, в этом конкретном языке.
>школьник
Это твой единственный аргумент? Мне кажется рвёшься именно ты, если переход на личности случился в первом же ответе.
>После дюжины попыток переизобрести мир, вернёшься и будешь спокойно писать на питоне дальше.
Зачем мне переизобретать что-то в пистоне? Это не моя работа. Буду спокойно писать на нём единственное для чего годен пистон - скрипты автоматизации на один экран кода максимум.
На обоссывателей и любителей покормить говном похуй. Инструменты для ускорения есть, если не нравится - пиши на с/с++/расте/жаве/жиесе. И на последующий вопрос "а нахуя тогда пистон нужен" такой же ответ - тебя никто не заставляет на нём писать, пиши на чём хочешь. И вообще надо выбирать язык под задачи, а не наоборот.
Пока есть задачи, которые можно решить на питоне, и за решение неплохо платят, питон будет нужен и вряд ли в ближайшие 5 лет что-то поменяется.
ЧСВ поубавь, и всё нормально будет. Диды очень много годноты сделали, саму процедуру с PEP много кто перенял.
> единственное для чего годен пистон - скрипты автоматизации
Примерно с таким намерением питон и создавался, максимально лёгкий для человека язык. Оптимизации это здорово, но пока никто ещё не преодолел дихотомию быстро для программиста/быстро для машины. Кое-как там новая волна компилируемых языков двигается, уже можно в расте писать .map .filter без потерь производительности, но пока ещё кардинальных изменений нет.
Наткнулся в учебнике по информатике. Оно убирает количество точек после запятой, оставляя 2.
Что вот это
>"{:10.2f}
это за дичь, и где найти документацию?
Хочу отредактировать Gtk программу на пихтоне. Но возникла проблема, что подсказки и автодополнения для библиотеки pygobject не работают. Установил pygobject-stubs. Думал проблема c nvim пробовал pyright, jedi-language-server, python-lsp-server, sourcery, потом установил vs code и pycharm - та же хуйня.
Как заставить автодополнение pygobject работать?
Надо чтобы .pyi стабы поддерживались лангсервером. И проверь заодно что они установились в site-packages/gi/repository. Или поищи через find где они там установились.
Эта хуйня установилсь в site-packages/gi-stubs/repository. Переименовал в site-packages/gi/repository, в pycharm заработало. Осталось зарбраться почему в nvim не работает.
Ну вот это меня и смутило, что там обычный пакадж в gi, с --init--.py, не namespaced package, которые задизайнены так, чтобы несколько пакетов могли насрать в одно пространство имён. Думал там через установщик это как-то решается, но видимо нет. Возможно некоторые IDE ищут соседний пакадж %-stubs. Я вообще живу без lang server, заебался их настраивать по каждому поводу.
Есть ебанашки, которые ВСЁ пишут в ооп. Возможно, выходцы из каких-то жаб или шарпов.
В стдлибе есть сокеты. Ну и в том же асинкио, если тебе йобу подавай.
Хотя поломанное оглавление как бы как бы намекае...
Да да. Афтору было влом фиксить функциональный говнокод, а вот если бы менюшка была бы на принципах SOLID сделана, нужно было бы в одно месте повиксить, и все бы заработало аки часы!
>single responsibility principle
У меня от тебя циклический импорт. S - это методология хорошего написания ООП кода, а не обоснование использование ООП-подхода.
ну так видео где ООП как раз про ето
>Нахуя пишут микроприложения в ООП-стиле
>где на каждый класс приходится по одному-два метода?
>single responsibility principle
не пиши, подумой
Пик тоталли релейтед.
Использовалась дефолтная IDE пистона - IDLE. В онлайн интерпретаторах та же фигня, даже хуже.
Это не поведение питона, это поведение конкретного шелла.
При том для управляющего символа под названием "разрыв страницы" поведение неадекватное. Не пользуйся таким.
Еще раз. S - это прием из ООП. Ты оправдываешь использование ООП тем, что тебе надо применить прием из ООП. "Библия истинна, потому что так написано в Библии".
На что я могу парировать, что в ФП также есть принцип четкой сигнатуры у функции, что сродни S из солида.
Проверил на винде 7 с cpython, проверил на винде 10 с дефолтным питоновским шеллом с оффсайта - один результат...
Что за среда\шелл у тебя?
думаю вот, как пофиксить у себя это, ну не перекомпилляцией же? К этому меня жизнь не готовила...
Но ведь у меня не стандартный виндовый терминал, а вот эта белая залупа из стандартного пакета.
Как бы это на винде-то пофиксить?
Если у тебя уже на этом этапе начинается какая-то хуерга, я бы тебе посоветовал тупо поставить прыщи и кодить под ними. Я сейчас не троллю, в линуксе реально гораздо удобнее кодить по одной простой причине - ты там тупо не встретишь никакую подобную дичь. Там все легче, начиная от настройки IDE и заканчивая докеризацией приложения.
Двачую, когда пересаживался на линупс, сразу отпали вопросы типа: а это что делает, а это нахуя вообще нужно и т. д. И сразу вся неразбериха в системе закончилась.
> Что за среда\шелл у тебя?
Самый дефолтный bash в терминале гнома.
> как пофиксить
Не надо это фиксить. Это недокументированная легаси фича с непредсказуемым поведением. Не надо решать проблемы опираясь на неё. Решай по другому.
Тупорылые задачи на освоение операторов вывода и ввода в школьном учебнике помогаю одному челу. Решил что \n\t НИКРАСИВА.
>>32103
Да я знаю, но тут буквально на год программа пикрил, чо тут докеризировать-то? Из странного хочу разобраться с jupiter, т.к. суки не дают пользоваться ideone без VPN
> Не надо это фиксить. Это недокументированная легаси фича с непредсказуемым поведением. Не надо решать проблемы опираясь на неё. Решай по другому.
Ыде оно легаси? Это в доках пистона 3
>тут буквально на год программа пикрил, чо тут докеризировать-то?
Тут варианта два - либо ты ходишь додрочиться до уровня скрипт кидди, и тогда вопросов нет. Либо ты просто не поставил себе цели дальше и не осознаешь, что ждет тебя впереди.
Допустим, у меня есть функция, которая возвращает три значения. У меня есть варик либо вернуть их туплом:
return res1, res2, res3
либо вернуть список:
return [res1, res2, res3]
А при вызове функции я просто распаковываю ее результат что в случае тупла, что в случае списка:
res1, res2, res3 = function()
В типе возвращаемого объекта и его размере, но при распаковке никакой, кроме лишних скобок.
Он позволяет тонко управлять позиционированием текста без обращению к управляющим символам.
>для листа я могу написать просто list[str], а для тупла приходится писать tuple[str, str, str]
Потому что в теории набор элементов в списке является гомогенным, т.е. одного типа, а для кортежа разного.
>набор элементов в списке является гомогенным, т.е. одного типа
Так это вроде массив, который из теории программирования. А список именно что может содержать разные типы данных.
Опача, реально. Спасибо!
А почему нет? Если привык писать на ООП, то какая разница, большая или маленькая у тебя прилюжуха
Красивое... Спасибо!
как я сам не догадался
А литерал в такую ф-строку можно запихать, или только переменную?
https://docs.python.org/3/library/stdtypes.html
>Lists are mutable sequences, typically used to store collections of homogeneous items (where the precise degree of similarity will vary by application).
>Tuples are immutable sequences, typically used to store collections of heterogeneous data (such as the 2-tuples produced by the enumerate() built-in). Tuples are also used for cases where an immutable sequence of homogeneous data is needed (such as allowing storage in a set or dict instance).
Ну так список это не массив, я лишь цитирую оф. доку.
Долго ковырялся, оказалось литералы тоже можно пихать в фигурные скобки f-string, но нужны другие кавычки. (в документации нигде нет)
А потом что-то пошёл почитать, как туда ньюйлайны добавляются, и тут уже проиграл просто в голос https://towardsdatascience.com/how-to-add-new-line-in-python-f-strings-7b4ccc605f4a
>Коробит, что для листа я могу написать просто list[str], а для тупла приходится писать tuple[str, str, str].
тупли чаще всего используются как анонимные типы с известной структурой данных, а не как массивы
поэтому у туплей особый синтаксис специально для описания структур. а для массивов есть костыль tuple[str, ...]
> Что странно, ведь в списке тоже могут быть разные типы данных.
тогда это не аннотируется как list[str]
это аннотируется как: list[str | int | Pook | None]
Тут конечно оч нелогично, но похуй хочу принцип понять
def func1(x):
r = [x]
with multiprocessing.Pool() as pool:
pool.imap_unordered(func2,r)
Тебе надо просто в другой процесс отправить задачу?
Спасибо Анончик!
Навошта перапісваць? multiprocessing.Pool мусіць працаваць у вакенцах таксама як у лінуксе. Аднак, у галоўным файле мае быць іспыт, бо вакенцы выконваюць усю праграму спачатку для кожнай плыні:
if __name__ == "__main__":
...
https://www.online-python.com/vJU8xR2Ewz
Шура!
Бамп
>Работает только для джунов, потом приходит понимание понимание зачем ты все это делаешь
По себе знаю, что огонёк может гореть десятилетиями. IT это потрясающе, это интересно, это феноменально. Главное не стоять на месте, а погружаться глубже и расти выше. Проблемы начинаются, если закисаешь в одном болоте, но тогда нужно срочно выбираться.
Известно, что ивент луп содержит слабые ссылки на таски, и поэтому их надо сохранять отдельно, иначе их сборщик мусора соберёт до завершения. Вопрос: а что в этом случае произойдёт/может произойти? Всё упадёт, всё зависнет, всё тихо будет проигнорировано и выдаст хуиту вместо результата?
https://pastebin.com/trFT2e4Y
Ну, заебись когда ты знаешь все библиотеки, методы и параметры. Я же себя слепым щенком ощущаю, еще и документация на сайте Gtk говно полное. А нет никаких плагинов для nvim которые сами эти stubs генерируют по библиотекмам, что ты импортировал?
есть
Хочу сократить количество операций, путём уменьшения числа сравнений, схематично на пике.
Какими инструментами подобное делается?
на ум приходит только go to через всякие библиотеки
Зачем?
Ну то есть тебе так и так получать и проверять все значения. При этом если сравнение идёт через логическое "И", то по нахождению первого False оно сразу вернёт False.
Толькі сродкамі аперацыйнай сістэмы, якія можаш выклікаць праз os.system()
Не, я не знаю, прост хорошо освоил поиск по проекту, остальное смотрю в доках. Что-то с этим нужно сделать чтобы делать всё быстрее, но мне лень. Gtk сложный, да, там только через туторы и эксперименты всё получается.
py -0
-3.10-64
-3.7-64
-2.7-32
py --version
Python 3.10.6
Шо надо Git написать, чтоб он на 3.7-64 переключился?
>Шо надо Git написать, чтоб он на 3.7-64 переключился?
GIT сам пользуется питоном? Вот уж вряд ли.
Вообще, какая версия отработает как правило определяется симлинками как на пике. То есть тебе надо симлинк python3 -> python3.1 удалить и создать python3 -> python3.7. В редких случаях это, правда, может выйти боком.
Вы видите копию треда, сохраненную 14 мая 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.