Задать вопрос
Ответы пользователя по тегу Python
  • Как спарсить svg картинки?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Нужно приводить полный стек трейс ошибки, а не только её текст.
    Вам нужно разбить imglink по вопросительному знаку и взять только левую часть.
    Ответ написан
    Комментировать
  • Почему программа не записывает данные в CSV файл?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваш код записывает данные в файл, просто вы выбрали символ-разделитель зачем-то именно этот.
    Возможно ваш эксель его не понимает как таковой.

    63727c6f21376150389635.png
    Ответ написан
    Комментировать
  • Как работать с конструкцией try except?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сделайте ещё один вложенный цикл для попыток обработки каждого из элементов. Можно при успешном выполнении без ошибок выходить из внутреннего цикла досрочно, а при ошибке не выходить досрочно и цикл будет повторять попытки.
    Если бы у вас было побольше опыта программирования на питоне, я бы посоветовал бы вам вынести обработку одного элемента в отдельную функцию, а еще посоветовал бы поупражняться в написании декоратора `retry`, который будет оборачивать любую функцию в новую функцию и в случае ошибки повторять её запуск пока не будет исчерпан лимит попыток.
    По-моему такой пример или упражнение, кстати, и было в одной из книг Лутца. Но вам подойдёт практически любая, где рассматриваются основы языка.
    Ответ написан
    2 комментария
  • Можно ли написать OS на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Сейчас включу максимального зануду и скажу, что не всё так уж однозначно.
    Вопрос в том, что называть языком. Если языком считать синтаксис, то вполне можно написать транспилер, который будет транслировать питоновский код в сишный код, например, а его уже в машинный.
    ОС, написанная на Си - это скомпилированный машинный код - результат работы компилятора над исходником на языке Си. Да, стандартный компилятор Си может откомпилировать машинный код, а потом стандартный сборщик превратит его в набор файлов операционной системы.
    Стандартный транслятор питона в его байткод и интерпретатор этого байткода не смогут работать самостоятельно без операционной системы, но разве в условии вопроса было сказано про стандартный интерпретатор?

    В общем, писать ОС на питоне - очень странная идея, но и микроскопом теоретически можно попробовать "разминировать" противопехотную мину, особенно если привязать его к длинной штанге и снабдить зарядом взрывчатки, однако это чревато большими и бессмысленными страданиями.

    Простой ответ - нет, питон не предназначен для написания ОС, но использовать его для разработки большОго количества элементов ОС можно.
    Ответ написан
    2 комментария
  • Почему при обращении к @classmethod возникает NameError: name 'cls' is not defined?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    cls и self - это никакие не префиксы, а обычные перемнные. Они поступают в виде первого аргумента метода.
    Вы даже назвать их можете по-другому и ничего не поломается.
    Попробуйте, всё-таки, почитать книжку по питону по порядку, а не действовать методом тыка и не гадать на кофейной гуще.
    В функции zas у вас нет переменной cls, отсюда и NameError.
    Получить класс объекта можно с помощью функции type: type(self).infield()

    Ну и да, судя по всему, вы не поняли до конца для чего нужны классовые методы, а для чего обычные.
    Ктсати, Test().zas() отработает вполне корректно, не смотря на то, что это классовый метод, а вызывается он у инстанса. Просто классовому методу будет передан в аргумент класс, а не инстанс.

    Серёьзно. Бросайте пытаться разбираться в этом методом тыка и вопросов на QnA. Там дальше наследование, полиморфизм, множественное наследование, метаклассы... Вы всех задолбаете и будете этим заниматься целую вечность
    Ответ написан
    1 комментарий
  • Случайно число от 0 до 5 и присвоить значение переменным?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Само собой не работает. Сплошные синтаксические ошибки в коде, отступов нет, некорректная работа с типами.
    Надо читать книжку по питону для чайников с самого начала. Это единственный путь.
    Ответ написан
    Комментировать
  • Почему циклы не работают?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    С чего вы взяли, что i не меняется? То, что у вас не печатается ничего с i>0 - это не значит, что внешний цикл не работает. Это значит, что принт больше не выполняется.
    Вторая подсказка: у вас внутренний цикл по z, он один раз добегает до конца, но что дальше? Где вы сбрасываете z?
    Ответ написан
  • Telebot owm. Бот видит только 1 команду и опирается только на нее. Есть варианты решить данную проблему?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Знаете почему никто не хочет отвечать на ваш вопрос?
    Тут несколько причин. Сперва вы запостили код без форматирования. Вы не могли не заметить этого, но надолго оставили вопрос как есть. Это выглядит как неуважение к тем, кто мог бы ответить.
    Кроме того, прочитайте как вы сформулировали свой вопрос. Пришлось вникать, перечитывать текст несколько раз и и читать весь код, чтобы понять что вам надо. Неужели нельзя проще изложить?
    Третья причина - это отсутствие попытки решить проблему самостоятельно. Такое ощущение, что вы, как тут кто-то предположил уже, посмотрели какой-то видос и срисовали с ютуба кусочки кода, а они сходу не заработали. К черту попытки самостоятельно разобраться, да? Зачем нам отступать немного назад и пытаться разобраться сперва с базовыми вещами и более простыми примерами, верно? Вам надо сразу продуктъ написать! Сразу готовенькое.

    Давайте я вам дам, простите, непрошенный, совет как впредь решать такие проблемы.
    Упрощайте. Удалите из кода всё лишнее, оставьте минимум, который должен работать и если он не работает, то вы что-то не поняли на более ранних стадиях изучения предмета. Нет смысла разбираться в сложном, когда вы еще не понимаете простого. Вы удаляете ВСЁ лишнее: лишние импорты, лишние команды, лишние хендлеры. Оставляете базовый простой пример и пробуете. Не работает? Ищете мануал по своей библиотеке и там наверняка есть в точности такой пример, ведь он максимально простой. Сравните его со своим. В чем отличие?
    Думаю на этом этапе уже станет ясно.

    К примеру в вашем коде видно, что срабатывает только один хендлер на любой текст, но в коде именно так все и задекларировано. Любой текст - делаем приветствие. Если сообщение обработано, библиотека не задействует прочие хендлеры, даже если они тоже подходят.

    Но, повторюсь. Проблема глубже. Она не в хендлерах и не в декораторах, а в том, что надо сперва разбираться с простыми примерами, а потом переходить к более сложным. Учитесь читать документацию. Ролики в ютубе - плохой учитель. Успехов.
    Ответ написан
  • Как сделать такой перебор через itertools на Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Можно определить функцию инкремента для вашего "числа" с заданным набором "цифр" (алфавитом).
    Например так:
    def inc(s, ab='123abc'):
        if not s:
            return ''
        x = (ab.index(s[-1]) + 1) % len(ab)
        return (s[:-1] if x else inc(s[:-1])) + ab[x]

    Теперь вы для любой строки с заданным алфавитом можете вычислить следующую в алфавитном порядке.
    Для оптимизации скорости генерации лучше представить алфавит в виде словаря, а не строки:
    alphabet_dict = dict(enumerate(alphabet_string))
    alphabet_dict.update(zip(alphabet_string, range(len(alphabet_string))))

    Тогда в функции надо ab.index(...) заменить на ab[...].
    Теперь поиск индекса символа будет происходить за O(1).
    Ответ написан
    3 комментария
  • Как реализовать честную игру в Угадай число?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваше решение волне валидно. Разве что некоторым игрокам придётся объяснять что такое md5 и рассказывать про сложность нахождения коллизий.
    Опять же, ушлый игрок сможет предположить, что кто-нибудь ввалил огромные мощности на поиск коллизий, а потом ему подсовывает нужную соль под ответ. Тем более не обяательно чтобы конкретное исло было в result, а достстоноч, чтобы там было не одно из выбранных 5.
    Короче, для надёжности я бы вам посоветовал добавить помимо своей соли, еще и соль, выбранную игроком. Ведь какая разница от чего считать md5, если вы играете по-честному. А вот найти коллизии при наличии гарантированно рандомной (или просто не подготовленной соли), да еще и так быстро (в рамках игры) - это куда сложнее.
    Ответ написан
    Комментировать
  • Почему не работает переменная которая прошла через функцию?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    И не должно. начните, действительно с учебника, а не сгугла, потому что это основы и самая база. Если вы это не прочитали в учебнике, то вам в питоне больше елать нечего. Просто займитесь чем-то другим. Нагуглить это вы не сможете.
    Это как спрашивать как на калькуляторе установить рингтон.
    Ответ написан
    Комментировать
  • Как отслеживать изменение даты файла с сайта?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Рекомендую сделать скрипт, который будет получать со странички нужные даты и сравнивать с теми, что сохранены в локальном файле, например текстовом, или json, или, даже, csv.
    Если дата соответствующего файла изменилась, скрипт качает новое расписание сохраняет новые даты в файл./
    Если не изменилась - делать ничего не надо.
    Этот скрипт можно запускать с любой нужной частотой, например, с помощью cron или любого другого системного планировщика.
    Ответ написан
    Комментировать
  • Как завершить выполнение первой функции из второй и наоборот?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    В питоне код может работать одновременно только в разных процессах. В рамах одного процесса треды не позволяют работать коду одновременно. Скорее всего у вас есть в функции место, где вызывается какой-то sleep или обращение к внешним библиотекам, на время выполнения которых управление переключается.
    Это значит, что вы можете мониторите некое условие в цикле и ставить какой-то глобальный флаг, а значение этого флага отслеживать в цикле в другом треде.
    Для таких целей есть такая структура данных, как семафор.
    Однако, судя по вашему описанию задачи, у вас беда с архитектурой вашего решения. Приведите ваш код более етально и вам тут дудут советы как более правильно обработать ваши события, как более окрректно с архитектурной точки зрения построить ваш код.
    Ответ написан
    1 комментарий
  • Как реализовать?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Прочитайте про концепцию "конечного автомата". В вашем автомате будет столько отдельных курсоров, сколько пользователей общается с ботом. Нужно для каждого пользователя хранить отдельный курсор в графе состояний. В зависимости от пользователя выбираем извлекаем нужный курсор и в зависимости от его положения интерпретируем сообщение.
    Цикл отдельный запускать сожиданием ответа для одного польователя - это не правильно.
    Ответ написан
    2 комментария
  • Как из txt файла вытащить строки с одинаковым началом?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Подсказка: отсортировать.
    Ответ написан
  • Как логичнее дописывать название файла из вывода?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ох... сударь, вы творите какую-то дичь!
    Зачем присвивать дескриптор открытого на запись файла в sys.stdout?
    Вы пытаетесь передавать некие данные из скриптов через имя пустого файла в файловой системе?
    Тот ещё изврат, конечно.
    А как вы эти скрипты запускаете? В разнобой в произвольном порядке? Что мешает содержимое трёх скриптов забрать в три отдельные функции, а из их результатов собрать строку, которая послужит именем нового файла? Какой ещё рефакторинг? Да и в чем проблема держать скрипты в отдельных файлах, но импортировать их в одном и в нем же создавать нужный сигнальный файл?
    То, что пытаетесь сделать вы, выглядит как страшный костыль, а по факту костылём и является.

    Почему конкатениря строку вы не пользуетесь форматными строками?
    Вместо нечитаемого:
    "#"+(b)+tail+str(scale)+".txt"
    будет элегантное:
    f"#{b}{tail}{scale}.txt"
    Ответ написан
    Комментировать
  • Как правильно сделать запрос?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Куки и заголовки нуно указать как в браузере.
    Ответ написан
  • Код почему то запускаеться 5 раз хотя такого не должно быть в чем может быть проблема?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    А что вас удивляет? Все работает как написано.
    SQL-запрос вернул 5 записей, вы перебираете их циклом, в котором при первом проходе выполняется некий код с инвентарем, а на остальных четырех проходах i=1 и срабатывает негативная ветка, где печатается символ нуля.
    Судя по тому, как вы неправильно пользуетесь шаблонной строкой и какой вопрос задаете, вы далеки от программирования. Надо подучиться питну и основам алгоритмизации.
    А еще так подставлять параметры в запрос опасно, нужно передавать их отдельно в execute.
    Ответ написан
    1 комментарий
  • Почему удаляются данные из переменной?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Почему после создания словаря(row_sort)..

    В коде нет переменной row_sort. Читайте внимательно.

    .. в переменной row пусто?

    В коде нет переменной row. Читайте внимательно.

    Что вы хотите сделать этой строчкой? print(*rows)
    В перемнную rows кладётся CSV-ридер:
    rows = csv.DictReader(file_in, delimiter=",")
    Это объект-генератор, который выдаёт строки из CSV-файла. Но вы все строки из него достали вот в этой строке кода:
    rows_sort = {i["email"].split("@")[1]: 0 for i in rows}

    Это значит, что этот генератор теперь пуст и при попытке превратить его в кортеж (то есть распаковать звёздочкой в аргументы функции), он возвратит пустой кортеж, ведь генератор останавливает итерацию сразу, файл вычитан полностью.
    Ответ написан
    2 комментария
  • После переименования файлов на Python удаляются файлы, как починить?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Они не удаляются, они все по очереди переименовываются в одно и то же имя.
    Значение перемнной now определно один раз перед циклом и не меняется в цикле.
    Вычисляйте новое имя тоже в цикле.
    И да, всё равно это плохая идея так переименовывать.
    Вы зачем-то много раз получаете текущее время для получения каждой компоненты времени.
    Вы не проверяете коллизии там, где они могут быть.
    Ну и да, используйте уже встроенный pathlib, сколько можно шевелить это дерьмо мамонта?
    Ответ написан
    Комментировать