• Использовать в цикле булевой маски это норм, стрём?

    @U235U235
    Можно так: arr[bool_mask]=42
    Старайтесь не использовать циклы for, если работаете с массивами.
    Ответ написан
    Комментировать
  • Как отследить блокировку бота пользователями в телеграмме?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Приходит update со следующими ключевыми полями:
    {
         "my_chat_member": {
             "chat": {
                 "id": 5181600575,
             },
             "old_chat_member": {
                 "status": "member"
             },
             "new_chat_member": {
                 "status": "kicked",
             }
         }
     }
    Ответ написан
    2 комментария
  • Как добавить данные в Series через ссылку на объект?

    Maksim_64
    @Maksim_64
    Data Analyst
    Вообще так с pandas не работают.
    1. pandas имеет мощный I/O как следствие эксель в том числе читают прямо в фрейм. Есть функции read_excel и другие, дополнительно перед этим установив различные reader's writer's например openpyxl и др.

    2. Если ты собираешься создать series из python объекта, с числовыми индексами то это list. Если с именованными индексами но это словарь. То есть собирай в словарь или лист. Seires это однородный массив и с именованными индексами, и for циклами их не процессируют.
    Ответ написан
    2 комментария
  • Скажите пожалуйста почему выдает разные ответы?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    В первом случае ты подсчитываешь все a, которые с любым x дают false.
    Во втором случае, ты подсчитываешь все пары a, x, которые удовлетворяют условию.
    Ответ написан
    4 комментария
  • Метод insert не работает, как исправить?

    Vindicar
    @Vindicar
    RTFM!
    Ну тут сразу возникает вопрос: какую задачу выполняет этот метод. Ты говоришь, что метод используется другим классом. Окей, это норма. Для чего он используется? Какую задачу другой класс хочет решить вызовом этого метода?
    Вопрос связан с тем, что ты почему-то создаёшь элементы управления в методе put_wigets(). По идее, если твой класс представляет собой группу элементов управления, он должен создавать дочерние элементы в своём конструкторе, и сохранять ссылки на них в приватные (ну, насколько это можно в питоне) поля класса. Методы класса должны к этим полям обращаться. Исходи из того, что локальная переменная в методе (как Ent_numberBox ) живёт только во время вызова этого метода, и не должна содержать ничего, что переживёт этот метод (если это не возвращаемое значение).

    Например, так:
    import tkinter as tk
    
    class InputBox(tk.Frame):
        def __init__(self, master, **kwargs):
            # вызываем унаследованный конструктор
            super().__init__(master, **kwargs)
            # переменные tkinter можно связывать с элементами управления
            # тогда изменение в переменной отобразится в элементе, и наоборот
            # это бывает удобнее, чем дёргать элемент напрямую
            # а ещё можно самим реагировать на изменения значения такой переменной
            self.__value = tk.StringVar()
            # наше поле ввода
            self.__entry = tk.Entry(self, justify=tk.RIGHT, width=22, textvariable=self.__value)
            self.__entry.pack(side=tk.RIGHT, padx=10, pady=15)
            # метка с пояснением
            self.__helptext = tk.Label(self, bg=self['background'], height=3, text="Введите мат. выражение:")
            self.__helptext.pack(side=tk.LEFT)
        
        def get_value(self) -> str:
            """Возвращает введённую строку."""
            return self.__value.get()  # метод get() позволяет прочитать значение переменной tkinter
        
        def set_value(self, value: str) -> None:
            """Заменяет содержимое введённой строки новым."""
            self.__value.set(value)  # метод set() позволяет задать новое значение для переменной
            
        def append(self, symbol: str) -> None:
            """Добавляет символ(ы) к уже введённой строке."""
            self.__value.set(self.__value.get() + symbol)
    
    
    if __name__ == '__main__':
        root = tk.Tk()
        box = InputBox(root)
        box.pack(side=tk.TOP, expand=True, fill=tk.BOTH)
        box.set_value('Hello')
        box.append(', world!')
        root.mainloop()


    Я в этом примере исходил из своего понимания твоей задачи.
    Если это поле ввода, то мы хотим иметь возможность получить введённое значение. Поэтому метод get_value().
    Также ты упомянул необходимость в том, чтобы изменить это значение извне, из другого класса. Значит, нужен метод set_value().
    Также, если это - часть калькулятора, у тебя будет часто встречаться задача "добавить один символ в конец строки". Это можно реализовать через пару get_value()/set_value(), но будет удобнее иметь отдельный метод append().
    Один метод - одна решаемая задача.
    Ответ написан
    3 комментария
  • Кнопка и окно ввода в разных классах, не получается добавить кнопке возможность вставлять знаки в Entry объект?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, какой виджет за что отвечает? Что такое inputBox? В чём его роль? В идеале одним предложением.

    Во-вторых, не следует лазать в кишки класса без нужды. Вместо этого имеет смысл добавить этому классу удобный метод, который сделает всё что нужно, с пониманием внутреннего устройства класса. Тогда те, кто класс использует, не должны будут знать его внутреннее устройство - только его видимый интерфейс (методы, свойства). Это называется инкапсуляция.
    Ответ написан
    2 комментария
  • Как менять вид рабочего стола, панель задач через питон?

    Vindicar
    @Vindicar
    RTFM!
    Разве что менять параметры в реестре через модуль winreg. Гуглинг указывает на ключ
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3
    , но там еще нужно разбираться со структурой данных.
    Ответ написан
  • Не могу понять в чем проблема?

    Vindicar
    @Vindicar
    RTFM!
    description = f"""У тебя , **{ctx.author}** вот столько балов!**{cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]} :polegar_para_cima:**"""

    Вот это - трижды говнокод.
    1. Не засовывай в шаблонные строки ничего сложнее одной арфиметической операции - результат абсолютно нечитаем и неконтролируем (в чем ты убедился).
    Неправильно:
    description = f"""У тебя , **{ctx.author}** вот столько балов!**{cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]} :polegar_para_cima:**"""

    Правильно:
    score = cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]
    description = f"""У тебя , **{ctx.author}** вот столько балов!**{score} :polegar_para_cima:**"""

    2. Никогда не формируй запросы через форматирование строк. Слишком легко словить ошибку, явную или неявную.
    Неправильно:
    score = cursor.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id))

    Правильно:
    score = cursor.execute("SELECT cash FROM users WHERE id = ?", (ctx.author.id,) )

    3. Всегда проверяй, что ты получаешь из базы! Нет гарантий, что запись с указанным id и впрямь существует.
    Неправильно:
    score = cursor.execute("SELECT cash FROM users WHERE id = ?", (ctx.author.id,) ).fetchone()[0]
    description = f"""У тебя , **{ctx.author}** вот столько балов!**{score} :polegar_para_cima:**"""

    Правильно:
    score_row = cursor.execute("SELECT cash FROM users WHERE id = ?", (ctx.author.id,) ).fetchone()
    if score_row is not None:
        description = f"""У тебя , **{ctx.author}** вот столько балов!**{score_row[0]} :polegar_para_cima:**"""
    else:
        # что делать, если такого юзера еще нет в базе?
        cursor.execute("INSERT INTO users (id, cash) VALUES (?, 0)", (ctx.author.id,) ) # можно его добавить
        description = f"""У тебя , **{ctx.author}** пока нет ничего! Но скоро будет!"""

    4. БаЛЛов, блин.
    Ответ написан
    5 комментариев
  • Как вывести список с одним кортежем из трёх, в котором список состоит из чётных чисел?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    for x in l:
    	if len(x[1]) %2 ==0:
    		print(x)
    или:
    s = [x for x in l if len(x[1]) %2 == 0 ]
    print(s)
    Ответ написан
    Комментировать
  • Как открыть базу данных SQL в Pycharm?

    idegree
    @idegree
    Senior Workaround Developer
    1) Можно.
    2) View -> Tool Windows -> Database

    P.S. Зависит от редакции. В PyCharm Community Edition этой фичи нет.
    29333659e84d49c0940d892eb9549b82.pngP.P.S. могу посоветовать использовать клиент базы данных, например MySQL Workbench или SQLiteman.
    Ответ написан
    4 комментария
  • Как правильно преобразовать словарь Python в строку?

    @Kadabrov
    можно распаковать с помощью цикла и получить ключ+значение строкой
    list_data = []
    data = {"timestamp": 1640533085532}
    for k,  v in data.items():
        list_data.append(k + ':' + str(v))


    так же можно распаковать во множества и получить список со множествамими ключей и значений
    new_data = data.items()
    Ответ написан
    Комментировать
  • Как извлечь информацию из конкретных ячеек таблицы файла .docx с помощью python и библиотеки docx?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Чего там понимать?
    from docx import Document
    
    document = Document('document.docx')
    table = document.tables[0]
    cell = table.cell(0, 1)
    print(cell.text)
    Ответ написан
    2 комментария
  • Какое решение проблемы?

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

    JRazor
    @JRazor
    Senior StarkOverFlow Programmer
    Операция == - это сравнение значений, а is - это сравнение ссылок внутри памяти. Если значения равны через ==, но не равны через is - они просто хранятся в разных ячейках памяти.

    То есть, == отвечает на вопрос, равны ли объекты? А is отвечает на вопрос - это один и тот же объект?

    Посему, c is можете сравнивать типы, None, False, True, а с переменными используйте ==
    Ответ написан
    Комментировать
  • На долю секунды появляется окно перед открытием основного окна tkinter?

    @badalcode Автор вопроса
    Убрал строку с иконкой window.iconbitmap('favicon.ico') и это окошко перестало появляться. Получается из-за иконки? Но почему?

    UPD: Сам спросил, сам ответил. В общем, вдруг у кого будет такая же проблема поменял строку кода, которая выше на эту
    window.iconphoto(True, tk.PhotoImage(file = 'favicon.png'))
    и окошко перестало появляться.
    Ответ написан
    Комментировать