• Что делать если про скачивании aiogram, выходить данная команда?

    Mike_Ro
    @Mike_Ro Куратор тега Python
    Python, JS, WordPress, SEO, Bots, Adversting
    Что делать если про скачивании aiogram, выходить данная команда?

    error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-buil...

    Наверное стоит прочитать ошибку?

    На винде отсутствует Microsoft Visual C++, качать здесь https://visualstudio.microsoft.com/ru/visual-cpp-b....
    Ответ написан
    5 комментариев
  • Возможно ли как-то использовать обычную функцию заместо макро-функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    #define BIT_SET(port, bit) (port |= (1 << bit))
    
    int main(void)
    {
        BIT_SET(PORTB, PORTB0);
    }


    вот такой вариант, с макро-функцией, работает, так как это просто текстовая замена

    Он работает, потому что с таким определением BIT_SET PORTB не может быть определён просто как 0x04. Потому что просто текстовая замена 0x04 |= 1 << 0 не имеет смысла. Он определён как volatile ссылка на память с адресом 0x04. Когда ты научишься передавать ссылку на такую память в функцию, функция тоже начнёт работать.
    Ответ написан
    3 комментария
  • Как можно получить изменения во VIEW, когда изменяется базовая таблица?

    Melkij
    @Melkij
    PostgreSQL DBA
    view не хранит никаких данных. Это просто сохранённое дерево запроса, встраиваемое в обратившийся к этой view запрос.
    Вам нужен триггер на таблице с данными, который будет писать в отдельную аудит таблицу историю изменений. Потом из этой таблицы получайте историю.
    Ответ написан
    Комментировать
  • Ничего не понятно, что делать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Всё как написано в коде:
    • Выбрать случайного персонажа
    • Выбрать случайное сообщение
    • В цикле отправить выбранному выбранное n раз.

    А вам надо в цикле в каждой его итерации выбирать случайного персонажа и случайное сообщение, и тут же отправлять.
    Ответ написан
    2 комментария
  • Как сделать, чтобы message.text смотрел на только что введеный, а не старый текст?

    @twistfire92
    Python backend developer
    Объект message у вас один всегда, который берется из аргументов функции. Вы его нигде не меняете, поэтому при проверке if message.text == 'Подтвердить': всегда вернется одно и то же значение.
    Если вы хотите ожидать от пользователя нового ввода, стоит перекинуть управление в другую функцию.
    Конкретно в вашем случае лучше воспользоваться register_next_step_handler. И каждый раз прокидывать в него оставшиеся элементы списка из cells_products_data.
    Я не уверен, что register_next_step_handler работает в асинхронном режиме, не юзал telebot в async.
    Изучите этот инструмент подробнее.
    Ответ написан
    Комментировать
  • Как настроить аудидт или логвотч, если не знать что искать?

    @vitaly_il1
    DevOps Consulting
    Предотвращение - немедленно делать то, что советует Atlassian.

    Обнаружение атак - в общем случае можно сделать алерт, если объем лога за минуту (10 минут, час) значительно вырос. Обычно есть 100 записей в минуту - будем посылать алерт если есть 300.
    Плюс прочитать что пишет Atlassian и настроить алерты по ключевым словам (URL, requests, ...) которые используются в аттаках.

    Если отвлечься от Atlassian и говорить в целом - чтобы не изобретать велосипед, нужен WAF (web application firewall). Я последние годы 99% в облаке, но если вы нет, наверняка есть и on-prem products.
    Примеры облачных WAF - AWS WAF (ACL), Cloudflare. Мы получаем набор правил от провайдера WAF, который сделан на основе анализа огромного траффика и должен отфильтровывать "плохой" траффик. Разумеется, набор обновляется в реальном времени.

    Так что слова для поиска: WAF, SIEM, IDS.
    Ответ написан
    2 комментария
  • Как в цикле For передать два значенния?

    @Everything_is_bad
    zip, но лучше начать читать учебник, если такое в ступор вводит.
    Ответ написан
    Комментировать
  • Как передать вложенную структуру в функцию?

    @Shavadrius
    Так у вас функция принимает на вход Тест, а вы Тест2 туда передаете... Ну как бы...
    Ответ написан
    Комментировать
  • Не понимаю, почему программа "тяжелая"?

    Alexandroppolus
    @Alexandroppolus
    кодир
    40000000 чисел Фибоначчи - это лютая вещь со всех сторон. Даже если ты врубишь мемоизацию, как посоветовал Максим Припадчев , то там дохрена вычислений, потому что числа будут длиной в миллионы цифр.

    Мы суммируем только четные числа Фибоначчи.
    Легко заметить, что F(n) четное, только если n делится на 3, т.е. n = 3m.
    То есть тебе нужна сумма F(3*m) для всех m от 0 до floor((40000000-2) / 3) включительно, если правильно понимаю этот ваш range.

    я тут пояндексил и промыслил формулы:
    1) F(3*n) = F(n+1)^3 + F(n)^3 + F(n-1)^3 (из википедии)
    2) sum[0...N] F(i)^3 = (1/2)*(F(n)*F(n+1)^2 + (-1)^(n-1)*F(n-1) + 1) отсюда

    сумму F(3*n) можно выразить через сумму F(n)^3 и потом применить формулу (2)

    в итоге получается

    sum[0...N] F(3*i) = (1/2)*(F(n)*F(n+1)^2 + (-1)^(n-1)*F(n-1) + 1) - 1 + F(n)^3 + F(n+1)^3

    для этого выражения нам нужны F(n), F(n+1) и F(n-1) = F(n+1) - F(n)

    F(n) и F(n+1) вычисляем методом "fast doubling", который делает O(ln(n)) действий вместо O(n) стандартного способа. Ускорение знатное.

    Итого:
    const fib = (n, a = []) => {
        if (n < 1) {
            a[0] = 0n;
            a[1] = 1n;
        } else {
            const m = Math.floor(n/2);
            fib(m, a);
            const x = a[0] * (2n * a[1] - a[0]);
            const y = a[0] * a[0] + a[1] * a[1];
            if (n % 2) {
                a[0] = y;
                a[1] = x + y;
            } else {
                a[0] = x;
                a[1] = y;
            }
            
        }
        return a;
    }
    
    const sumFib3n = (n) => {
        if (n < 1) { return 0n; }
    
        const [fn, fnp1] = fib(n); // fn = fib(n), fnp1 = fib(n+1), 
        const fnm1 = fnp1 - fn;  // fnm1 = fib(n-1), 
        const sgn = n % 2 ? 1n : -1n;
        const sumPow3 = (fn * fnp1 * fnp1 + sgn * fnm1 + 1n) / 2n;
        
        return sumPow3 - 1n + fn * fn * fn + fnp1 * fnp1 * fnp1;
    }
    
    console.log(sumFib3n(Math.floor((40000000 - 2)/3)));
    Ответ написан
    2 комментария
  • Не понимаю, почему программа "тяжелая"?

    Maksim_64
    @Maksim_64
    Data Analyst
    Потому что вызовов рекурсивной функции происходит больше раз чем ты ожидаешь, и растет все это дело не линейно с увеличением n. Нужно оптимизировать рекурсивную функцию.
    from functools import lru_cache
    @lru_cache
    def F(n):
        print(n)
        if n <= 1:
            return n
        if n>1: 
            return F(n-1)+F(n-2)
    F(8)
    Вот твоя функция в точности, я добавил кеширование результатов, и print(n). Запусти с ним и без него и посмотри сколько лишних вызовов происходит. Если владеешь английским вот хорошая статья почитай как сделать своими руками, без встроенного декоратора, различные стратегии и т.д. https://realpython.com/lru-cache-python/
    Ответ написан
    1 комментарий
  • Знает ли кто-то системную DLL, которая не фиксирует себя в памяти при загрузке?

    Vapaamies
    @Vapaamies
    Разработчик в прошлом и будущем
    Знаю, что есть ключ реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs, но не знаю, из-за него ли такое поведение.
    Ответ написан
    Комментировать
  • Как починить циклический импорт?

    @Everything_is_bad
    Стёпанька, уже давно для такого придумали if TYPE_CHECKING: и "GameCreator"почему ты это не используешь, для меня загадка.
    Ответ написан
    Комментировать
  • Как асинхронно использовать gui и несколько бесконечных циклов?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Асинхронный код запустить в отдельном потоке, а все взаимодействия с интерфейсом из этого кода делать сигналами. Есть ещё библиотеки, позволяющие использовать цикл событий asyncio в качестве цикла событий окна, что звучит здорово, но сам я их в бою не пробовал.

    UPDATE:
    Надо же, с 2019-го многое поменялось в интересную сторону. Для PyQt и PySide есть qasync, который активно развивается, а для Tk вообще не нужны сторонние библиотеки:
    import tkinter as tk
    from tkinter import ttk
    import asyncio
    
    
    class App:
        async def exec(self):
            self.window = Window(asyncio.get_event_loop())
            await self.window.show();
    
    
    class Window(tk.Tk):
        def __init__(self, loop):
            self.loop = loop
            self.root = tk.Tk()
            self.animation = "░▒▒▒▒▒"
            self.label = tk.Label(text="")
            self.label.grid(row=0, columnspan=2, padx=(8, 8), pady=(16, 0))
            self.progressbar = ttk.Progressbar(length=280)
            self.progressbar.grid(row=1, columnspan=2, padx=(8, 8), pady=(16, 0))
            button_block = tk.Button(text="Calculate Sync", width=10, command=self.calculate_sync)
            button_block.grid(row=2, column=0, sticky=tk.W, padx=8, pady=8)
            button_non_block = tk.Button(text="Calculate Async", width=10, command=lambda: self.loop.create_task(self.calculate_async()))
            button_non_block.grid(row=2, column=1, sticky=tk.W, padx=8, pady=8)
    
        async def show(self):
            while True:
                self.label["text"] = self.animation
                self.animation = self.animation[1:] + self.animation[0]
                self.root.update()
                await asyncio.sleep(.1)
    
        def calculate_sync(self):
            max = 3000000
            for i in range(1, max):
                self.progressbar["value"] = i / max * 100
    
        async def calculate_async(self):
            max = 3000000
            for i in range(1, max):
                self.progressbar["value"] = i / max * 100
                if i % 1000 == 0:
                    await asyncio.sleep(0)
    
    
    asyncio.run(App().exec())
    Ответ написан
    Комментировать
  • Почему в этом коде при проверке слов с помощью оператора in в скобках он работает как надо, а без скобок по другому?

    kawabanga
    @kawabanga
    Чему равно данное выражение в Питоне?
    ("хорошо" or "прекрасно" or "отлично" or "пойдет")


    Я думаю оно равно true.

    А ваш синтаксис, должен быть около таким -

    otvet in [ "хорошо", "прекрасно" , "отлично", "пойдет"]
    Ответ написан
    1 комментарий
  • Как хранить константы в python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Ваш подход вполне пригоден к использованию и его можно применять.
    Тут надо внести ясность, что есть разница между константами и настройками. Настройки предполагается менять, их иногда "перекрывают" через параметры командной строки или переменные среды окружения.
    Если вам нужны настройки, то этот вариант не годится. Используйте предложенный выше вариант с Pydantic.
    Если это именно константы, их не потребуется или не скоро потребуется перекрывать, загружать из файлов, пробрасывать через переменные среды окружения, через параметры командной строки и т.д.
    Если значения этих констант приемлемо хранить в репозитории, то нет ничего плохого в том, что вы группируете константы в классы. Это нормально для питона.

    Но учтите, что вам может захотеться хранить в таких вот местах какие-то чувствительные, т.н. секретные данные. Например, ключи шифрования, пароли для подключения к БД или другим сервисам, ключи API, всякие токены и т.д. Такие данные опасно, неудобно и неправильно хранить в репозитории вместе с кодом. Для хранения таких параметров тоже нужно использовать библиотеки для хранения, сериализации и десериализации настроек.

    Возможно у вас возникнет соблазн сейчас сделать вот так по-простому, а чувствительные данные и секреты тоже импортировать в виде питоновских модулей, но эти модули добавить в игнор-лист репозитория, а импортировать с соответствующим перехватом ошибок импорта... Так можно сделать, если вам критически не хочется брать в проект лишние зависимости, но это тот ещё геморрой. Лучше использовать специальные механизмы хранения настроек сразу. Тем более это потребует меньше кода (который нужно еще и тестировать) и сложности (которую принято выносить и тестировать отдельно, чем такие либы как Pydantic и занимается).
    Ответ написан
    1 комментарий
  • Python Replace ломает файл. Почему?

    LaRN
    @LaRN
    Senior Developer
    А если не делать REPLACE в имеющемся файле, а создать новый файл, условно C:\\m\\notice_tmp.ini и туда сохранить новую версию содержимого, после чего удалить старый файл, а новый переименовать в C:\\m\\notice.ini.
    Ответ написан
    1 комментарий
  • Текстовый калькулятор на Python. Как реализовать поддержку деления?

    LaRN
    @LaRN
    Senior Developer
    Попробуйте использовать тип Decimal.
    Как-то так
    >>> # Import the Decimal type from the decimal module
    >>> from decimal import Decimal
    
    >>> # Values are represented exactly so no rounding error occurs
    >>> Decimal("0.1") + Decimal("0.2") == Decimal("0.3")
    True
    
    >>> # By default 28 significant figures are preserved
    >>> Decimal(1) / Decimal(7)
    Decimal('0.1428571428571428571428571429')
    
    >>> # You can change the significant figures if needed
    >>> from decimal import getcontext
    >>> getcontext().prec = 6  # Use 6 significant figures
    >>> Decimal(1) / Decimal(7)
    Decimal('0.142857')
    Ответ написан
    Комментировать
  • Как записать текст из базы данных в txt файл делая отступы?

    includedlibrary
    @includedlibrary
    myfile = open('test.txt', 'w')
    Когда открываете файл в режиме 'w', вы открываете его на перезапись. Можно вместо 'w' передать 'a', тогда всё будет записываться в конец файла. Но, во-первых, в вашем коде один файл на всех пользователей (не знаю, была ли цель сделать именно так, поэтому пишу), во-вторых, могут быть дубликаты, т.е. желательно добавить проверку на уникальность. Можно взять СУБД (если нужно хранить всё в файле, то можно использовать sqlite), тогда и работать с несколькими пользователями будет проще и проверку на укникальность самому писать не придётся. Также использование СУБД позволит в будущем без проблем хранить какие-либо ещё данные, кроме URL прокси серверов
    Ответ написан
    Комментировать
  • Ошибка NameError: name 'np' is not defined?

    Maksim_64
    @Maksim_64
    Data Analyst
    Попробуй установить если не установлен numpy и импортировать его import numpy as np
    Ответ написан
    Комментировать
  • Как исправить ошибку?

    @Zzzz9
    cur.execute(f"INSERT INTO users (id, class, liter) VALUES (?, ?, ?)",(id_user,class_user,litera_user))
    Ответ написан
    Комментировать