• Как упомянуть всех пользователей одной роли в Discord.py?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Ваша задумка буквально противоречит заложенному смыслу ролей, они нужны в первую очередь чтобы так не делать и вы получите тот же результат, но значительно более сложным путем.

    Если не передумали, то алгоритм следующий.
    Получить нужную роль utils.get, циклом по всем пользователям сервера проверять наличие данной роли у пользователя (смотреть в member.roles) и добавлять в текст сообщения нужных пользователей.
    Ответ написан
    4 комментария
  • Конструкция if не работает в конструкции try?

    iMedved2009
    @iMedved2009
    Не люблю людей
    А почему всю эту конструкцию select if exists update else insert в pythonе не заменить на одну простую
    INSERT INTO cccstore (ART, Cost, Color) VALUES (?,?,?) ON DUPLICATE KEY UPDATE Cost=?;
    Ответ написан
    Комментировать
  • Как сделать автоматический запуск кода?

    @DenisShahbazyan
    Не подойдет обернуть свой код в бесконечный цикл?

    while True:
        # Код / функция, которая будет всегда крутиться.


    Можно через cmd, где my.py - название вашего скрипта. CMD открывать в той же папке, где находиться python файл
    for /l %q in (0) do python my.py
    Ответ написан
    1 комментарий
  • Когда задействована батарейка BIOS?

    @Drno
    нет
    но с учетом что там обычная батарейка, она всё равно деградирует постепенно
    Ответ написан
    3 комментария
  • Как организовать одновременную работу Telegram бота (Aiogram) и Flask?

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

    Не изобретайте себе приключения на пустом месте.
    Ответ написан
    2 комментария
  • Как выяснить, что какие параметры скрываются за **kwargs?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    где найти в документации библиотеки

    0.В документации какой библиотеки? Какой функции?
    1.Воспользоваться поиском по документации для нахождения нужной функции/метода. Любая нормальная дока подробно описывает подобное.
    2.Посмотреть исходный код функции/метода.
    3.Загуглить.
    Ответ написан
    3 комментария
  • Как отправить текст с одного компьютера на другой через скрипты на Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Либо настраивать маршрутизацию между хостами, либо заводить третью сетевую точку, до которой есть маршрутизация у обоих хостов.
    Ответ написан
    Комментировать
  • Условие if и оператор or?

    MaKvc
    @MaKvc
    Отчаянный веб-разработчик
    Читайте!
    Ваше условие (if a == 'нет' or 'да':) работает следующим образом:
    Python проверяет, a равно 'нет', естественно а неравно 'нет', а содержит строку '1111', НО ПОТОМ идет OR, операнд справа - это строка 'да', естественно Python считает ее за истину true, она ведь непустая!
    Получается, это условие, эквивалентно if a == 'нет' or true:, а это значит, что print('ok') выполнится в любом случае, так как, в условии есть часть or true,Pythony плевать на a == 'нет', он видит OR, видит true и выполняет условие, проще говоря, можно выкинуть лишнее, и записать так: if true: - это, все также эквивалентно if a == 'нет' or 'да':
    Для большего понимания происходящего, попробуйте заменить if a == 'нет' or 'да': на if a == 'нет' or '':. В этом случае, пустая строка эквивалентна false и при этом,a неравно 'нет', а это значит, что условие не будет выполнено и вы не увидите print('ok').

    Правильное условие:
    if a == 'да':
        print('ok')
    elif a == 'нет':
        print('net')
    else:
        print('error')

    В случае с or, правильно будет так:
    if a == 'да' or a == 'нет':

    ЗАНОВЕС!
    Ответ написан
    Комментировать
  • Извлечение данных из списка?

    fenrir1121
    @fenrir1121 Куратор тега discord.py
    Начни с документации
    Если внимательно посмотреть на полученный результат, увидите [ ], которые говорят о том, что вы получили объект list в котором находится один элемент, соответственно обращение к нему будет messages[0]
    Ну и вероятно использовался fetchall вместо fetchone, перечитайте теорию по взаимодействию с бд.
    Ответ написан
    1 комментарий
  • Как проверить работает ли бот или нет?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    В гугле забанен
    Так и быть - пиши, уговорил, QnA даёт добро.
    Ответ написан
    2 комментария
  • Что означает этот знак [:-1]?

    dima9595
    @dima9595
    Junior PHP
    Нашёл удобное объяснение по срезам списков: https://pythonworld.ru/osnovy/indeksy-i-srezy.html
    Ответ написан
    Комментировать
  • Почему leetcode не принимает правильно решенные задачи на python?

    0xD34F
    @0xD34F
    Задача проверить является ли список палиндромом, я делаю самое банальное, дан список head, я проверяю return head == head[: :-1]

    Под списком тут подразумевается связный список, а вовсе не массив. Так что решение ваше ни разу не правильное.
    Ответ написан
    Комментировать
  • Как написать красивый и понятный код?

    snaiper04ek
    @snaiper04ek
    Не стреляйте в эникея, он админит как умеет
    Красивый и понятный код = читаемый код.
    Нагугли что такое самодокументирующийся код.

    Я сам начинающий, но с чего бы я начал это распутывать:
    area[0][0]["text"] - тут у тебя куча раз написано примерно одно и то же, меняется только 2 числа.
    Легчайшим образом переносится в функцию:
    def x_here(x,y):
        if area[x][y][text] == X:
            return True
        else:
            return False


    тогда одна строка в winner() уже будет вот так выглядеть:

    if x_here(0,0) and x_here(0,1) and x_here(0,2):
        return "X"


    тут у тебя снова есть повторяющиеся элементы
    во-первых, координаты для победы заранее известны
    win_condition_topleft_to_botright = ((0,0),(0,1),(0,2))

    у нас есть кортеж с кортежами. Если в этих координатах везде окажутся иксы - нужно вернуть X (победа). У этого кортежа понятное название (слева вверху к низу справа)

    далее нам нужна функция которая примет это условие победы и проверит его:
    def check_win_condition(first, second, third):  
        """на вход три кортежа, являющиеся координатами игрового поля"""
    
        if x_here(*first) and x_here(*second) and x_here(*third):
            return "X"
    
    def winner():
        check_win_condition(*win_condition_topleft_to_botright)
        check_win_condition(*win_condition_2)
        check_win_condition(*win_condition_3)
        check_win_condition(*win_condition_4)


    И... видишь повторяющиеся элементы? 4 одинаковые строки, в которых меняется только один параметр?
    Ah shit, here we go again

    Ты знаешь что делать. Действуй.
    Ответ написан
    1 комментарий
  • Как сжать видео так, чтобы надписи были в идеальном качестве, а остальная картинка в нормальном?

    кодеки жмут блоками.. Это придётся динамически выделять в кадрах области с номерами и жать блоки, на которые они попали с одними параметрами, а прочие – с другими. Не знаю, есть ли такие кодеки..

    Может, лучше распознать номера и присутствующие в кадре прописать в трек субтитров?
    После этого видео можно будет как угодно уменьшить-ужать-размылить, а распознанные номера будут видны, если включить субтитры.

    Усложнив, можно в другой трек субтитров прописать и распознанные положения областей с номерами, а каким-то доработанным видеоплеером отрисовывать эти прямоугольники поверх видео при воспроизведении.
    Ответ написан
    1 комментарий
  • Зачем надо закрывать курсор при работе с БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дело в том что курсор может потреблять ресурсы. Например вы захотели взять первые 10 строк из 10000000 выборки но предварительно отсортировали. Выбрали 10 строк и не сделали финализирующие протокольные действия в Python. База данных будет удерживать в памяти алгоритмы и структуры данных для снапшота результата этого запроса до тех пор пока не придет явный CLOSE с вашей стороны либо интеллекуальный драйвер который еще и обладает логикой уборки мусора сам не догадается что Statement уже вышел из scope вашего использования и может быть удалён GC.

    Я был свидетелем ситуации когда крупное ent-приложение Java/Oracle переполняло память из-за неверной обработки Exception и плодила много незакрытых курсоров в БД. Java от этого не сильно страдала (GC всё убирал) но страдал Oracle. Потому что уборка происходила слишком поздно. Пофиксилось тогда переписыванием с try на try-with-resources.

    Поэтому если вы неряшливо обращаетесь с курсорами (явными и неявными (обычный select к примеру может прождать неявный курсор)) то не ваше приложение а база данных почувствует себя плохо. Как быстро и какие ошибки вы будете получать - зависит от настроек вашей БД.
    Ответ написан
    Комментировать
  • Что я не так делаю с интерфейсами?

    K0TlK
    @K0TlK
    Буллю людей.
    Что я не так делаю с интерфейсами?

    Всё.
    У тебя у одного интерфейса слишком много ответственностей у него и Warside какой-то есть и дамаг может принимать и умереть может.

    Разделяй этот интерфейс на несколько.

    namespace Health
    {
        public interface IHealth
        {
            void Lose(int amount);
            void Restore(int amount);
        }
        
        public interface IMutable<out T>
        {
            T Current { get; }
        }
        
        public interface IFinal
        {
            event Action Over;
        }
    }


    Получается такой Health:

    using System;
    using UnityEngine;
    
    namespace Health
    {
        public class Health : IHealth, IFinal, IMutable<int>
        {
            public event Action Over;
            private readonly int _max;
            private const int Min = 0;
    
            public Health(int max)
            {
                _max = max;
                Current = _max;
            }
            
            public int Current { get; private set; }
            
            public void Lose(int amount)
            {
                SetCurrent(Current - amount);
            }
    
            public void Restore(int amount)
            {
                SetCurrent(Current + amount);
            }
    
            private void SetCurrent(int amount)
            {
                Current = Mathf.Clamp(amount, Min, _max);
                
                if (Current == Min) Over?.Invoke();
            }
            
        }
    }


    Health не должен быть отдельным компонентом, который будет висеть на условном рыцаре. Рыцарь будет содержать в себе этот Health, но напрямую хп ему изменять никто не будет, поэтому нужен еще один интерфейс IDamageable:
    namespace Health
    {
        public interface IDamageable
        {
            void ApplyDamage(int amount);
        }
    }


    И сам рыцарь:
    using UnityEngine;
    
    namespace Health
    {
        public class Knight : MonoBehaviour, IDamageable
        {
            [SerializeField] private int _maxHealth = 100;
            private Health _health;
    
            private void Awake()
            {
                _health = new Health(_maxHealth);
            }
    
            private void OnEnable()
            {
                _health.Over += Die;
            }
    
            private void OnDisable()
            {
                _health.Over -= Die;
            }
    
            public void ApplyDamage(int amount)
            {
                _health.Lose(amount);
                Debug.Log($"Damaged, hp left - {_health.Current}");
            }
    
            private void Die()
            {
                Debug.Log("Died");
                Destroy(gameObject);
            }
        }
    }


    Теперь, чтобы нанести урон рыцарю, нужно получить компонент IDamageable и вызвать его метод ApplyDamage:
    using UnityEngine;
    
    namespace Health
    {
        public class Enemy : MonoBehaviour
        {
            [SerializeField] private int _damage = 50;
            
            private void OnTriggerEnter2D(Collider2D other)
            {
                if (other.TryGetComponent(out IDamageable damageable))
                {
                    damageable.ApplyDamage(_damage);
                }
            }
        }
    }


    Всё. Используй TryGetComponent и тогда не нужно будет делать миллион проверок является ли что-то null.
    Warside твой должен висеть на рыцаре, а не на хп, поэтому делай отдельный интерфейс под этот Warside.
    Ответ написан
    5 комментариев
  • Как перевести код с Pascal на Python?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Как перевести код с Pascal на Python?

    Используя синтаксис и встроенные функции (смотреть в офф.доках / "шпаргалке") написать соответствующий код.

    ---
    Допускаю, что найдется кто-то, готовый за вас делать ваши задания, и напишет код, но в текущем виде, поскольку вы не привели попыток решения, вопрос фактически является заданием. А про задания четко написано в п.5.12 правил.
    upd:
    Самые очевидные ошибки
    from math import sqrt
    
    for i in range(289123456, 389123456+1):
        sqrtIT = sqrt(i)
        numDel = 0
        if (round(sqrtIT)) == sqrtIT:
            maxDel = 1
            for j in range(1, round(sqrtIT)): # Раз ошибка
                """
                    Собственно, первый цикл 'for i := 289123456 to 389123456 do begin' вы переделали правильно, почему второй так сделали - непонятно
                """
                round(sqrtIT)
                if (i % j == 0):
                    if maxDel == 1 and j != 1: # вторая ошибка. В питоне - не равно пишется так: !=
                        maxDel = i // j # Еще одна ошибка (из коментов)
                    if (j != round(sqrtIT)): # третья ошибка
                        numDel += 2
                    if j * j == i:
                        numDel += 1
            if numDel == 5:
                print(i, ' ', maxDel)
    Ответ написан
    2 комментария
  • Воспроизводится без нажатия кнопки tkinter, как исправить?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Потому что параметр command конструктора Button принимает ссылку на функцию, а вы передаёте результат её вызова.
    Ответ написан
    Комментировать
  • Как сделать 2 условия в sqllite python?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Это нужно делать на уровне sql запросов. Как? Для начала - просто изучите sql. То, что вам надо - буквально основы, описанные в первых разделах. Без их знания будет очень сложно.
    Ответ написан
    2 комментария
  • Пишу бота для телеграм (telebot), проблема с асинхронными функциями. В чем причина ошибки?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Если вы дадите какие-то совесть по оформлению или синтаксу кода, я буду вам нереально благодарен.

    Мне вот интересно, вы ищите "советы" по каким-то вещам... Почему вам даже не приходит в голову поискать в офф.документации?
    Как правильно писать то, что вы пытаетесь сделать там описано.
    я тот же sqlite выучил за 1 день

    Не очень похоже. То, что вы посмотрели, уж извините, говноролик* по типу "хреначим бота из палок и ..." не значит, что вы изучили что-то.
    Конкретно - проблема в подобных выражениях:
    cursor.execute(f"INSERT INTO {table}({columns}) VALUES ({values})")

    Писать что-то подобное, тем-более в системе, с которая будет доступна другим людям в интернете можно только в случаях, когда вы целенаправленно хотите словить sql-инъекцию.
    Изучайте основы по документации. По крайней мере какие-то базовые вещи там описаны максимально подробно и даже если вдруг не знаете английский - примеров столько, что даже без чтения понятно.
    --
    * - тут больше вопрос к автору сего творения, который мало-того, что сам не пойми как учится, так еще и путает других.
    Ответ написан
    1 комментарий