• Почему тесты не срабатывают?

    @o5a
    runapa, goto это ближе к обычному циклу while. А рекурсивный вызов - когда функция вызывает саму себя, как матрешка, в каждом вызове обрабатывай одним и тем же способом результат предыдущего вызова самой себя, как в данной задаче.

    Кстати, у данной задачи есть еще такое сразу неочевидное интересное решение:
    def digital_root(n):
        return n%9 or n and 9
  • Как перевести кодировку latin-1 в utf-8?

    @o5a
    Bogdan Buchko,
    Этим Вы не решили проблему, о которой думали в исходном вопросе.
    Проблема у Вас не в том, что в тексте
    коды в шестнадцатеричной системе
    , они вообще никак на это не влияли, это просто текст.
    Изначально ошибка у вас возникала потому, что вы свои txt файлы, сохраненные в кодировке "windows-1251" открывали в кодировке 'utf-8"
    with open(path, 'r', encoding='utf-8')
    Отсюда и такая ошибка.
    Затем в своем решении я так понимаю убрали явное проставление кодировки, изменив на это:
    with open(path, 'r')
    В таком случае файлы просто начали открываться по умолчанию в кодировке "win-1251", которая для них и была правильной, поэтому все заработало верно.
    Последующие шаги
    str_encode = string.encode(encoding = 'UTF-8')
    str_decode = str_encode.decode()

    уже не играли роли: вы просто закодировали строку в utf-8 и сразу же ее раскодировали в utf-8.
    Вы могли их полностью пропустить, оставив только:
    ...
                with open(path, 'r') as f:
                    for string in f:
                        if text in string:
  • Как отформатировать таблицу в pandas?

    @o5a
    Nikita235, можно попробовать таким способом, напрямую через PIL (набросал примерно, но вариант рабочий)
    from PIL import Image, ImageDraw, ImageFont
    from io import BytesIO
    
    def text_to_image(text, size=20):
        # нужно указать существующий файл шрифта
        my_font = ImageFont.truetype(font='c:/Windows/Fonts/consola.ttf', size=size)
        text_data = text.split('\n')
        line_num = len(text_data)
        # определяет размер области с учетом шрифта
        bsize = my_font.getsize(text_data[0])
        bsize = (bsize[0], bsize[1]*line_num)
        img = Image.new(mode='RGB', size=bsize, color=(255, 255, 255))
        d1 = ImageDraw.Draw(img)
        d1.text((0, 0), text=text, font=my_font, fill=(0, 0, 0))
        # img.show() # можно раскоментить для проверки получившейся картинки
    
        # и получившуюся картинку преобразуем в байтовый объект, чтобы можно было использовать в телеграм
        # создаем наш байтовый объект-файл
        file = BytesIO()
        # в который и сохраняем сгенерированную картинку
        img.save(file, 'PNG')
        # не забыть промотать файл в начало
        file.seek(0)
        return file
    
    # далее уже в телеграм результат этой функции можно напрямую отсылать как картинку
    table = SWHL_sniper()
    img = text_to_image(table)
    bot.send_photo(message.chat.id, img)
  • Возможно ли сделать весь этот код в одной строчке в виде list comprehension?

    @o5a
    d1n0z4ur, Для аналогичного результата можно использовать random.sample, тогда получите свои рандомные выборки.
  • Как отформатировать таблицу в pandas?

    @o5a
    Nikita235, Да, в такой постановке текстом никак не вывести, если он просто не вмещается в ширину экрана. Но можете, как предложили другие, перевести таблицу в изображение, и высылать его, тогда картинка смасштабируется по ширине.
  • Как расставить в тексте ` вокруг символов, которые не являются буквами (русскими или англ)?

    @o5a
    Как уже предложили, можно решать либо через регулярные выражения (re.sub хорошо подойдет), либо простым методом перебора посимвольно, тоже вариант. В обоих случаях нужно сначала определить символы, которые не нужно экранировать, создать из них список/строку (разрешенные символы, "белый список", whitelist). Потому что Вы пока и сами неправильно сформулировали условие. По нему получается, что и пробелы, и запятые тоже нужно экранировать, но ведь наверное это не так? Вот и нужно составить четкий список, что не экранируется. Эти данные и будут использоваться для сравнения.

    Если не использовать regexp, можно например так:
    Заводим некий флаг, указывающий на переход от разрешенных символов к запрещенным (= остальным).
    Перебираем строку посимвольно.
    Если категория символов сменилась (т.е. перешли от разрешенных к запрещенным и наоборот), то в зависимости от флага добавляем эти кавычки до или после символа, и обновляем флаг.
  • Как отформатировать таблицу в pandas?

    @o5a
    Nikita235, насколько вижу, на телефоне искажено по другой причине. Шрифт там тоже моноширинный, т.е. само форматирование есть, но в телефоне ширина текста меньше, поэтому он делает перенос на другую строку, из-за этого форматирование "съезжает." Если расположите телефон горизонтально, например, то вся таблица отобразится верно. Как вариант, можете ограничить кол-во выводимых колонок, чтобы все влезало в строку.
  • TypeError: cannot unpack non-iterable NoneType object как исправить?

    @o5a
    c1edue, Такой полный перебор не пройдет по условиям задачи, это слишком долго, задача на производительность.
    Как минимум Вам не нужно перебирать все значения числа, ведь их квадрат итак превысит само число.
  • Не получается переписать код с php на python?

    @o5a
    Оно конечно лишнее, но по факту он там просто этот json гонял в строку и обратно, так что результат одинаковый.
    Ошибка у него наверное потому, что он решил декодировать sign2, должно быть
    "X-Sign": sign2
  • Как работает random.choices с weights?

    @o5a
    Максим Припадчев, так я про то же самое и написал. Речь не про сумму 100, а то, что сумма составляет 100%.
  • Как работает random.choices с weights?

    @o5a
    Максим Припадчев, в данном случае указание весов в weights как раз означает, что шанс каждого равен его весу, деленному на сумму вех весов, поэтому сумма весов и составляет 100%. Сама по себе эта функция рандома так работает. Речь не про число 100, а то, что сумма всех этих чисел составляет 100%.
    У этой функции есть альтернативный параметр cum_weights, который представляет собой как раз кумулятивное сложение весов. Его можно указывать напрямую вместо простого weights. Если не указан, она сама его рассчитывает, складывая weights. По факту cum_weights (заданное явно или пересчитанное из weights) и используется для расчета шанса в функции. Последнее значение в cum_weights как раз и составляет 100%.
  • Как работает random.choices с weights?

    @o5a
    Elvis,
    Вес - это же не процентное соотношение того что выберется? То есть данный код не означает что в 80% случае выберется 5?

    Это и означает. Но не просто потому, что там написано 80. А потому что это 80 деленное на сумму всех весов:
    80 / (1+ 3+ 7+ 9+ 80) = 80/100 = 80%
  • Как работает random.choices с weights?

    @o5a
    Максим Припадчев, по-моему вы что-то перемудрили. Указанные веса означают относительную вероятность каждого.
    Т.е. в вашем случае из random.choices(['Red','Black'],[5,25], k=100)
    Вероятность 'Red' будет 5/(5+25) = 1/6,
    а 'Black' - 25/(5+25) = 5/6

    В случае автора вопроса вероятность последнего элемента (5) будет соответственно:
    80/sum((1, 3, 7, 9, 80)) = 0.8 - т.е. как раз 80%
    потому что сумма весов как раз и составляет 100.
  • Почему зависает insert в sqlite3 python?

    @o5a
    Алексей, а сколько вообще данных (строк) в этих таблицах?
  • Что делать, почему ffmpeg не работает?

    @o5a
    malsem32, а дальше нужно изменить свой код. Или просто изменить однозначно, чтобы работало только в Linux
    disnake.FFmpegPCMAudio(executable='ffmpeg', ...

    Или же задавать в зависимости от запускаемой ОС, узнав ее предварительно, самый простой способ:
    import os
    
    if os.name == 'nt':
        ffmpeg_exec = 'data_files/ffmpeg.exe'
    else:
        ffmpeg_exec = 'ffmpeg'
    
    # и потом уже использовать ее
    ...
    disnake.FFmpegPCMAudio(executable=ffmpeg_exec, ...
  • Query is too old and response timeout expired or query id is invalid, как решить?

    @o5a
    Александр Петрушин, по этим данным сложно сказать, я не особо знаю APScheduler. Возможно не так передаете аргументы в планировщик, там в параметр args насколько вижу нужно передавать их. Лучше оформите новым вопросом, может кто подскажет еще.
  • Как переконвертировать из csv в xlsx используя python?

    @o5a
    Данил noname, проверьте соответствие разделителей колонок в файле указанному в sep=";"
  • Как оптимизировать ответ api сократив количество возвращаемых полей?

    @o5a
    kreativ_25, никаким. Если их API не предусматривает возможности самому выбрать формат возвращаемых данных (судя по этому так и есть), то они всегда будут возвращать в таком формате, полные данные, вы на это никак не влияете.
    Если же спрашиваете о том, можно ли в целом эти данные преобразовать, чтобы остались только нужные ключи, то это сделать можно самому (но уже после получения полных данных от API).
  • Как избежать повторения функции при получении коложа фотографий?

    @o5a
    Роман Бурч, относительно недавно похожую проблему пытались решить https://qna.habr.com/q/1201610
    Посмотрите, в комментариях были варианты. Т.е. надо самому смотреть id сообщения (message.media_group_id) и пока оно не сменилось, не отправлять заново данные.
  • ValueError: too many values to unpack (expected 2) почему?

    @o5a
    chtopisatsuda, легко можете поймать именно тот случай, когда в тексте незапланированные значения, с помощью try
    try:
        loginDb, passwordDb = message.text.split()
        print(loginDb, passwordDb)
    except ValueError:
        print('Такого я не ожидал:', message.text)

    так и узнаете, когда приходят данные, на которые не рассчитывали