Задать вопрос
  • Telegram bot, отправка текущего времени в сообщении?

    Vindicar
    @Vindicar
    RTFM!
    Модуль datetime в помощь. В частности, класс datetime.datetime, его методы now() и strftime().
    Только нужно иметь ввиду, что этот класс вернёт текущее время по часам того компа, на котором запущен бот, а не по часам клиента.
    Ответ написан
    Комментировать
  • Способ безопасного выполнения sql - запросов от пользователей?

    Vindicar
    @Vindicar
    RTFM!
    будет ли такой подход разумным с точки зрения производительности

    Он будет разумным с точки зрения безопасности и лёгкости исправления ошибок пользователя.
    Производительность, имхо, должна быть на втором месте в таких вещах.
    Ответ написан
    Комментировать
  • Как сделать клон Ubuntu в VirtualBox?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Долго и нудно - программа дублирования разделов, акронис или что-то типа того
    Побыстрее, но требует некоторого наличия мозгов - dump/restore. На целевой системе грузится livedvd, вручную создаются нужные разделы, восстановление можно делать либо с флэшки, либо вообще по сети.
    Ответ написан
    Комментировать
  • TypeError: cannot unpack non-iterable NoneType object как исправить?

    Vindicar
    @Vindicar
    RTFM!
    У тебя вполне возможно, что в four_squares() не отработает ни один return. В этом случае функция неявно вернёт None. А распаковать None как кортеж нельзя.
    Хотя бы сделай так:
    result = four_squares(i)
    if result is not None:
        a, b, c, d = result
        ...  # тут работаешь с a,b,c,d
    else:
        ...  # а тут решаешь, что делать, если функция вернула None
    Ответ написан
    3 комментария
  • Как работать с БД из другого класса?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Из приведённого кода не понятно для чего вообще выделен класс Sql.
    Фактически вы используете только один метод этого класса, а содержимое конструктора можно разместить в том же методе.
    Бессмысленно и беспощадно.
    Самое правильное - это делать всё как можно проще.
    Вот два очень полезных принципа в разработке:
    - https://ru.wikipedia.org/wiki/KISS_(принцип)
    - https://ru.wikipedia.org/wiki/Бритва_Оккама

    В приведённом вами куске кода не нужен класс sql, достаточно сделать всё внутри одной функции, ведь вы не используете созданный обьект больше никак.
    Другой вопрос, если вам нужно делать много запросов в рамках одного подключения к БД. На подключение тратяся некоторые накладные расходы по времени и трафику, иногда логично вынести подключение и хранить его в выделенном персистентном состоянии, которое будет создано один раз и переиспольовано для множества запросов. В этом случае закрывать коннект после запроса нельзя.
    Прочитайте вот: https://pavel-karateev.gitbook.io/intermediate-pyt...
    Обычно коннект к БД уже является менеджером контекста. Для чего вы делаете вот эту бессмысленную обёртку вокруг - не ясно.
    В соответствии с хоошим стилем прогаммирования нужно, чтобы действие любой функции можно было охарактеризовать простой короткой фразой без союзов, без "и" и "или", без "если".
    Иначе эту функцию стоило бы разбить на более мелкие и простые функции.
    Вот ознакомьтесь с концепцией чистой функции: https://dvmn.org/encyclopedia/clean_code/decomposi...
    Ответ написан
    2 комментария
  • Как записать в python значение в txt, если этого значения в нём нет?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Нужно просто включить хоть капельку логики.
    Допустим, есть файл вида и нужный id - 315:
    765
    454
    315

    Приведенный код проверяет наличие id в файле и, что куда более важно, выполняет запись, построчно:
    В первой строке есть нужный id? Нет? -Записываем.
    Во второй есть? Что, тоже нет? Записываем.
    В третьей есть? Ну так и быть - пропустим.

    Решением "в лоб" будет изменение кода так, чтобы в цикле выполнялась только проверка. И если id есть, то код это запоминал. А запись производилась бы уже по завершению цикла.
    Более оптимальных решений два:
    • Хранить id в виде json-файла и при открытии этого файла преобразовывать этот json в структуру данных python (список или словарь). А проверить наличие значения что в списке, что в словаре можно одной строчкой.
    • Использовать СУБД (например встроенную в python sqlite) и проверять id запросом (хотя чисто для хранения id этот вариант избыточен)
    Ответ написан
    1 комментарий
  • Что за ошибка AttributeError: 'str' object has no attribute 'tk и как её исправить?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Не понимаю что за ошибка

    Очевидно, первым параметром конструктора Button должна быть не строка.

    что делать?

    Изучить Python и Tk.
    Ответ написан
    Комментировать
  • Проблемы с ноутом Самсунг вылазит синий экран после того как винда прогрузилась?

    sotvm
    @sotvm
    Умный поймёт, а дураку и так всё равно.
    грузи в безопасном режиме и сноси дрова,
    эксперементируй 639730dd65b56341432833.gif
    Ответ написан
    4 комментария
  • Как выбрать наибольшие значения из списка массивов и вывести их?

    0xD34F
    @0xD34F
    sorted(arr, key=lambda n: n[2])[-3:]
    Ответ написан
    Комментировать
  • Как отправлять одно сообщение а не несколько?

    Vindicar
    @Vindicar
    RTFM!
    Голову включить, для начала.
    Как по-твоему, какой вызов выполняет отправку сообщения? Правильно, interaction.send().
    Этот вызов у тебя в цикле for member in guild.humans, поэтому для каждого участника сервера будет вызвано interaction.send(), а значит, отправлено отдельное сообщение.
    Значит, если хочешь отправлять сведения однажды - вынеси вызов из цикла.
    А чтобы не потерять данные, которые ты в цикле собираешь - помещай их в список.
    После цикла собери этот список в строку через join(), и отправь эту строку одним вызовом send().
    Ответ написан
    3 комментария
  • Как реализовать settings.py?

    Vindicar
    @Vindicar
    RTFM!
    Я для таких вещей люблю использовать JSON и датаклассы. Хорошо работает, если у тебя в настройках только простые типы (целое число, дробное число, строка, булево значение), из коллекций - списки.
    Описываешь настройки как датакласс
    import dataclasses
    
    @dataclasses.dataclass
    class Settings:
        x: int = 0  # имя, тип настройки, значение по умолчанию
        y: int = 0
        name: str = "Безымянный"

    Тогда загрузку из файла можно сделать так:
    import sys
    import pathlib
    import json
    
    # я предполагаю, что ты будешь хранить настройки в каталоге скрипта
    APP_DIR = pathlib.Path(sys.argv[0]).parent.resolve()  # путь к каталогу скрипта
    CFG = APP_DIR / 'settings.json'  # путь к файлу конфига
    settings = Settings()  # создаём настройки по умолчанию
    try:
        with CFG.open('rt', encoding='utf-8') as cfg:  # открываем файл (закроется сам по выходу из with)
            data = json.load(cfg)  # разбираем файл как JSON
        settings = dataclasses.replace(settings, **data)  # обновляем настройки значениями из файла
    except Exception as err:
        print('Ошибка загрузки настроек:', err)  # выводим сообщение об ошибке
    # но выполнение кода продолжается в любом случае
    # у нас есть либо settings с значениями по умолчанию, либо settings, обновлённый из файла
    print(settings.name, settings.x, settings.y)  # пример использования объекта settings
    settings.name = 'Имя'  # значения в объекте можно менять
    settings.x, settings.y = 10, 20


    Для сохранения можно будет аналогично вытащить значения всех полей из объекта:
    try:
        data = dataclasses.asdict(settings)  # превращаем объект в словарь
        with CFG.open('wt', encoding='utf-8') as cfg:  # открываем файл (закроется сам по выходу из with)
            json.dump(data, cfg, ensure_ascii=False, indent='  ')  # записываем словарь в файл в формате JSON
    except Exception as err:
        print('Ошибка сохранения настроек:', err)  # выводим сообщение об ошибке
    Ответ написан
    Комментировать
  • Почему так популярны телеграм боты?

    @rPman
    Потому что в телеграм идут люди... очень молодая и массовая соцсеть, шустрый клиент (и не один), хорошая поддержка железа, пиар и сарафанное радио.

    Ботописатели идут туда где тусуется целевое население, это логичное следствие
    идут люди в discord - будут писать ботов там, пойдут в telegram, станет популярным whatsup - будут пытаться писать и для него (даже если это невозможно).

    Удобство написания, простота, выбор фреймворков - это дело десятое. Если говорить уж на чистоту - комфортным работу с телеграм не назовешь. Официально там вообще куча лимитов (возможно и оправданные), а неофициально далеко не все поддерживается.
    Ответ написан
    Комментировать
  • Почему так популярны телеграм боты?

    Griboks
    @Griboks
    каждый 5-ый вопрос связан с Телеграм-ботом, и каждый 10-ый автор не знает основ языка

    Потому что большинство разработчиков ботов тупые. Как правило они посмотрели 10 видео на ютубе, поверили в себя и пошли во фриланс. На фрилансе заказчики тоже тупые. Вот и получается, что неумеющие гуглить люди заказывают результаты поиска у неумеющих гуглить псевдоразработчиков.
    Ответ написан
    Комментировать
  • Почему так популярны телеграм боты?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Ботов писать относительно просто, порог вхождения минимальный по сравнению с программированием под iOS и андроид, да и проще написания десктопных приложений с GUI, а в использовании боты проще, чем утилиты командной строки.
    Зато в результате может получиться довольно функцинальная штука. Легко настроить многоэтапную диалоговую коммуникацию с пользователем, получить для обработки изображения и фото, возвращать ссылки на скачивание результатов.

    Так вооот! Из-за этого невысокого порога вхождения развелось куча "курсов" программирования для чайников, которые первым упражнением, полезность которого удается легко показать ученикам, выбирают написание бота.
    И так у этих коуч-питонистов легко всё получается (ещё бы, надо де продать курс с первого бесплатного занятия), что у незадачливых школьников появляется неиллюзорная вера в себя и они бегут повторять увиденное на ютубе, а потом, когда, конечно же, то-то идёт не так как показано в видосе, они бегут сюда спрашивать как всё надо сделать, чтобы работало.

    В общем все хотят всё и сразу, и чтоб легко, бесплано и не надо было учиться.
    Ответ написан
    Комментировать
  • Почему тормозит Ubuntu?

    @rPman
    Загрузка Ubuntu происходит 3-5 минут, после входа долго "раскачивается" и вообще стал работать медленне.

    Убедиться что это не проблема с софтом, запустив к примеру linux с флешки liveusb (установочная ubuntu), можно пойти дальше и временно установить чистый linux куда-нидудь, хоть на такую же флешку.. запуск даже с медленных может происходить быстрее чем со старого hdd. Вдруг переустановка системы помозет? А может банальная дефрагментация? все же hdd это hdd.

    Убедиться что это не проблема с железом
    - не убитая ли система охлаждения
    возможно тротлит процессор от перегрева, прогнать тесты процессора, сравнивать с публичными бенчмарками для своего процессора
    - нет ли повреждений по питанию
    это проверить сложнее, но банально, нет ли тормозов только при питании от батареи, а от сети все ок? в общем неплохо бы помониторить показатели вольтажа у процессора в нагрузке, там так же есть аналогичный тротлингу механизм по температуре - понижение скорости если подсистема питания не справляется
    - не поврежден ли жесткий диск
    протестировать его какими-нибудь бенчмарками (показывающими например красивую картинку-график скорости в зависимости от сектора), посмотреть ssmart диска на ошибки
    старое железо может банально глючить из-за плохого контакта в том же шлейфе sata, в udma там будут сыпать ошибки но диск будет продолжать работать только часто притормаживать (переинициализироваться, кстати звук похож на чтение бедблоков, скребущий такой)

    p.s. не пользоваться ubuntu unity, и перейти на xubuntu или lubuntu (или любой другой шустрый DE) это делается простой командой
    sudo apt install xubuntu-desktop
    и в окне авторизации выбрать xfce
    Ответ написан
    Комментировать
  • Как скомпилировать консольное приложение для Android?

    @rPman
    Общая идея android приложений - это dalvik bytecode (обычно это java) виртуальная машина, но разрешается использовать нативные библиотеки

    Соответственно пишешь минимальное приложение на java (пусть даже без gui, а вывод при необходимости делать в системные логи), которое первым делом подключит библиотеку, которую так же помещаешь в apk.

    Исторически это называется java native interafce, позволяет навести мосты между java приложением и нативным c/c++.

    дока - https://developer.android.com/studio/projects/add-...
    немного про android jni - https://developer.android.com/training/articles/pe... там же слева смотри ссылки как собирать

    Это очень трудоемкий путь, помимо того что придется пробираться через дебри jni прослойки и ограничений, понадобится поддерживать все многообразие железа (архитектур) причем как 32-битных так и 64-битных, где уже на этапе их сборки и отладки появится миллион проблем, т.е. не только x86 но и arm, причем последний это не пара а много много - arm64-v8a , armeabi , armeabi-v7a ... (больше если надо поддерживать старое железо)
    Ответ написан
    Комментировать
  • Как вставить строку на индекс, вне зависимости от того существует он или нет?

    Maksim_64
    @Maksim_64
    Data Analyst
    def f(l):
        return l[:2]+['Test']+l[2+1:] if len(l) > 2 else l + ['Test']
    Ответ написан
    Комментировать
  • Как вставить строку на индекс, вне зависимости от того существует он или нет?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Из условия четко следует, что в списке либо два, либо три элемента?
    Если да, то пытаетесь изменить нужный элемент по индексу а если падает ошибка IndexError - добавляете значение в конец.
    Если может быть любое количество - проверяете длину и и либо снова меняете элемент по индексу, либо добиваете в конец пока не получится список нужной длинны.
    Ответ написан
    1 комментарий
  • Как вставить строку на индекс, вне зависимости от того существует он или нет?

    otdameskapizm
    @otdameskapizm
    Помог ответ? Отметь решением...
    Ну можно вот так примитивно, но тут все завязано на то, что будет точно либо 2 либо 3 значения в массиве
    if(len(arr) > 2): arr[2] = 'Test'
    else: arr.append('Test')
    Ответ написан
    1 комментарий
  • Как освободить место на компьютере?

    wide_e
    @wide_e
    Начинающий разработчик на C#
    Попробуйте очистить прошлые обновления Windows:
    Проводник -> Этот компьютер -> пкм по диску-> свойства, далее очистка диска. В только что открытом окне ставьте все галочки (Будьте внимательны, корзина тоже есть в том списке) и удаляете файлы.
    Перейдем к очистке прошлых обновлений Windows. Все в том же окне с очисткой выбирает удалить системные файлы. Ну и ставим галочку возле обновлений виндовс. Удаляем
    Также, можно очистить временный кеш. Нажимаем Win + R, пишем %temp% . Далее нажимаем Ctrl + A, Delete. Очищаем. Если жалуется что какое нибудь приложение открыто - пропускаем
    Ответ написан
    Комментировать