Задать вопрос
Профиль пользователя заблокирован сроком с 1 апреля 2025 г. и навсегда по причине: подозрительная активность
  • Как решить проблему с обновлением pip?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Во-первых, надо явно указывать пути к ПО, которое запускаешь.
    Во-вторых, желательно запускать их, находясь в соответствующих папках, а не абы откуда.
    В-третьих, я бы не советовал обновлять штатный Python в Linux, т.к. на него там завязаны некоторые внутренние процессы. Пусть сам linux обновляет свои встроенные python как ему надо. После обновлений не исключены разнообразные неприятности.

    Вы ставьте себе свои python-ы в отдельные папки, в разных случаях могут понадобиться разные версии, и явно их вызывайте оттуда, не трогая системный python. И для этого лучше работать в виртуальных окружениях, подгоняя каждое под свою задачу.
    Ответ написан
    Комментировать
  • Для чего нужны Map и Set?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Из вопроса ничего не понятно, кроме того, что документацию не читали, гуглить не умеем, о структурах данных понятия не имеем. Грустное зрелище. Душераздирающее.
    https://learn.javascript.ru/map-set
    коротко:
    • Set - это множество уникальных объектов.
    • Map - это словарь, где каждому из множества уникальных объектов сопоставлено некое значение (возможно не уникальное).


    Совет: изучите структуры данных. Без этого дальше двигаться бессмысленно.
    Ответ написан
    Комментировать
  • Как удалить строку из массива не обладая ID, JSON?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Итак:
    приведенный в вопросе json не валидный, и работать с ним как с json нельзя.
    Я предположил, что мы получаем валидный JSON вот такого вида:
    {
        "users": [
          {"user": "name_test"},
          {"user": "name_test1"},
          {"user": "name_test2"}
        ]
    }

    тогда правильный код будет выглядеть, например, так:
    import json
    
    args = "name_test2"
    with open('config.json', 'rb') as fp:
        jsondata = json.load(fp)
        jsondata['users'] = [item for item in jsondata['users'] if item['user'] != args]
        print(jsondata)
    Ответ написан
  • Код не работает, что делать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Поигрался со своим чатом,
    короче, вот что получилось
    import asyncio
    
    from pyrogram import Client
    import shelve
    import random
    
    from secret.config import Config
    TEXTS = ['Круто!', 'Nice!!!!', 'Oh my god']
    
    config = Config()
    api_id = config.api_id
    api_hash = config.api_hash
    phone_number = config.phone
    PUBLIC = config.title
    chat_id = config.chat_id
    name = config.name
    processed_messages = shelve.open('processed_messages.db', writeback=True)
    app = Client(name, api_id, api_hash, phone_number=phone_number)
    
    
    async def main():
        async with app:
            public = await app.get_chat(PUBLIC)
            async for msg in app.get_chat_history(chat_id, limit=100):
                if msg.from_user:  # если у нас есть параметр from_user
                    any_sender_id = msg.from_user.id  # присваеваем ID юзера
                else:  # иначе
                    any_sender_id = msg.sender_chat.id  # присваеваем ID канала или чата
                if any_sender_id == public.id:  # проверяем что это нужный паблик
                    if str(msg.id) in processed_messages:
                        print(f'Пропускаем уже обработанное message_id={msg.id}')
    
                    else:
                        processed_messages.update({str(msg.id): True})
                        print(f'Обработка message_id={msg.id}')
                        text = random.choice(TEXTS)
                        print(text)
                        result = await app.send_message(chat_id, text, reply_to_message_id=msg.id)
                        processed_messages.update({str(result.id): True})
    
                        await asyncio.sleep(1)  # пауза, чтоб не банили за флуд
    
    
    app.run(main())
    из твоего кода.
    Конечно, это всё такое... ну... прототип. Пользоваться этим "в лоб" я бы не советовал.
    Ответ написан
    Комментировать
  • Как рандомно расположить объекты без пересечений?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Для решения этой проблемы в игровых движках обычно есть встроенный механизм collide или что-нибудь в таком духе.
    Например, в pygame можно создать объект типа Rect и у него будет методы colliderect(Rect) и collidelist(list); первый проверяет пересечение текущего и указанного объектов Rect; последний метод берет список объектов типа Rect, поданный на вход, и проверяет на пересечение с хотя бы одним из них.
    Так что всё, что вы хотите сделать, уже есть в pygame «из коробки»
    Вам лишь необходимо почитать документацию.
    Ответ написан
  • Pyrogram bot: как отправить фото по айди?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Полагаю, в лоб никак. В документации Telegram сказано, что big_file_idможно использовать только для download.
    В общем, видимо, вам придется их куда-то скачивать (в память?) и затем отдавать в другой чат.
    Ответ написан
    3 комментария
  • Ошибка в коде (Python). Не пойму в чем дело и почему он не пропускает?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    В классе Settings два __init__
    Естественно, второй перезаписывает первый.
    Ответ написан
    1 комментарий
  • Как пройтись по 2 спискам одновременно?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Ну если в лоб, можно проверку на extension сделать внутри цикла по directories.
    Если их не безумное количество и нет необходимости сэкономить микросекунды на каждом цикле, то пойдёт.
    Ответ написан
  • Автоматическая сортировка столбца в Excel?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Сам вот именно такого не делал, но в принципе довольно просто:
    Делаешь исходную таблицу с формулами, а итоговую с фиксированными отсортированными значениями колонки, а остальные значения в других колонках итоговой подтягивай из исходной таблицы по отсортированной колонке ну хотя бы впр, или поискпоз/индекс, или суммпроизв.
    Ответ написан
    Комментировать
  • Есть какие-нибудь способы оптимизации бота?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Есть такие способы. И методы.
    Ответ написан
    2 комментария
  • Ошибка str не могу исправить, как ее исправить?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Какая-то из переменных price, name, url приходит из парсера со значением None. Чтобы ошибки не было, надо предварительно проверять каждую переменную на None, либо перехватывать ошибку и обрабатывать (так прямее).
    Ответ написан
    Комментировать
  • Бот не считает формулу. Как исправить?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Как я понял, когда бот начинает работать, он обрабатывает зарегистрированные в нем хэндлеры, и ваш хэндлер lake перехватывает всё, кроме явно start и help, поэтому дальше него и не проходит. Я глубоко не вникал, возможно этот момент я неправильно понял.
    Но, в принципе, можно обойтись и этим одним хндлером, просто правильно обрабатывать то, что в него приходит. А приходить в него должно либо выбор кнопки, либо число.
    При выборе кнопки фиксируем номер кнопки и ждем число. Если пришло число - вычисляем, возвращаем, сбрасываем номер кнопки и всё сначала.

    lake_number = 0
    
    
    @dp.message_handler()
    async def lake(message: types.Message):
        global lake_number
        if message.text == 'Бассейн №1':
            await bot.send_message(message.from_user.id, 'Введи расстояние до воды №1.')
            lake_number = 1
        if message.text == 'Бассейн №2':
            await bot.send_message(message.from_user.id, 'Введи расстояние до воды №2.')
            lake_number = 2
        if bool(lake_number) and message.text.isdigit():
            b = int(message.text)
            if lake_number == 1:
                h = 8 - b
                v = (h / 3)
                level = v / 16000 * 100  # тут в формуле где-то ошибка, поэтому я ее просто убрал
                await bot.send_message(message.from_user.id,
                                       str("Количество:" + str(v) + "м3. Глубина:" + str(h) + "м. Наполнение: " + str(
                                           level) + "%"))
            if lake_number == 2:
                h2 = 5 - ((b - 1) * float(0.7))
                s2 = (90 - (b * 0.52)) * (100 - (b * 0.52)) / 2
                n = sqrt(2500 * s2)
                s1 = 1
                g = s1 + n + s2
                v2 = (h2 / 3) * g
                level2 = v2 / 17000 * 100
                await bot.send_message(message.from_user.id,
                                       str("Количество:" + str(v2) + "м3. Глубина:" + str(h2) +
                                           "м. Наполнение: " + str(level2) + "%"))
            lake_number = 0
            await bot.send_message(message.from_user.id, "Попробуй еще...")
    Ответ написан
    4 комментария
  • Как правильно оформить sql-запрос чтобы он был читаемый?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Тело with в скобках я бы сдвинул на таб вправо, и странные запятые в начале строк убрал бы взад.
    Также inner join вправо на таб вместе с on- потому что оно вместе с первой таблицей является подуровнем from.
    Но вообще это вкусовщина, и если требований не зафиксировано где-нибудь в ВНД, то хоть в одну строчку пиши всё...
    Как-то
    так
    with sum_bon as
    (
        select 
            worker_ref_id, 
            employee_title, 
            sex, 
            sum(bonus) as sbon 
        from 
            sf_employee as sfe
            inner join sf_bonus as sfb
            on sfe.id=sfb.worker_ref_id
        group by 
            employee_title, 
            sex, 
            worker_ref_id
    )
    
    select 
        sum_bon.employee_title, 
        sum_bon.sex, 
        avg(sfe.salary+sbon) compensation 
    from 
        sf_employee as sfe
        inner join sum_bon
        on sfe.id=sum_bon.worker_ref_id
    group by 
        sum_bon.employee_title,
        sum_bon.sex
    Ответ написан
    Комментировать
  • Возможно ли работать в консоли через iPad?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    syslinux, найдите кого-то с ipad и попробуйте с его ipad порешать пару задач своих. Только так и поймете, как вам дальше поступать.
    Лично я бы под задачи, не дающие нагрузки на проц, взял бы Macbook Air. Легкий, удобный, понятный, и нет ipad-овских планшетных ограничений.
    Но надо понимать - если вы начнете его нагружать, он превратится в печку.
    Ответ написан
  • Как записывать информацию в CSV каждый раз с новой строки?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Добавьте в конец строки \n

    Снова и снова говорю вам: найдите и проработайте «Изучаем Python». Там всё разжёвано.
    Ответ написан
    Комментировать
  • Как правильно добавить индекс?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    images = ['a', 'b', 'c']
    for c in "educative":
        print(f'perehodim_k_sled_bukve {c}')
        for number, image in enumerate(images):
            print(f'буква {c} цикл {number} image {image}')
    Ответ написан
    Комментировать
  • Почему не открывается вторая крышка корпуса?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    когда я работал эникеем, такие случаи попадались нередко.
    Торопиться ковырять отверткой не надо.

    Сначала надо снять переднюю крышку (морду) и убедиться, что там нет каких-то винтов и защелок.
    Морда может и сама держать эту крышку (встречались и такие варианты).

    Потом глазами изучить со стороны морды, как крышка снимается.

    Да, перед силовыми упражнениями лучше удалить из корпуса тяжелые детали (видеоплату, радиатор процессора), иначе можно резким движением сорвать их. Также и жесткие диски.

    Если крышка сдвижная и просто туго сидит, то лечилось так: системник клали себе на колени крышкой вверх лицом вправо, и ладонью и запястьем правой руки совершали сильные скользящие удары по сдвижной крышке в районе зацепов, направлением влево, в сторону открывания. Это был самый эффективный и быстрый способ.

    У некоторых корпусов крышка не просто сдвигалась, а сначала верх ее надо было на 5 градусов отклонить, потом низ выходил из паза.
    Ответ написан
    5 комментариев
  • Pytelegrambotapi name 'a' is not defined, почему?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Потому что в глобал оно не объявлено.
    Ответ написан
  • В чём ошибка в моей реализации «снегопада»?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Да… короче, надо не для каждой снежинки вызывать
    start_drawing()
    …
    finish_drawing()

    а для каждого нового экрана. Т.е. начал рисовать, поменял для всех снежинок координаты, потом все их перерисовал и потом закончил рисовать экран. Он автоматом заменил предыдущий.
    Ответ написан
    Комментировать
  • Почему python не понимает selenium?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    попробуйте так:
    by = 'XPATH'
    value = '//*[@id="sf_url"]'
    video_input = browser.find_element(by=by, value=value)

    Для последней версии selenium оно вроде так работает.
    Ответ написан