• Как обрабатывать callback handler в aiogram 3?

    Mi11er
    @Mi11er
    A human...
    Так написано же
    Please remove the {'text'} arguments from this call.


    @dp.callback_query(text='first')
    Ответ написан
    4 комментария
  • Телеграм бот генератор документа?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Куда копать чтобы имел такие функции.

    Сюда.
    Ответ написан
    Комментировать
  • Как правильно вывести массив из бд и перебрать его?

    Mi11er
    @Mi11er
    A human...
    Вопрос конечно детский
    У вас в массиве лежит объект , в объекте ключи и значения

    Значит первая итерация , по объектам
    Вторая уже по ключам.

    Код напишите сами.
    Ответ написан
    Комментировать
  • Есть ли в Python библиотека для "бугалтерских" расчетов?

    @kisaa
    >>> import decimal
    # By default rounding setting in python is decimal.ROUND_HALF_EVEN
    >>> decimal.getcontext().rounding = decimal.ROUND_DOWN
    >>> c = decimal.Decimal(34.1499123)
    # By default it should return 34.15 due to '99' after '34.14'
    >>> round(c,2)
    Decimal('34.14')
    >>> float(round(c,2))
    34.14
    >>> print(round(c,2))
    34.14

    https://stackoverflow.com/questions/8595973/trunca...
    Ответ написан
    Комментировать
  • Какие существуют способы защиты стилей CSS?

    opium
    @opium
    Просто люблю качественно работать
    мне кажется мания величия затмила ваш мозг глупейшими проблемами, вместо того чтобы код красиво оформить и выкладывать на гитхаб и делиться им, вы решили его зачем то прятать, просто задумайтесь, что хорошего вы сделали в жизни и почему не выкладываете его на гитхаб?
    Ответ написан
    11 комментариев
  • Почему не работает OWM?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Откройте документацию по pyowm, найдите там, какие параметры принимает метод weather_at_places() и доработайте ваш код соответственно документации.
    Ответ написан
    Комментировать
  • Когда я пытаюсь вывести в сообщение и переменную, и текст, то мне выдаёт ошибку,(делаю не в discord.py, а в py-cord) как это поправить?

    RimMirK
    @RimMirK
    Вроде человек. Вроде учусь. Вроде пайтону
    используй f строки при отправке сообщений

    - await ctx.respond('Вы проиграли!', ' Выигрышное число:', str(a), 'Ваше число:', str(amount))
    + await ctx.respond(f'Вы проиграли!\nВыигрышное число: {a}\nВаше число: {amount}')
    \n это перенос строки. Вот
    так
    Ответ написан
    1 комментарий
  • Как переименовать файлы?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Такие вещи удобно делать однострочниками через "py" прямо в командной строке, но это если знаешь питон и легко на нём фигачишь скрипты.

    Если у вас с питоном беда, то можете всё это проделать в экселе.
    Вам нужно выгрузить листинг каталога в файл, вставить его в столбец экселя, формулами обработать и в отдельном столбце получить команду для переименовывания. Потом этот столбец копируете и сохарняете его текст как *.bat-файл, или shell, если другая операционка.

    Если у вас есть мультикурсорный редактор типа сублайма, Атома, Notepad++, или любой IDE, то вы можно в списке файлов размножить курсоры на каждую строку и проделать все необходимые операции над всеми строками сразу. Получите на выходе тоже пакетный файл для переименования.

    Ещё можно поставить FarManager, сейчас он стал вообще кроссплатформенным. Там можно записываь клавиатурные макросы. Делаете одно переименоание под запись, а потом вешаете записанны ймакрос на клавишу и обрабатываете все файлы быстроенько.

    А ещё можно к фрилансерам сходить, если задача на один раз. Просто за тем, чтобы вам решили одноразовую задачу сюда ходить не принято. Тем более плюя на принятые правила на ресурсе и не оформляя правильно код, чтобы у люде йне вытекали глаза глядя на код без форматирования.

    Выбирайте решение на любой вкус.

    Ну ок, на питоне вам стоит каждое имя файла сплитнуть по символу "-", а потом, перебрав все элементы получившегося списка, дополнить нулями те, что состят только из цифр (метод isdigit).
    У строки есть метод zfill, который умеет это делать до нужной длины слева.
    Ответ написан
    Комментировать
  • Как работает кошелек https://t.me/CryptoBot?

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

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    Это внешний IP ертелекома в екатеринбурге. Автор вопроса, похоже, за NAT и пытается по внешнему ip вот так сокетом пробиться через nat.
    Так не получится. Ну или у него белый адрес, но роутер не пробрасывает внешние коннекты на его комп.
    В общем, автору следовало бы указать сетевой адрес локального интерфейса при подключении.
    ipconfig что показывает? (ifconfig для линукс)
    Ответ написан
    5 комментариев
  • Как понять что я готов к ООП?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Если спрашиваете, то не готовы.

    В этом вопросе важно понимать, что изучив всего лишь объектный синтаксис, вы столь же готовы писать ООП, сколь готовы профессионально играть в шахматы, изучив как ходят фигуры.
    Главное в ООП - не синтаксис. А взаимодействие объектов. Композиция, наследование, инкапсуляция. Связность, связанность. Это все довольно сложно, и по усилиям, которые требуется затратить на обучение, запредельно отличается от изучения основ процедурного программирования.

    Так что просто запаситесь терпением, набирайтесь опыта в программировании, и постепенно разбирайтесь с ООП - сначала на примере чужих классов и книжек. Мартин, Фаулер - вот это вот всё.
    Ответ написан
    Комментировать
  • Как сформировать этот код в цикл?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Вам необходимо ознакомиться с темой «структуры данных», в частности - словари и списки.
    Также вам надо изучить вопрос «итерация».
    Без этого двигаться дальше бессмысленно.
    response = {'data': ['a', 'b', 'c']}
    sellprices = [response['data'][i] for i in range(3)]
    print(sellprices)
    Ответ написан
    6 комментариев
  • Почему цикл не добавляет переменную в словарь(список) Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Потому что написавший его разработчик ничего не знает об областях видимости.
    Ответ написан
    3 комментария
  • Пишу код для счастливых билетов, но в коде что-то не то и циклы не работают после 000000, в чём проблема?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, у тебя уехали циклы, начиная с о второй цифры. Они не внутри общего цикла.
    Далее, ты можешь заменить 6 циклов на один, просто по числам от 0 до 999999.
    for number in range(0, 1_000_000):
        str_number = f'{number:0>6}' # превращаем число в строку, добивая нулями слева до 6 знаков
        digits = list(map(int, str_number))  # каждый символ строки превращаем в отдельное число, т.е. цифру
        d1, d2, d3, d4, d5, d6 = digits  # распаковываем список цифр в отдельные переменные


    Ещё ты можешь перебирать первые 5 цифр, а шестую цифру вычислять - сумма первых трёх минус четвёртая и минус пятая . Если результат в диапазоне 0-9, то это и будет шестая цифра.

    Если же ты предпочтёшь перебирать 5 цифр отдельными циклами, то стоит делать иначе.
    Первые 3 цифры перебираешь полным циклом, 4я цифра не должна превышать сумму первых 3х, 5я цифра не должна превышать сумму первых 3х - 4ю цифру. 6ю цифру вычислишь.
    for d1 in range(10):
        for d2 in range(10):
            for d3 in range(10):
                for d4 in range(min(9, d1+d2+d3) + 1):
                    for d5 in range(min(9, d1 + d2 + d3 - d4) + 1):
                        d6 = d1 + d2 + d3 - d4 - d5
                        if 0 <= d6 <= 9:
                            print(f'{d1}{d2}{d3}{d4}{d5}{d6}')


    Аналогично, можно заметить, что не всегда имеет смысл перебирать 4-5 цифры с нуля. Пример: если первые три цифры 299, то четвёртая не может быть 0 или 1 - в этом случае оставшиеся две цифры должны будут дать в сумме 20 или 19, что невозможно. С учётом код изменится так:
    for d1 in range(10):
        for d2 in range(10):
            for d3 in range(10):
                min_d4 = max(0, d1 + d2 + d3 - 18)
                max_d4 = min(9, d1 + d2 + d3)
                for d4 in range(min_d4, max_d4 + 1):
                    min_d5 = max(0, d1 + d2 + d3 - d4 - 9)
                    max_d5 = min(9, d1 + d2 + d3 - d4)
                    for d5 in range(min_d5, max_d5 + 1):
                        d6 = d1 + d2 + d3 - d4 - d5
                        if 0 <= d6 <= 9:
                            print(f'{d1}{d2}{d3}{d4}{d5}{d6}')
    Ответ написан
    Комментировать
  • Почему с отрицательным кол-во хп персонаж жив?

    Vindicar
    @Vindicar
    RTFM!
    1. Включи логику. Ты сначала проверяешь, умер ли персонаж, а потом наносишь урон. Отсюда и наблюдаемое поведение.
    2. Никогда не используй f-строки для SQL запросов, освой parametrized queries.
    Ответ написан
    Комментировать
  • Как сделать чтобы бот запоминал следующее сообщение после слеш-команды?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В общем случае это плохая идея. А вдруг сообщение напишет другой пользователь, чем отправил команду?

    Правильнее использовать параметры, лучше с type hinting, чтобы Discord сам подсказывал параметры и приводил типы. Примерно так:

    @bot.slash_command(name='set', description='...')
    async def settings(ctx, selected_channel: discord.Channel):
        await ctx.send(f"Вы выбрали канал {selected_channel.mention}")
    Ответ написан
    6 комментариев
  • Как посмотреть время последней записи в Redis?

    Dunaevlad
    @Dunaevlad Автор вопроса
    А, кек, оно так и называется "lastsave"

    r = redis.Redis(host="localhost", port=6379, db=0)
    r.set("foo", raw)
    print(r.lastsave()
    Ответ написан
    Комментировать
  • Когда запускаю и пишу /start выдаёт ошибку? что не так в коде?

    очевидно же из ошибки - бот не является участником чата. нужно добавить бота в чат
    пока он не участник,он не может выполнить это
    invite_link = bot.export_chat_invite_link(GROUP_CHAT_ID)
    Ответ написан
    2 комментария
  • Как работает asyncio.sleep?

    Vindicar
    @Vindicar
    RTFM!
    Идея простая.
    Асинхронные приложения - это набор пар "операция - обработчик", где операция - это некоторый длительный процесс (скажем, вводы/вывод), который не требует постоянного внимания со стороны кода. Когда операция завершается, выполняется её обработчик. Этот обработчик может планировать другие операции, и так далее.

    Корутины - это такие функции, которые умеют сохранять своё состояние, и восстанавливать его. Т.е. когда корутина делает await-вызов, она начинает длительную операцию, а обработчик этой операции просто восстанавливает контекст корутины и продолжает её выполнение.

    Соответственно, await-вызов сохраняет текущий контекст корутины, и планирует новую длительную операцию. Какую - зависит от того, что идёт после await. Эта операция представлена тем или иными awiatable значением (Future, Task и т.п.).

    Рабочий цикл (loop, его также называют реактор) просто проверяет текущие операции. Как только одна из них завершилась, он выполняет её обработчик. А потом продолжает проверять остальные активные операции.

    Ключевой момент - выполняет обработчик, а только потом проверяет остальные операции. Т.е. если обработчик планирует операцию через await - это не проблема, она будет выполняться наравне с остальными. А вот если обработчик просто делает что-то длительное, он не возвращает управление циклу, и не даёт выполняться остальным операциям.

    asyncio.sleep() планирует ничего не делающую операцию, которая завершится успехом через заданное время. Поэтому её выполнение не мешает циклу-реактору. Просто ещё один await вызов, который приостанавливает текущую корутину и возвращает управление реактору.

    time.sleep() ничего не знает о реакторе и асинхронных операциях. Она приостанавливает выполнение обработчика, не прерывая его и не отдавая контроль реактору. Поэтому на время time.sleep() (или любой длительной синхронной операции) спит вся программа.
    Ответ написан
    5 комментариев
  • Как происходит работа с api?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Не нужно тебе брать таких заказов. Просто если ты задаешь такой вопрос - то ты находишся где-то на самом старте Web API. И сколько у тебя вопросов еще будет если ты вдруг возьмешь аванс и приступишь к работе?

    Отвечая на вопрос - никто не знает. Надо читать информацию на самом сайте. Там обычно есть описание
    этого API и обычно его использование стоит денег.
    Ответ написан
    4 комментария